ストリームについて

Perforceストリームは"属性を持つブランチ"です。コードラインなどの関連性のあるファイルの集合体を一括管理するための手法です。ストリームは関連性のあるファイルの集合体をファイルの操作ルールを定義することにより関連付けます。ファイルの操作には変更をファイル間で伝播することも含まれます。大きな特徴として、ストリームはメインラインモデルを使用して階層的に定義されます。Perforceは厳密に継承されるルールに基づいて、ストリームに関連付けられているワークスペースのビューを生成します。この手法によるメリットには、(1)制御された方法で変更が定義済みの階層に伝播されること、(2)ビューを定義することでストリームの内容を構成できるため、ストリームで作業するすべてのユーザーに対して一貫した内容のビューを提供できること、などがあります。

メインラインモデル

ソフトウェアコンフィギュレーション管理のメインラインモデルでは、ストリームの内容の安定性に基づいて、最も柔軟な構造(不安定または試験用)から最も堅牢な構造(高品質でリリース可能)までが定義されます。通常、メインラインは極めて安定している必要があり(コードの生成が可能など)、開発コードラインの安定性はより低く、リリースコードラインは最も安定しています。

ストリームタイプ

Perforceでは標準ストリームタイプに対して軟から硬への安定性モデルを採用しています。

  • メインライン:親のないストリーム。より安定性の高い子ストリームからのマージダウンが予期されます。より安定性の低い子ストリームからのコピーアップが予期されます。ストリーム機構の安定した基幹として使用されます。

  • リリース:親より安定性の高いストリーム。より安定性の高い子ストリームからのマージダウンが予期されます。親ストリームからのコピーアップは予期されません。進行中の安定化作業、バグ修正、リリース保守に役立ちます。

  • 開発:親より安定性の低いストリーム。親ストリームからのマージダウンが予期されます。より安定性の低い子ストリームからのコピーアップが予期されます。より安定性の高い子ストリームがあることは予期されません。長期にわたるプロジェクト、主要な新機能に役立ちます。

この他に、特殊な性質を持つストリームタイプが2つあります。

  • タスクストリームは軽量で短期間のブランチで、プロジェクトブランチ全体のほんの一部分に影響する作業に使用できます。タスクストリームを使用すると、個人的に作業できるほか、コンテキストをすばやく切り替え、Perforceサービスによって管理されるメタデータの量を削減できます。

    詳細情報は、タスクストリームを使用するを参照してください。

  • バーチャルストリームは、実際のストリームの表示内容を制限してワークスペースに表示できます。バーチャルストリームはフィルターの役割を果たします。以下のような場合に役立ちます。

    • 変更をストリームに直接サブミットするが、ストリームビュー内のすべてのファイルをワークスペースと同期したくない。

    • 同じストリームに対して開発するが、複数のプラットフォームの開発などの場合に、インポートするライブラリを切り替える。

    詳細情報は、バーチャルストリームを使用するを参照してください。

ストリームグラフのストリーム階層

P4Vの[ストリーム]タブのストリームグラフでは、安定性の低いストリームはメインラインの下、安定性の高いストリームはメインラインの上に表示されます。たとえば以下の図は、安定したメインライン、メインラインの下の試験用ストリーム、メインラインの上のリリース品質ストリームで構成されている典型的なソフトウェア開発構造を示しています。

図 1. ソフトウェア開発の基本的なストリーム構造

ソフトウェア開発の基本的なストリーム構造

ストリームグラフでは、最も安定しているストリームは最上部、最も安定していないストリームは最下部に表示されます。ストリームグラフにはコードライン間の変更の伝播を制御する親子関係も表示されます。すべてのストリームはメインラインの子であり、すべての子は同じタイプの子の親になることができます。これにより、特定の開発コードラインおよびリリースコードラインの作成が可能になり、またコードライン間の変更の伝播を適切に行うことができます。ストリームグラフでは変更の伝播が矢印のコネクタで表されます。

詳細情報は、ストリームグラフを使用するを参照してください。

ストリームビュー

ストリームはタイプだけでなくビューによっても定義されます。ビューによりストリームに含まれるファイルとフォルダ、およびそれらが編集、マージダウン、コピーアップ、または新しいストリームにブランチできるかどうかが指定されます。ストリームビューはワークスペースで使用できるファイルと、これらのファイルを使用して実行できる操作を定義します。また、ストリームビューは親ストリームから子ストリームに継承できるファイルを制限します。たとえば、以下のファイルディレクトリを含むメインラインストリームがあるとします。

//Acme/Main
 --apps
 --api
 --resources
 --docs

ここから開発ストリームにブランチします。作業対象はappsフォルダのみですが、apiresourcesフォルダのリソースが必要です。appsフォルダにファイルが含まれている開発ストリームをMainの子として作成し、docsフォルダを除外して、apiresourcesフォルダの内容をインポートできます。インポートしたフォルダの内容は使用できますが、編集したりディポに変更をサブミットしたりすることはできません。これらのルールを持つストリームビューを子ストリームに適用します。Perforceはワークスペースを生成し、ストリームビューのサブミットと反映に関するルールを適用します。この新しいストリームからブランチして作成された子はこれらのルールを継承します。子ストリームではストリームビューの制限を強化することはできますが、緩めることはできません。子ストリームは親ストリームが共有を許容する範囲を超えてブランチすることはできません。

詳細情報は、ストリームビューについてを参照してください。

ストリーム間で変更を伝播する

変更の伝播の原則はマージダウンとコピーアップです。目標は、より安定性が低いストリームに、より安定性の高い親または子の最新状態が保たれるようにすることです。これにより、安定性の低いストリームから高いストリームに変更が伝播される際、作業が上書きされないようにします。この手法により、衝突解決操作をできるだけ単純化できます。Perforceのマージ/コピーと衝突解決の機能は、ストリーム間で変更を伝播する手段となります。ストリームを使用すると、すべての変更が親ストリームと子ストリーム間で伝播されます。同位のストリーム間でマージまたはコピーする場合(別の開発者による変更を自分の開発ストリームにマージする場合など)は、最初にストリームの親を変更する必要があります(つまり、ストリーム仕様を編集して親フィールドを変更します)。この手法はストリームの主な利点であり、変更フローの構成を可能にします。

詳細情報は、ストリーム間のマージダウンとコピーアップを参照してください。

ストリームディポ

ストリームはストリームディポに保存され、P4Vでは のように表示されます。ストリームを"クラシック"Perforceディポに追加することはできません。ストリームディポの追加は、P4AdminまたはPerforceコマンドラインクライアントから行うことができます。

詳細情報は、ストリームを構築するを参照してください。

コマンドラインクライアントとP4Vの用語の違い

P4V用語 コマンドライン用語 解説
ストリームルート ストリーム ストリーム内のファイルを保存するディポの最上位レベルディレクトリ。
ストリーム 名前 ユーザーが割り当てるわかりやすい名前。ストリームグラフ内のストリームのラベルとして表示されます。