次の方法で共有


Team Foundation Server のプラットフォーム間のコマンド ライン クライアントでのスクリプト

ソース コードのチェックインとチェックアウトなどのタスクを自動化しますか?それには外部または内部オートメーションを使用できます。まずオートメーションの 2 つのモードを確認しましょう。または、「pros and cons」に直接進んでもかまいません。

外部オートメーション

外部オートメーションは、別のプロセスが毎回完全なコンテキスト引数を使用して tf のコマンド ライン ツールを繰り返し呼び出すように構成します。このモードを有効にするために特殊な構文は必要ありません。このメソッドを実装するには、次の外部プロセスのいずれかを使用できます。

  • sh、ksh、bash、csh などの UNIX シェル

  • Perl またはスクリプトに使用される別のプログラミング言語

  • Apache Ant または別のビルド指向のツール

  • tf プログラムを起動して引数を指定できるその他のツール

内部オートメーション

内部オートメーションは、tf コマンド ライン ツールがオートメーションのプロセスを駆動して、引数として渡されるコマンド ファイルを解釈するように構成します。内部オートメーションは、コマンド ファイルへのローカル パスの直前に @ シンボルを配置することにより、呼び出すことができます。このコマンド ラインで指定する追加の引数は、コマンド ファイルのコマンドで位置指定引数として使用できます。

[!メモ]

コマンド ファイルとして標準入力を処理するには、後ろにファイル名を付けずに @ シンボルを指定します (tf@)。入力ストリームは、プラットフォームの既定のエンコーディングと文字セットに従ってテキストとして解釈されます。

次のコマンド ファイルはファイルの指定のバージョンを取得し、そのバージョンに関する詳細な履歴情報を出力します。

# This line is ignored because it is a comment.
get "-version:%2" -force "%1"
history -format:detailed "-version:%2" "%1"

/home/john/get-and-history.tfc というコマンド ファイルは 2 つの位置指定引数を必要とするため、次の例のように実行できます。

tf @/home/john/get-and-history.tfc README.doc C5087

各行が解釈されると最初の引数である README.doc が %1 を置換します。C5087 は %2 を置換します。

[!メモ]

コマンド ファイルでは、代入された値に空白が含まれる可能性があるため (ファイル名や日付のバージョン仕様など)、位置指定引数は両方とも二重引用符で囲まれます。

コマンド ファイル形式は、拡張 Backus-Naur Form (EBNF) で示すことができます。

command file ::= { line } ;
line ::= comment line | blank line | action line , EOL ;
comment-line ::= "#" | "rem" , { ? any non-EOL character ? } ;
blank line ::= { ? any whitespace character ? };
action line ::= tf command , [ { white space , tf option } ] , [ { white space , tf free argument } ] ;
tf command ::= ? any tf command ?
tf option ::= ? any tf option ? | positional argument ;
tf free argument::= ? any tf free argument ? | positional argument ;
positional argument::= "%" , non-zero digit , [ { digit } ] ;
EOL ::= ? your platform's EOL character or sequence ?
white space ::= { ? any non-EOL whitespace character ? }
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
non-zero digit ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  • tf command には、getworkfoldworkspace などの有効な任意の tf コマンドを指定できます。

  • tf option には、-login-profile-format などの有効な任意の tf オプションを指定できます。

  • tf free argument には、サーバー パスやローカル パスなどの tf に対する自由引数として使用される任意の文字列を指定できます。

  • positional argument は、外側の tf のコマンド ライン引数から置換するテキストのプレースホルダーです。数値は、置き換える "%1" や "%2" のようなコマンド ライン引数のインデックスに対応する正の整数です。%1 は、最初の引数を示します。位置指定引数はオプションまたは自由引数として、コマンドの後に任意の順序で使用できます。

[!メモ]

空白を含むオプションと引数は、二重引用符を使用して囲みます。たとえば、ラベル指定子については “-version:LRelease 2.1” を、自由引数には “$/Inventory/Client Project/main.c” を、そして空間を含む可能性のある位置指定引数には '%1" を使用します。コマンド ファイル内のオプションの境界を示すのは、二重引用符のみです。単一引用符は、リテラルとして解釈されます。アクション行でリテラルの二重引用符を指定するには、2 つの二重引用符を一緒に使用する必要があります ("")。シェルはコマンド ファイル内の行を解析しないため、コマンド ファイル内の引用符の規則は、シェルで使用する規則とは異なる場合があります。

2 つのメソッドの長所と短所

では、外部オートメーションと内部オートメーションのどちらのメソッドを使用しますか?各メソッドの利点と欠点を見てみましょう。

外部オートメーション

内部オートメーション

利点

  • tf のコマンドのみではなく、その他のコマンドも実行できるため、柔軟性があります。

  • シンプルです。外部プロセスまたは言語に慣れている場合は、その他のコマンド ライン プロセスと同様に tf コマンド ライン ツールを呼び出すことができます。

  • 簡単にデバッグできます。一部のコマンドが予測どおりに実行されない場合、問題を診断するためにコマンド ラインでコマンドを変更する必要はありません。

  • 外部メソッドよりも高速です。Java 仮想マシンが一度だけ読み込まれ、コマンド ライン ツールがサーバーへの接続を再利用できるので、各コマンドを個別に実行するよりも、コマンド ファイルの複数のコマンドをすばやく実行できます。

Cons

  • 内部オートメーションより低速です。ユーザーが実行する各コマンドに対して、CPU は Java 仮想マシンの起動とクライアントの実行準備に時間を費やさなければなりません。

  • 外部プロセスはエラーを検出する必要があります。外部プロセスは各実行の終了コードをテストしない場合、プロセスはエラーを見落とす可能性があります。

  • プログラミングがより面倒な場合があります。外部プロセスは、tf コマンド ライン ツールを実行するたびに関連するすべてのオプションを指定する必要があり、引数に特別な引用符やエスケープが必要な場合があります。

外部オートメーションと比べて柔軟性に欠けます。その理由を次に示します。

  • コマンド ファイルで指定できるのは tf コマンドだけであるため、tf のコマンド間の実行の合間にその他のタスクを実行する場合は、複数のコマンド ファイルを作成して、それぞれを実行する必要が生じることもあります。

  • 実行は、最初に見つけたエラー状態で停止します。エラー状態をスキップしたり無視するようにツールに強制することはできません。

  • 通常の出力またはエラー出力の処理は複雑です。内部オートメーションでツールを実行しているプロセスは、コマンド ファイル内のどの行が通常の出力のどの部分を生成したかを特定できない可能性があります。

参照

その他の技術情報

Command-line Reference (Team Explorer Everywhere)