II-8-2. ソースコード管理と差分情報

複数ファイルから構成されるプログラムを多人数で開発する環境においては、ソースコードをまとめて管理する必要がある。ソースコード管理の考え方を示し、ソースコード管理ツールの代表的なツールであるRCSやSubversionなどを紹介する。

【学習の要点】

* プログラムを構成するファイルを管理するということは、それを構成するファイル一覧とその世代を管理することである。

* 複数人でプログラムを開発するときは、互いに変更点が競合するのを防ぐ必要がある。これには、人的なコミュニケーションが不可欠であるが、これを補助するツールが存在する。RCSやSubversionはその一例である。

* RCSやSubversionといったバージョン管理ツールは、関連するソースコード一覧にタグをつけて範囲を管理する。その上で、範囲内の個々のソースコードの世代間差分を保持・復元することでプロジェクトの管理を行うものである。

図II-8-2. プロジェクト管理

【解説】

1) バージョン管理

* 主にテキストファイルのバージョン(リビジョン)を管理し、必要に応じて過去のバージョンのファイルを取得できるような機構をバージョン管理機能という。

* 有名なバージョン管理システムにRCS (Revision Control System) がある。RCSは、ファイルの新旧を、差分(前のバージョンとの変更点情報)で表す。すべてのバージョンの生のファイルを保持するわけではない。

* RCSは、古いファイルを得る要求を受けると、ヘッド(最新)バージョンから所望のバージョンまで差分情報を元にファイルのコンテンツを計算する。

2) ファイル群の管理

* RCSは、ただひとつのファイルを管理するのであって、ファイル群に対してバージョン管理を行うことはできない。

* リポジトリ (バージョン管理するファイル群の保管場所) は、時間とともに伸縮する(ファイルは増えたり減ったりする)。また同時に、ファイルの内容は時間とともに変化する。近年のバージョン管理システムは、この2つの軸からなる空間から、ファイル群を選択できる能力が求められる。

* CVSは、ファイル群をモジュールとして管理することができ、ファイル一つ一つに独立してリビジョンを振っていく。

* Subversionは、ファイル群をディレクトリにて管理する。CVSと違って、Subversionはリポジトリに対してリビジョン番号が振られる。このため、Subversionでは、ある時点のリポジトリ全体のスナップショットに容易にアクセスすることができる。

3) CVSでのプロジェクトの管理

* CVSでは、リビジョンはファイル毎に付加されるため、ファイル群に対してバージョン管理を行なうには以下のように行うとよい。

- モジュールを定義する

- ある時点のモジュールに対してタグ(スナップショット名)を付ける

* ある時点のファイル群を取り出すには、モジュール名とモジュールのタグを指定する。

* タグを利用しない場合は、モジュール名と日付を指定する。

4) Subversionでのプロジェクトの管理

* Subversionでは、リポジトリ毎にリビジョンが振られる。リポジトリに対してリビジョンを指定すると、そのリビジョン時点での全ファイルを選択できる。

* ある時点が決まれば、あとはファイル群を選択するだけである。Subversionではファイル群はディレクトリで管理するので、ディレクトリ名を指定するだけでよい。

* CVSと同様、タグの概念を導入することもできる。Subversionでは、タグもその名前のついたディレクトリにすぎない。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。