ワークスペースはワークスペース管理システムの基本となる作業領域です。ワークスペースによってプロジェクトの各開発者はほかの開発者と分離され、それぞれの作業を並行して進めることが可能になります。プロジェクトファイルは、ワークスペース管理ツールのコマンドを使用してワークスペース間でやりとりすることができます。ワークスペースは、ディレクトリとそのサブディレクトリの階層です。ワークスペースを作成すると、ワークスペース管理ツールはそのワークスペースの下に Codemgr_wsdata という特別なサブディレクトリを作成します。Codemgr_wsdata ディレクトリには、ワークスペースに関する情報が含まれています。
ワークスペース管理ツールを利用したプロジェクトは、最初に最上位のワークスペースに作成され、関連するすべてのサブディレクトリがその下に作成されます。この最上位のワークスペースから別のワークスペースが作成されると、元のファイルシステム階層が作成しなおされ、新しいワークスペースが形成されます。次に挙げる例では、最上位ディレクトリ boatspex の下にあるワークスペースで開発者が作業を開始しています。このワークスペースは /usr/src/ws ディレクトリの下にあります。
Boatspex プロジェクトの一員として作業する開発者は、オリジナルのワークスペースのコピーを任意のファイルシステムに作成します。新しいワークスペースにコピーされたファイルシステムのワークスペースの内容は、オリジナルのワークスペースのものと同一になります。たとえば、自分のホームディレクトリに新しいワークスペースを作成すると、図 2-2 に示すようなファイルシステム階層が得られます。
プロジェクトの一部のみを担当する場合は、その担当部分だけをコピーすることもできます。
なお、ワークスペースディレクトリ (boatspex) の上のディレクトリは、ワークスペースをファイルシステム階層のどこに配置するかによって変わります。一方、ワークスペースディレクトリの下に置かれるファイルシステムは、オリジナルのワークスペースのものとまったく同じです。
あるワークスペースからファイルをコピーして別のワークスペースを作成すると、それらのワークスペースの間には親子関係が築かれます。すなわち、オリジナルのワークスペースは新たに作成されたワークスペースの親であり、新しいワークスペースはその子ということになります。この方法により、ワークスペース管理ツールの任意のワークスペースからファイルを取得することができます。また、ワークスペースはいくつでも子を持つことができます。親ワークスペースから何をコピーするかは、コピーする時点に決定します。親からそのすべての内容をコピーすることもでき (この場合、親と子はまったく同じ内容となります)、必要な部分だけをコピーすることもできます。このように、親ワークスペースから子ワークスペースにファイルをコピーするときに行うトランザクションを「ブリングオーバー」と呼びます。
ブリングオーバートランザクションを使用して、存在しないワークスペースにファイルをコピーしようとすると、新たに子ワークスペースが作成されて、そのワークスペースにファイルがコピーされます。これは、ブリングオーバートランザクションの特殊な処理で、「作成ブリングオーバー」トランザクションと言います。また、「更新ブリングオーバー」トランザクションを使用すると、既存の子ワークスペースの内容を更新できます。
このような親子関係は、プロジェクトデータが親と子の間でのみやりとりされる点が特殊です。子ワークスペースに格納されているファイルはすべて、親ワークスペースから取り込まれたものであるか、あるいは子ワークスペース内で作成されたものです 。子ワークスペースで開発とテストが完了すれば、そのワークスペースで変更あるいは追加したファイルを親ワークスペースに戻すことができます。また、変更したファイルが親ワークスペースに存在する場合には、それらを別の子ワークスペースにコピーしたり、その親ワークスペースの 1 つ上の親ワークスペースに渡すことも可能です。子ワークスペースから親ワークスペースにファイルをコピーするときに行うトランザクションを「プットバック」トランザクションと言います。
子ワークスペースが別のワークスペースの親でない場合は、新しいファイルをその子ワークスペースからコピーすることもできます。
ワークスペースの階層は、ブリングオーバートランザクションを行なっていくつかの子ワークスペースを作成することによって形成されます。したがって、親子ワークスペースの階層を見ると、プロジェクト全体でデータがどのように移動するかを知ることができます。
次に挙げる例では、あるワークスペースで最初にプロジェクトが作成された後、ブリングオーバートランザクションによって 3 層のワークスペース階層が作成されています。オリジナルのワークスペースは統合ワークスペースの親と見なされ、逆に統合ワークスペースはオリジナルのワークスペースの子と見なされます。この例では、図 2-3 に示すように開発者 1、開発者 2、開発者 3 の 3 名の開発者がそれぞれ作成ブリングオーバートランザクションを使用して、統合ワークスペースから子ワークスペースを作成し、これによって 3 層のワークスペース階層が形成されています。
この階層では、開発者 1 のワークスペースから開発者 2 と開発者 3 がそれぞれ所有する「兄妹」ワークスペースにファイルをコピーすることができます。図 2-4 に示すように、開発者 1 はプットバックトランザクションを使用して自分のワークスペースから変更したファイルを共通の親にコピーし (1)、開発者 2 と開発者 3 が更新ブリングオーバートランザクションを使用して親からそれぞれのワークスペースにファイルをコピーします (2)。
ワークスペースの親子関係は変更できます。つまり、子ワークスペースの親を別の親ワークスペースに変更できます。親子関係の変更は次に示すような場合に必要になります。
ワークスペース階層の編成を変更する場合
新しいプロジェクト階層 (新しい最上位ワークスペース) を作成する場合
機能を新しいリリースに移動する場合
複数のリリースにバグ修正をする場合
詳細は、「ワークスペースの親子関係の変更」を参照してください。
ワークスペース管理ツールによって管理されている各ワークスペースには、Codemgr_wsdata という名前のディレクトリが存在します。このディレクトリは、ワークスペースの最上位ディレクトリのサブディレクトリであり、ワークスペース管理ツールがその処理内容の記録やデータの格納に使用するテキストファイルが格納されます。これらのファイルは、標準的なテキストエディタなどのユーティリティを使用して、表示したり変更を加えたりすることができます。詳細は、「ワークスペースのメタデータディレクトリ」を参照してください。
ワークスペース管理ツールのワークスペースは SunOS ファイルシステム内のディレクトリにすぎません。そのため、ワークスペース内のファイルやディレクトリには通常のツールやユーティリティをすべて利用できます。通常の開発業務で行われている編集、コンパイル、デバッグというプロセスは、ワークスペース管理ツールを利用している場合も変わりません。