株式会社RJCの技術サイトであるTECH RJC LABOには、Javaやデータベース、ウェブアプリケーションなどに関する基礎的な情報が公開されていますが、Gitに関する情報もあります。このシステムは多くの開発現場で使用されているものなので、プログラマやSEなどとして働くのであれば必要不可欠な知識と言えるでしょう。そこで、ここでは学習をする上で、最低限知っておきたいことについて紹介していきます。

バージョン管理システムとは

Gitとはバージョン管理システムの一種で、多くのシステム開発現場で使用されています。バージョン管理は、プログラムなどのファイルに加えられた変更履歴を管理することを指しますが、最も簡単な管理方法はファイル名に日付を付けて、バージョンごとに複数のファイルを保存しておく方法でしょう。しかし、この方法はいつ更新したのかという情報以外を管理するのが難しく、ファイル数や編集に携わる人が多くなるほど人為的なミスが生じやすくなるという問題があります。

そこで開発されたのがバージョン管理システムで、ファイルの更新を「いつ」「誰が」「どのように」行ったのかを記録することが可能です。このような情報を管理することで、加えられた変更点を把握しやすくなったり、過去のバージョンに戻したりすることが容易になります。なお、バージョン管理システムでは、プログラムのソースコードだけでなく、ドキュメントや画像、動画などパソコン上で扱うあらゆるファイルを管理することができます。

バージョン管理システムを導入するメリット

バージョン管理システムを導入するメリットとしては、以前のバージョンに簡単に戻せることです。バージョン管理システムでは、サーバ上にリポジトリと呼ばれるファイルを管理するフォルダを用意して、そこに以前のファイル情報を蓄積させておくことができます。

手動でバージョン管理する場合、誤って上書き保存してしまうと以前の状態へと戻すことができませんが、バージョン管理システムを導入すれば、誤って削除したり上書きしたりしてしまっても、リポジトリに残っている履歴から元の状態へと戻すことが可能です。また、プログラムにバグが発生した場合、バグのなかった状態と比較することで、バグを発生させている原因の特定が容易になります。

さらに、複数人でプロジェクトを進める際に、業務をスムーズに進められるというメリットがあります。バージョン管理システムを導入すれば、ファイルに加えられた変更点を容易に知ることができるため、変更を加えた人に直接確認する必要がありません。つまり、プロジェクトに携わる人の間で行われる無駄なやり取りを省略できるため、スムーズに開発作業を行えるのです。

バージョン管理システムの種類

バージョン管理システムは、大きく集中型と分散型の2種類に分けることができます。以前は集中型が主流でしたが、近年は分散型へと移行する流れが加速しています。

集中型は、ファイルの編集に携わる全員がサーバ上に作成したリポジトリ共有することでバージョン管理するシステムです。開発者がファイルを編集する際は、リポジトリから最新のバージョンを取得してきて、作業が終了したらリポジトリへと変更を反映させます。集中型の代表的なシステムとしては、Apache Subversion(SVN)が挙げられます。

一方、分散型はサーバ上だけでなく、開発者のローカル環境にもリポジトリを採用したシステムです。基本的に、開発者はローカル環境でファイルの変更履歴を記録しておき、ある程度作業が進んだ時点でサーバ上のリポジトリに変更履歴を反映させるという管理方法となります。Gitは分散型を代表するバージョン管理システムで、集中型よりもシステムが複雑となりますが、複数人でのバージョン管理しやすいため、近年はSVNから移行する開発現場が多くなっています。

集中型と分散型のメリットデメリット

ここでは、集中型と分散型を比較した際のメリットデメリットについて紹介します。まず、集中型のシステムのメリットとしては、構造が単純なので比較的扱いやすいことが挙げられます。分散型の場合、サーバ上とローカル環境の両方にリポジトリがあるため、これら両方を意識したバージョン管理が必要です。また、バージョンを管理するために振られるリビジョン番号が、連番となるため分かりやすいというメリットもあります。

一方、分散型の場合、ローカル環境にもリポジトリがあるため、サーバ上に不要な変更履歴を残さずに済むというメリットがあります。集中型の場合、テスト的なコードや未完成のコードをサーバ上のリポジトリに反映させたくないという場面が多々ありますが、分散型の場合はその心配がありません。さらに、分散型はオフライン中であってもバージョン管理できるため、サーバやネットワークに不具合が生じても、作業を滞りなく行えるというメリットもあります。しかし、集中型よりもシステムが複雑なので、学習コストが高く初心者が慣れるには時間がかかるというデメリットがあります。

まとめ

ここまで、バージョン管理システムについて紹介してきましたが、このシステムはエンジニアとして働くのであれば必要不可欠な知識のひとつです。その中でも、Gitは多くの開発現場で使用されているため、その概念を知っておくことは重要です。比較的学習コストが高いとされていますが、株式会社RJCの技術サイトには、習得する上で基礎となる情報が公開されているので、興味のある人は参考にしてみると良いでしょう。