チーム開発でのワークスペースの使用方法
多数のプロジェクトを含んだ大きなワークスペースを、複数の開発者から成るチームで共有する際には、特別な問題が発生します。このペーパーでは、大きなワークスペースの共有に関する問題とその解決方法について説明します。
注: Microsoft は、LAN 経由でプロジェクトを開き、ビルドを行うという操作をサポートしていません。プロジェクトを開き、ビルドするという操作は、ローカル ハード ドライブ上でのみサポートされています。このペーパーでは、チーム メンバがプロジェクトをローカル コンピュータにコピーし、ソース コード管理システム (われわれは Microsoft Visual SourceSafe を使用しました) を使ってファイルを更新しているという前提で、チームによるプロジェクト開発のためのテクニックを示しています。
以下のトピックに、共有されたワークスペースを扱うための詳しい情報があります。
ソース コード管理システムから除外すべきローカル ファイル
排他的チェックアウトを行うべきファイル
インクルード ディレクトリの設定
メイクファイルのエクスポート
共有されたワークスペースを高速化するためのプロジェクトのアンロード
環境変数の設定
ファイル名拡張子の一覧
同じ共有ワークスペースの中で多数のプロジェクト ファイルの開発を行い、すべてのファイルをソース コード管理システムにチェックインしている場合には (個々の開発者のコンピュータ上にはローカル コピーが作成されます)、最適な戦略として、ユーザー固有のファイル (.opt ファイルや.clw ファイルなど) をローカルなままにしておくことをお勧めします。
ローカルなままにし、ソース コード管理システムにチェックインするべきでないファイルには、以下のものがあります。
- filename.opt - ローカル コンピュータのワークスペース オプション ファイルであるバイナリ ファイル。
- filename.clw - ClassWizard がクラスの追跡のために使用するファイル。
- filename.ncb - ClassView が使用する、ローカル マシンに固有のバイナリ ファイル。
- filename.aps - ローカル リソース ファイルによって使用されるバイナリ ファイル。
- filename.mak - エクスポートされたメイクファイル。
.clw ファイルはローカルのみで使用します。この.clw ファイルをチェックインすると、ファイルは読み込み専用となり、ClassWizard はファイルを認識しなくなります。このファイルのコピーはローカルに持っておき、プロジェクト全体に新しいソース ファイルが追加されたら、ファイルを再生成します。.clw ファイルを再生成するには、古いファイルを削除した後に、指示に従って新しいファイルを作成するオプションを選択します。
プロジェクトに固有の一部のファイルは、複数のユーザーが同時にチェックアウトすると、マージの際に衝突を引き起こすことがあります。マージの際の衝突は解決が難しいため、これに関する知識を持っている人がいないと問題になります。これを解決するには、このようなファイルを排他的にチェックアウトします (一度に 1 人のユーザーだけがチェックアウトできるようにします)。
以下のファイルは、マージの際に衝突を引き起こす可能性があります。
- filename.dsp - .dsp ファイルのコンパイラとリンカのオプションが複数のユーザーによって同時に変更されると、チェックインの際のマージが複雑になります。
- resource.h - ファイルに含まれているリソースの数がインクリメンタルに記録されています。
- mydata.rc - ファイルに含まれているリソースの数がインクリメンタルに記録されています。
[ツール] メニューの [オプション] ダイアログ ボックスの [ディレクトリ] タブ ([ツール] - [オプション] - [ディレクトリ] - [インクルード ファイル] を参照) でインクルード ディレクトリを設定すると、すべてのワークスペース ファイルのパスが設定されます (また、この変更はローカル コンピュータ上にのみ格納されます)。この設定によって、他のワークスペースが制限されます。
別の方法として、[プロジェクトの設定] ダイアログ ボックスで、適切な分野のタブの下でライブラリ パス名を指定するという方法があります。3 つのタブは、[リソース]、[Midl]、および [C/C++] です (C/C++ では、[プリプロセッサ] カテゴリを使用します)。これらの画面には、追加のインクルード ディレクトリを指定できるエディット ボックスがあります。インクルード ファイル ディレクトリ パスがプロジェクトのディレクトリ パスを基準としていない場合には、 環境変数 を設定して違いを吸収することができます。最適な戦略としては、これらのインクルード ディレクトリで 3 つのローカル パスをすべて設定することをお勧めします (この 3 つには異なるパスを指定することができます)。
ファイルは、"接続" プロパティ (ファイルのプロパティ ページの [接続] フィールド) を環境変数とともに使用することにより、.dsp ファイルとは異なるドライブ上にあるファイルの解決を行うことができます。
メイクファイルのエクスポート
メイクファイルのエクスポートを行うと、特にサブプロジェクトを使用している場合には、ディレクトリ ツリーの一貫性に問題が生じることがあります。解決方法としては、作業に関与するすべてのコンピュータ上で、ビルド マシンのプロジェクト ディレクトリ ツリーと同じものを作成する方法があります。上級ユーザーは、環境変数と、環境をセットアップする共通のバッチ ファイルを使って、ディレクトリ ツリーの違いを吸収することができます。サブプロジェクトを含んでいるエクスポートされたメイクファイルには、パス名がハードコードされていることがありますが、この場合には同一のディレクトリ ツリーをセットアップすることが必要となります。
[インクルード ファイルのパス] を使ってライブラリ ファイルへのパス名を追加すると、エクスポートされたメイクファイルには (相対パス名ではなく) ハードコードされたパス名が含まれるようになります。これにはいくつかの解決方法があります。すべてのコンピュータに同じディレクトリ階層を持たせるようにするか、相対パスを使ってメイクファイルを生成させることができます (この方法では処理速度が低下し、.dsp ファイルを持ち運ぶ際の柔軟性が低下します)。相対パスを含むエクスポートされたメイクファイルを生成するには、[オプション] ダイアログ ボックスの [ディレクトリ] タブでライブラリ ファイルのパス名を追加します ([ツール] - [オプション] - [ディレクトリ] - [インクルード ファイル] を参照)。この場合、ビルド プロセスは毎回すべてのディレクトリをチェックしなくてはならないため、メイクファイルの生成の速度が低下します。
共有されたワークスペースを高速化するためのプロジェクトのアンロード
ワークスペース内のプロジェクトをアンロードすると、ワークスペースのロード時間が短縮されることがあります。たとえば、20 個のプロジェクトを含んでいるワークスペースがチーム内で共有されており、特定の開発者がこれらのプロジェクトのうちの 5 個しか必要としていないとしましょう。他の 15 個のプロジェクトをワークスペースから「アンロード」すれば、ワークスペースのロード時間が短縮されます。これらのアンロードされたプロジェクトは、ローカル コンピュータ上のローカル オプションとして保存され、共有されたワークスペースには影響を与えません。
ワークスペースからプロジェクトをアンロードするには
- 共有されたワークスペースをロードし、FileView に移動します。
- アンロードしたいプロジェクトを選択し、マウスを右クリックします。
- [プロジェクトのアンロード] を選択します。
- ワークスペースを保存します。
次にプロジェクトを FileView で表示すると、ファイルのアイコンは淡色表示されます。プロジェクトを再びロードするには、プロジェクトをダブルクリックします。
ただし、アンロードされたプロジェクトがサブプロジェクトであるか、依存関係ファイルを含んでいる場合、そのアンロードされたプロジェクトは親プロジェクトに対して、エクスポート ライブラリ ファイルやその他のビルドに必要なファイルを宣言しない可能性があります。これを解決するには、依存関係を含んでいるアンロードされたサブプロジェクトを、必要ならば環境変数を使って、[プロジェクトの設定] ダイアログ ボックスで指定します。このためには [リンク] タブの [オブジェクト/ライブラリ モジュール] カテゴリを使用します。サブプロジェクトをローカル マシンにコピーしたら、依存関係を含んでいるプロジェクトをロードしなくても、ライブラリ ファイルをリンクすることができます。
[プロジェクトの設定] のタブ ページに追加されたファイルは、タイムスタンプの更新が行われません。また、ユーザーは [プロジェクトの設定] のタブ ページで、個々の構成 (リリースまたはデバッグ) についてライブラリ ファイルの追加を行わなくてはなりません。たとえば、デバッグ ファイルにリンクする必要があるデバッグ用のライブラリ ファイルを、[プロジェクトの設定] の [リンク] タブで指定する必要があります。
環境変数は、Visual Studio 環境をコンピュータ上のファイルの位置にリダイレクトする、カスタマイズされた変数名です。これは、コンピュータ上のファイルやディレクトリが、共有されたワークスペースのビルドを発行するコンピュータとは異なる構成になっている場合には特に便利です。環境変数名はすべて大文字でなくてはならないことに注意してください。
環境変数を設定するには (Windows 2000)
- Visual Studio 環境で環境変数を設定します。
- Windowsタスクバーで、[スタート] をクリックし、[設定] をクリックします。[コントロール パネル] を開き、[システム] をクリックします。[詳細] タブをクリックし、[環境変数] ボタンをクリックします。
- [Username のユーザー環境変数] ボックスに環境変数名を入力します。[値] ボックスに、ファイルのローカル コピーのパス名を入力します。
- Visual Studio をシャットダウンし、再起動します。
環境変数を設定するには (Windows NT 4.0)
- Visual Studio 環境で環境変数を設定します。
- Windows NT タスクバーで、[スタート] をクリックし、[設定] をクリックします。[コントロール パネル] を開き、[システム] をクリックします。[環境] タブをクリックします。
- [Username のユーザー環境変数] ボックスに環境変数名を入力します。[値] ボックスに、ファイルのローカル コピーのパス名を入力します。
- Visual Studio をシャットダウンし、再起動します。
環境変数を設定するには (Windows 98、Windows 95)
- Visual Studio 環境で環境変数を設定します。
- Windows 98 または Windows 95 の Autoexec.bat ファイルに、次の行を追加します: SET VARIABLENAME=pathname;
例: SET LIB=C:\Libraries\Lib;
- Autoexec.bat ファイルを保存します。
- コンピュータを再ブートすると、設定が有効になります。
設定を確認するには、コマンド プロンプトで SET と入力します。
以下に、Visual Studio に関連するファイル名拡張子の一部を示します。
- projectname.dsw - プロジェクト ワークスペース ファイル。
- projectname.dsp - プロジェクト ファイル (1 つのプロジェクトまたはサブプロジェクトのビルドに使用されます)。
- projectname.opt - ワークスペース オプション ファイル。
- projectname.clw - ClassWizard の「データベース」ファイル (クラスの追跡に使用されます)。
- resource.h - 開発環境によって生成されるヘッダー ファイル。このファイルはシンボル定義を含んでいます。
- mydata.rc - リソース スクリプト ファイル。
- projectname.mak - プロジェクトのビルド命令を含んでいるメイクファイル。このファイルは通常は開発環境からエクスポートされ、ビルドには NMAKE ユーティリティが使用されます。
- filename.aps - 現在のリソース スクリプト ファイルのバイナリ バージョン。このファイルは高速ロードのために使用されます。
- filename.ncb - ClassView が使用するバイナリ ファイル。