プログラマーたるもの、ソースコードはGitHubで管理しよう
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
皆さんは、ソースコードの管理はどうしてますか?
まさか「デスクトップにフォルダを作ってそこに保存している」なんてことはありませんよね!?
もし突然パソコンが起動しなくなったら、今まで作ったソースコードが全て消えてしまいます。
Dropboxなどのオンラインストレージに保存するのもバックアップとしては良いのですが、詳細な編集履歴までは管理出来ません。
通常、開発プロジェクトでは「バージョン管理システム」というものを使ってソースコードをしっかり管理します。
今回は、バージョン管理システムをオンラインで手軽に使える「GitHub」について紹介します。
GitHubを使おう!
GitHub(ギットハブ)は、オンラインで簡単にソースコード管理が行えるWebサービスです。
GitHub
https://github.com/
バージョン管理システムには「Git」「Subversion」「CVS」といった様々なソフトウェアがあり、以前はこれらを使うためには自分のサーバーにセットアップする必要がありました。
GitHubは「Git」というバージョン管理システムをオンラインで手軽に使えるサービスで、サーバーもセットアップも必要なく、ブラウザからアカウント登録するだけで無料で使うことが出来ます。
無料版の場合は、利用出来る機能やストレージ容量に制限がありますが、まずは無料版で試してみて必要になったら有料版を検討するというのが良いかと思います。
ソースコードをバックアップしてくれるだけでなく、開発に役立つさまざまな機能が備わっていますので、プログラミングをしている人は是非活用しましょう!
※なお、GitHubでは、自分のリポジトリを「公開(Public)」「非公開(Private)」どちらにも設定出来ます。Privateに設定していないソースコードは誰からでも見れてしまいますので、公開したくないプロジェクトは「非公開(Private)」に設定するようにしましょう。
ソースコードの履歴管理が出来る
GitHubでは、ソースコードをバックアップしてくれるだけでなく「履歴管理」も行ってくれます。
履歴管理とは、ソースコードの「どの部分を」「誰が」「いつ」「どのように変更したか」を細かく記録することです。
ソースコードが少ないうちは、コメントなどで管理出来るかもしれませんが、開発プロジェクトのソースコードは膨大な数になるため、全ての編集履歴を管理することは困難です。
GitHubでは、全てのソースコードの編集履歴を細かく記録してくれます。
各ソースの編集履歴とその関連を全て記録しているため、「ある時点のバージョンに全てのソースコードを戻す」なんてことも一瞬で出来ます。
ソースコードは、どこかを修正すると別の箇所に影響が出てしまうこともあるので、過去を遡って編集履歴を確認出来るのはとても役立ちます。
ブランチ(開発ライン)の管理も可能
通常、開発プロジェクトでは、複数の「開発ライン」が存在します。
Webサービスをリリースした後、次期バージョンアップのための開発を行っていきますが、すでにリリースされている現行バージョンに何かバグが発生した場合、すぐに直さなければなりません。
しかし、開発ラインが1つしかない場合、ソースコードにはすでに次期バージョンのための修正が入ってしまっていますので、修正箇所が競合したり不都合が発生する可能性があります。
そのため、以下のように開発ラインを2つに分けます。
①リリース済み安定版のためのメイン開発ライン
②次期バージョンための開発ライン
この開発ラインのことを、GitHubでは「ブランチ(枝)」といいます。
次期バージョンが出来上がったら、メインブランチへ合流(マージ)させ、また次のバージョンの開発が始まるといった流れで開発が進行していきます。
開発プロジェクトでは、このように開発ラインが枝分かれ→合流を繰り返しています。
GitHubでは、このようなブランチの管理が簡単に行えます。
同じファイルを同時に編集しても大丈夫!(競合をマージ)
1つのソースコードを複数の開発者が同時に別々の編集をしてしまった場合、普通は最後に保存した人の編集内容しか反映されません。(他の人の編集内容は上書きされてしまいます)
このような状況を「競合(コンフリクト)」と言います。
競合が発生してしまった場合は、各人の修正内容を1つ1つ確認しながら、全ての修正内容を1つにまとめていく作業(マージ)が必要になります。
GitHubでは、競合が発生した場合にそれぞれの修正内容を分かりやすく比較表示してくれますので、開発者は修正差分を確認しながらマージしていくことが出来ます。
チーム開発やリリース済みのサービスでは、こういった機能が無いとソースコードは怖くて触れたものじゃありません。GitHubが競合を管理してくれているからこそ、複数人の同時作業だったとしても「今このソース誰かいじってるー?」といちいち確認したり、他の人の修正が終わるのを待ったりせずにコーディングを始めることが出来ます。
特に、オープンソースプロジェクトなど、リモートでの開発プロジェクトでは必須の機能です。
GitHub(Git)の仕組み
GitHubでは、まず「リポジトリ」というものを、開発プロジェクトごとに作成します。
開発プロジェクトの全ソースコードとその編集履歴は、このリポジトリの中に保存されます。
リポジトリには、全てのマスターとなる「リモートリポジトリ」と、各開発者のPCに作られる「ローカルリポジトリ」があります。
GitHubを使った開発の流れは以下のようになります。
①各開発者は、まずリモートリポジトリからソースコード一式を取得します。【clone】
↓
②ソースコードを修正し、自分のローカルリポジトリに保存していきます。【commit】
↓
③自分の担当分の開発が完了して動作確認が出来たら、リモートリポジトリにアップロードします。(その際、他の人の編集内容と競合があればマージを行います)【push】
↓
④定期的にリモートリポジトリの最新内容をローカルリポジトリに反映します。【pull】
【用語を覚えておこう】
リポジトリ:プロジェクトが保存される場所(リモート/ローカルがある)
clone(クローン):リモートリポジトリからローカルリポジトリを作成すること。
commit(コミット):ローカルリポジトリに変更内容を保存すること。
push(プッシュ):ローカルリポジトリの内容をリモートリポジトリに反映すること。
pull(プル):リモートリポジトリから最新情報をローカルリポジトリに取得すること。
開発プロジェクトに役立つ機能
GitHubは、開発プロジェクトに役立つ以下のような機能も備わっています。
Issues(課題管理機能)
Issuesは、開発プロジェクトの「課題」を管理出来る機能です。
開発タスクやバグなどをカテゴリー分けして登録し、担当者を割り当てたり、内容について議論したり、ステータスを管理したりといったことが行えますので、プロジェクトのタスク管理ツールのように使えます。
しかも、課題をソースコード管理と関連付けることが出来るため、そのタスクで修正したソースコードの内容も簡単に確認出来る点がとても便利です。
Projects(カンバン機能)
Projectsは、Issuesの課題をカンバン形式で表示出来る機能です。
カンバン形式で表示されることにより、「今どんな課題が動いているのか」「対応中の課題は何か」といったことが一目瞭然で確認出来ます。
Pull requests(プルリクエスト機能)
各開発者が作ったプログラムをリモートリポジトリにプッシュする際、誰でも自由にプッシュ出来てしまうのは危険です。
もし、プログラムに何らかのバグがあったり、思わぬ修正を行っていた場合、リモートリポジトリが書き換わってしまうと、そのまま製品に影響が出てしまいます。
それを防ぐのが「プルリクエスト」という機能です。
これを使うと、各開発者はリモートリポジトリにプッシュしたい場合、まずプルリクエストという形で、管理者に対して「依頼」を行います。
プルリクエストには、プログラムの修正目的や、実際の修正内容、修正したソースの一覧などが記載されています。管理者はこれを見て問題が無いかどうか確認し、問題が無ければリモートリポジトリにマージするといった流れです。
これにより、チェック体制が強化されますので、製品にバグが起こりづらくなります。
また、各開発者が書いたソースコードを管理者がチェックする流れになりますので、より良い書き方がアドバイスされたりと、ソースコードの品質が底上げされるメリットもあります。
このように、ソースを他人にチェックしてもらうことを「コードレビュー」と言います。
忙しい開発プロジェクトだと、なかなかコードレビューを行うのが難しいですが、プルリクエストを運用フローに入れると、コードレビューが強制され、品質向上につながります。
こんな機能も(草が生える?)
GitHubには、開発活動を可視化する「Contributions」という機能があります。
自分のプロフィールページにアクセスすると、過去1年の自分の活動が色分けして表示されます。
リポジトリに何らかの変更を加えた(ソースをアップデートした)回数に応じて草が生える仕組みです。(回数が多いほど濃い緑色で表示されます)
こういった機能は、毎日ソースを書くモチベーションにつながりますね!
まとめ
GitHubを使うと、自分のソースコードをバックアップ出来るだけでなく、過去の編集履歴を管理したり、ブランチを管理したりと多くのメリットがあります。
Publicに設定しているリポジトリは、誰からでも見ることが出来ますので、自分のGitHubアカウントを教えることで「どんなソースを書くのか」「どんなツールを作ったのか」をアピールすることもでき、就職や開発プロジェクトに参加する際のポートフォリオのように使うことも出来ます。
プログラマーは当たり前のように使っているサービスですので、まだ利用していない人はこの機会にぜひ使ってみてください。