システム開発プロジェクトで耳にするバージョン管理とは何か?
バージョン管理の概要
バージョン管理とは、データの改定の段階を管理していくことを指します。
バージョンとは、データを改定していく場合に、改定の段階を表すために付けられる番号のことをいいます。バージョンは「Ver.」と略されることもあり、番号が大きいほど新しく開発された製品であることを意味しています。また、新機能の追加、バグ修正、仕様変更などをすることをバージョンアップと呼ぶこともあります。
システム開発プロジェクトの中で「バージョン管理」と言うと、2つの意味を持っています。
1つはプログラミングしたコードのバージョンを管理するという意味です。プログラミング・ファイルを作成・更新する場合に履歴を保存して、任意の時点のデータを参照できるようにする仕組みのことをバージョン管理と呼びます。
もう1つは、プロジェクトで作成した資料・文書のバージョンを管理するという意味です。
プロジェクトで作成した文書や資料は、プロジェクトの進行によって変更が求められることがあります。その際、求められている部分だけを変更してしまい、「いつ変更したのか」「どこを変更したのか」「何を変更したのか」が分からなくなってしまうと、何かのトラブルの際に「なぜ資料・文書がこのような状態になっているのか?」を追うことが難しくなってしまいます。
そのため、資料・文書に変更を加える際には、資料・文書の冒頭に改訂履歴として変更点をまとめていき、後から資料・文書を見た人がどのような変更が加えられてきたのかを容易に把握できるようにしておきます。
このように、バージョン管理にはコードのバージョン管理と資料・文書のバージョン管理という2つの意味がありますが、今回はコードのバージョン管理について解説していきます。
コードのバージョン管理の必要性
コードのバージョン管理を行えば、どのようなメリットがあるのでしょうか?
ここでは、コードのバージョン管理の必要性をご紹介します。
ファイルを復元することができる
コードに修正が入った時など、バージョン管理せずに元のファイルに直接上書きしてしまうと、以前の状態に戻すことができなくなってしまいます。
しかし、ファイルを更新する時にバージョン管理を行っていれば、過去の任意の時点に戻して直すことができます。
後から紹介するバージョン管理システムを使えば、ファイルに更新が入った時点で、その時のファイルの状態を記憶していきます。
そのため、修正したファイルの内容が誤っていたという時であっても、簡単に以前のバージョンに戻すことができ、コーディングのミスを最小限にとどめることができます。
データ詳細情報が調べられる
システム開発では、プロジェクトに所属する複数メンバーで同時に作業を行うのが一般的です。複数のメンバーが無秩序にデータ変更を行うと「誰が」「いつ」「どのような変更をしたか」などの情報が混乱してしまいかねません。さらに、バージョン管理をしない中で問題が起きた場合は、どの作業段階で問題があったのか確認することができません。
しかし、バージョン管理システムを使い、バージョン管理を行えば、「誰が」「いつ」「どのような変更をしたか」 という更新情報の詳細が調べられるので、このようなチームでの作業のトラブルにも対処することができます。
効率良く管理が行える
バージョン管理システムを活用すれば、更新情報を管理するだけではなく、バグ報告やコードレビュー、ディスカッションなどもシステム上で行えます。効率良くデータを管理・共有・レビューできる環境を構築することができるため、外部のプログラマーとのコミュニケーションやテレワークの用途でも多く利用されています。
バージョン管理に役立つツール
バージョン管理を行うためのツールをバージョン管理システム(VCS:Version Control System)と呼びますが。ここでは、代表的な「Git」「Subversion」「CVS」の代表的なバージョン管理システムをご紹介します。
Git
Git(ギット)は、オープンソースの分散型バージョン管理システムです。複数名の開発者が共同でシステム開発する場合に、データ編集履歴などを管理するために利用されます。
各開発者のデータをコンピュータに丸ごと複製しており、必要に応じて中央管理サーバーと同期する方式を取っています。このような仕組みで、共同開発する際に役立つツールとして広く普及しているバージョン管理システムです。
Subversion
Subversion(サブバージョン)は、サーバー上の領域でファイルを集中的に管理する集中型バージョン管理システムです。サーバー上の領域でファイル管理するため、無駄な通信が省かれて高速に同期することができ、sshでサポートしているため、安全にファイルのやりとりが行えるとして広く普及しているバージョン管理システムです。
CVS
CVS(シーブイエス)も、サーバー上の領域でファイルを集中的に管理する集中型バージョン管理システムです。CVSの大きな特徴は、差分のみを送受信するため、毎回ファイルの全てを送受信する必要がなく軽快に動作することができます。例えば、複数の人が更新した場合、更新箇所が重複していなければ、それぞれを受け入れて統合することができるのです。
とても便利な反面、ファイル名やディレクトリ名の変更ができなかったり、ASCII文字以外のファイルを正しく扱えなかったりなどのデメリットもあります。