Rational ClearCase

Rational ClearCase は、ソースコードなどのソフトウェア開発資産のためのバージョン管理システムである。IBM のラショナル部門が開発している。ClearCase は中規模以上の大きな商用ソフトウェアプロジェクトでよく使われ、数百人から数千人の開発者を管理できる。

ClearCase 本体にも SCM 機能があるが、それとは別に UCM という SCM 機能もある。Linux、Solaris、Windowsといった様々なプラットフォーム上で動作する。巨大なバイナリファイルや多数のファイル、巨大なリポジトリを扱える。分岐、ラベル付け、ディレクトリのバージョン付けなどが可能。

1. 歴史
-----

ClearCase は1992年、Atria Software が UNIX 向けに開発し、後に Windows 版もリリースされた。Atria の開発者の一部はそれ以前にアポロコンピュータの //DSEE//の開発に携わっていた。1989年にアポロコンピュータがヒューレット・パッカードに買収されると、彼らはアポロを離れ、Atria に移ったのである。Atria は後に Pure Software と合併して PureAtria となった。それがさらにラショナルに吸収され、さらに IBM に買収された。IBM はその後も ClearCase の開発と販売を続けている。ソフトウェア開発企業にとっては ClearCase は有名な製品である。

1.1. DSEE
---------

DSEE には ClearCase に見られる様々な概念が既に導入されていた。Domain/OS のファイルシステムでは、ファイルアクセス時に特殊なハンドラプログラムを呼び出すことができ、DSEE はそれを使って、特定のファイルがオープンされたときに自動的にバージョン管理されたコピーと入れ替えていた。バージョン機能はユーザー環境に常駐しており、バージョン管理されたファイルへのアクセスは全てリダイレクトされ、印刷やエディタでの参照も例外ではない。

DSEE の中心となるのは、全てのソフトウェアモジュールとそれらの依存関係を記述したファイルである。このファイルは手動で作成する必要があり、大規模システムではその作業が重大な障害となった。しかし、いったん作成できれば、DSEE はビルドを行うのに最適な方法を計算でき、現在のビルドとバージョン指定が同じであるような以前に処理された全モジュールを再利用できた。

DSEE はまた、"version spec" または "thread" の概念を導入した。これはあるユーザー環境やビルドにおいて、含まれても良いバージョンのリストである。重要な点は、thread においてビルドのシグネチャやソフトウェアリリースのシグネチャが利用できるようにした点である。従って、1つの thread に含まれる要素は次のようになる。

編集目的で確保されているコピー
最新バージョン
あるファイルの分岐バージョン
ラベル付きバージョン
ビルド XYZ でのバージョン
ソフトウェアリリース x.y.z でのバージョンthread はファイルごとに一番上から一番下まで処理された。ある開発者の thread は、一番上に確保されたものがあり、それにラベル付きバージョンが続いているかもしれない。既存リリースを素早くバグ修正する場合、thread は「確保」されたものとリリースのシグネチャ付きのものとなることもある。

Domain/OS のファイルシステムの機能は通常備わっていないため、ClearCase は後述するように MVFSという仮想ファイルシステムを使う。"thread" の概念は //dynamic view// に対応している。ある view における派生オブジェクトのサポートは、DSEE の考え方に類似している。

2. View
-------

ClearCase でバージョン管理されているオブジェクトは、その履歴情報と共にリポジトリに格納されている。このリポジトリを VOBと呼ぶ。ClearCase で特徴的な点は、そのバージョン化ファイルシステムであり、//dynamic view// を通して VOB を仮想ファイルシステムとしてマウントでき、一貫性のあるバージョン群を選んで派生オブジェクトを生成できる。dynamic view はこれを Software Configuration にマップできる。これはリポジトリ/サンドボックス型とは異なり、製造物を初期段階から管理できる。

それとは別に、ClearCase は //snapshot view// と呼ばれるものもサポートしており、これは1つまたは複数のVOBにまたがったディレクトリツリーの単なるコピーである。snapshot view は、VOB のデータへのアクセスに仮想ファイルシステムを使用しない。その代わり、snapshot view は VOB データのコピーをローカルに保持する。snapshot view はネットワークが切断されていても利用でき、後で接続が確立したときにVOBと同期させることができる。この操作モードは、CVS  が一般に使われているモードと似ている。

クライアントコンピュータ上のソフトウェアという観点では、view は別のファイルシステムに見える。view 内で新たなファイルを通常のOSの手段を使って作成した場合、ClearCase はそのファイルを "view-private" ファイルとして生成する。そのファイルは他の view からは見えない。このため、開発者各人が同じディレクトリ構成でビルドしていたとしても、個々の開発者の修正は他人の環境には影響を与えない。view-private ファイルは任意の時点でバージョン管理される要素に変換でき、それによって他の開発者からも見えるようになる。

各開発者は一般に1つ以上の view を使って作業する。開発者間で view を共有できた方が便利な場合もあるが、ブランチの共有が使われるのが一般的である。ブランチの階層がよく使われ、開発プロジェクト全体で1つの開発ブランチを共有し、その中の小さいチームがサブブランチを共有し、個々の開発者が個人的なブランチを持つ。ある修正がより大きなグループに対しても十分に安定していると判断したとき、それを親ブランチとマージすることができる。

3. Configuration specification
------------------------------

ClearCase では、各 view は対応する //configuration specification// で制御される。これはドメイン固有言語の一種でテキストファイルに格納されていて、実行時に自動的にコンパイルされる。config spec には、その view で見えるべき要素とそれら要素のバージョンが指定されている。ある要素のどのバージョンが見えるべきかを決定する際、ClearCase は configuration specification を先頭から一行ずつ一致が見つかるまで見ていく。configuration specification の例を以下に示す。

configuration specification は、'include' 文を使って他の configuration specification を参照できる。

4. 独自機能
-------

VOB  ファイル要素、ディレクトリ要素、派生オブジェクト、およびそれらに関連したメタデータをバージョンごとに格納するリポジトリ。MultiSite を使うと、1つの VOB を別々のサイトに複製することができる。 Configuration Record dynamic view でビルドしたとき、ClearCase はビルド中に読み込んだ全ファイルのバージョンを記録する。この処理を build-auditing という。依存関係情報は隠し configuration record に格納されている。configuration record を使って、ビルドで使った全ファイルを見せる新たな view を設定可能である。また、configuration record に記録されている全ファイルにラベルを付けることもできる。 ビルド回避 MVFS を使うと、ある dynamic view で作成された派生オブジェクトを他の dynamic view と共有することができる。共有が可能となるのは両者の configuration record が全く同じ場合である。共有された派生オブジェクトは、物理的には VOB サーバにあり view にはない。 Unix/Windows 相互運用性 UNIX系サーバ上の VOB は Windows クライアント上の view からアクセス可能である。Windows サーバ上の VOB は、UNIX系クライアントからは snapshot view としてしかアクセスできない。 他の製品との連携 ラショナルの ClearQuest や Rose といった製品は ClearCase と連携する。他にも TextPad、Microsoft Visual Studio、Code::Blocks、Eclipseなどともプラグインを通して連携する。emacs や vim のプラグインもある。

5. 欠点
-----

トランザクションがアトミックでない。
コードベースが古く、新規機能追加が遅い。
非常に複雑で、構成設定に注意を要する。
遅い。単純なコミットやチェックアウトが数分かかることも稀ではない。

6. 関連項目
-------

バージョン管理システム
ソフトウェア構成管理

7. 脚注
-----

8. 外部リンク
--------

[1] 日本語公式ページ
[2] - フリーな試用版
[3]
[4]
[5]
[6]