Webサービスの開発でなくてはならない存在の「GitHub」。企業システムの開発現場では、これから導入が本格化しそうだ。GitHubはどのような機能を持ち、何が便利なのか。GitHubの知っておきたいポイントを解説する。

 「GitHub(ギットハブ)」は今やWeb系を中心にソフトウエア開発の「インフラ」として確固とした地位を築きつつある。そこでGitHubについて、「なぜみんなに使われているのか」「どんな機能があるのか」「どのように使えば効果的なのか」といった疑問を解き明かしながら、GitHubのポイントを学ぼう。

主要な機能
中心はバージョン管理

 GitHubはバージョン管理システム「Git」を中心としたWebサービスである。課題管理の「Issues」やドキュメント管理の「Wiki」「Pages」といった機能で、チーム開発の効率化を促すツールだ。

 バージョン管理、課題管理、ドキュメント管理のそれぞれの機能を連携することで、チームのコミュニケーションが円滑になる(図1)。

図1●GitHubの機能
図1●GitHubの機能
[画像のクリックで拡大表示]

 まずはGitHubの主要な機能について見ていこう。

バージョン管理の「Git」

 GitHubの一番の肝となるのが、バージョン管理システムの「Git」だ。システム開発における成果物の版(バージョン)を、安全に管理するのがGitの役割だ。

 バージョン管理システムを利用すると、現場はどのように変わるのだろうか。まずは、バージョン管理システムを使わずに、ファイルサーバーの共有フォルダーに最新の成果物を格納する方法でシステム開発を行っているケースを想定してみよう(図2)。

図2●バージョン管理システムの考え方
図2●バージョン管理システムの考え方
[画像のクリックで拡大表示]

 ファイルサーバーで成果物を共有している場合、成果物を更新しても、いつ誰が何をしたかの記録は残らない。別途、Excelなどを使って手動で記録を残すことが必要だ。問題が発生した場合、原因を調べるためにはメンバーの記憶に頼るしかなく、問題が発生する前の状態に戻すことも難しい。

 ファイルサーバーで共有するケースはもう1つ問題がある。作業の整合性を保つために、最新のバージョンのファイルのみを保持する必要があるということだ。誰かが作業している場合、別のメンバーが同じファイルをコピーして作業することはできない。複数のメンバーが同時に作業できないことで、生産性が落ちるだけでなく、障害対応といった突発的な作業が発生した場合に全員の作業を止めてしまう可能性もある。

 今度はGitを利用する場合を考えてみよう。システム開発の成果物の共有にGitを利用すると、「いつ」「誰が」「何をしたか」といった作業履歴が全て保存される。問題発生時の調査が容易になるうえ、過去のバージョンを再現することもできる。作業履歴を分岐させることで、開発に参加する各作業者が別々にバージョンを管理できるため、個人の作業が止まることもない。

 前述のようにGitHubの中心はGitであることから、GitHubは「Gitの情報を参照したり、操作したりできるユーザーインタフェースを持ったWebサービス」ともいえる。

複数持てる「Gitリポジトリー」

 Gitでは、成果物を格納する場所を「repository(リポジトリー)」と呼ぶ。作業者はリポジトリーからソースコードなどを取り出して作業を行い、作業結果をリポジトリーに反映する。結果を反映する作業を「コミット」と呼ぶ。コミットの際には、作業者や作業内容なども合わせて記録できる。

 さらにGitは、リポジトリーを複数持てる特徴がある。まず、GitHubにメインとなるリポジトリーを用意した後、作業者はそこから手元にリポジトリーの複製を作成する(図3)。

図3●バージョン管理システム「Git」の概要
図3●バージョン管理システム「Git」の概要
[画像のクリックで拡大表示]

 リポジトリーが1つしかない場合、他の作業者と操作が競合してしまい、コミットできずに、作業が止まってしまうことがある。しかし、Gitでは手元のPC上にもリポジトリーがあるため、いつでもコミットが可能になり、作業スピードを維持できるのだ。

 作業のバッティングも心配いらない。Gitには強力なマージ(統合)機能があるからだ。他の作業者の成果を安全に自分の成果物に反映できる。他の人と作業箇所が重なっていたとしても、重複を検知し、対応が必要な部分を特定してくれる。

 GitはWindows、macOS、Linuxなど各種のOS上で使用できる。Gitの公式サイトにOSごとのインストール方法が記載されているので、参考になるだろう。

 Git自体はコマンドラインツールだが、「SourceTree」や「GitKraken」「Fork」といったGUIツールも用意されている。必要に応じて利用するのもよいだろう。