コード生成と T4 テキスト テンプレート
Visual Studio の T4 テキスト テンプレートは、テキスト ファイルを生成できる、テキスト ブロックと制御ロジックが混在するファイルです。制御ロジックは、Visual C# または Visual Basic のプログラム コードのフラグメントとして記述します。Web ページ、リソース ファイル、任意の言語のプログラム ソース コードなど、あらゆる種類のテキスト ファイルを生成できます。
T4 テキスト テンプレートには、次の 2 種類があります。
実行時 T4 テキスト テンプレート (前処理されたテンプレート) は、通常、出力の一部として文字列を生成するために、アプリケーションで実行されます。
たとえば、次のように HTML ページを定義するテンプレートを作成できます。<html><body> The date and time now is: <#= DateTime.Now #> </body></html>
このテンプレートは、生成される出力に似ている点に注目してください。このように、テンプレートは結果の出力に似ているため、テンプレートを変更する場合に誤りを防ぐことができます。
また、テンプレートにはプログラム コードのフラグメントも含まれます。これらのフラグメントを使用して、テキストのセクションの繰り返し、条件付きセクションの作成、およびアプリケーションのデータの表示を行うことができます。
出力を生成するには、テンプレートによって生成される関数をアプリケーションで呼び出します。次に例を示します。
string webResponseText = new MyTemplate().TransformText();
アプリケーションは、Visual Studio がインストールされていないコンピューターでも実行できます。
実行時テンプレートを作成するには、前処理されたテキスト テンプレート ファイルをプロジェクトに追加します。また、プレーンテキスト ファイルを追加し、"カスタム ツール" プロパティを TextTemplatingFilePreprocessor に設定してもかまいません。
詳細については、「T4 テキスト テンプレートを使用した実行時テキスト生成」を参照してください。テンプレートの構文の詳細については、「T4 テキスト テンプレートの作成」を参照してください。
デザイン時 T4 テキスト テンプレートは、アプリケーションのソース コードや他のリソースの一部を定義するために、Visual Studio で実行されます。
通常は、複数のテンプレートを使用して 1 つの入力ファイルまたはデータベースのデータを読み込み、一部の .cs ファイル、.vb ファイル、または他のソース ファイルを生成します。テンプレートごとに 1 つのファイルが生成されます。テンプレートは、Visual Studio または MSBuild 内で実行されます。たとえば、入力データが構成データの XML ファイルであるとします。開発中にこの XML ファイルを編集するたびに、テキスト テンプレートによって、アプリケーション コードの一部が再生成されます。テンプレートの例を次に示します。
<#@ output extension=".txt" #> <#@ assembly name="System.Xml" #> <# System.Xml.XmlDocument configurationData = ...; // Read a data file here. #> namespace Fabrikam.<#= configurationData.SelectSingleNode("jobName").Value #> { ... // More code here. }
XML ファイルの値に応じて、次のような .cs ファイルが生成されます。
namespace Fabrikam.FirstJob { ... // More code here. }
別の例として、入力がビジネス アクティビティのワークフローの図であるとします。ユーザーがビジネス ワークフローを変更した場合や、別のワークフローを使用する新しいユーザーとの作業を開始する場合は、新しいモデルに合わせてコードを簡単に再生成できます。
デザイン時テンプレートを使用すると、要件が変わったときに構成をすばやく変更できるようになり、変更の信頼性も高まります。ワークフローの例のように、ビジネス要件の観点で入力を定義するのが一般的です。このように定義すると、変更点についてユーザーと共に検討しやすくなります。そのため、デザイン時テンプレートは、アジャイル開発プロセスにおける有用なツールとなります。
デザイン時テンプレートを作成するには、テキスト テンプレート ファイルをプロジェクトに追加します。また、プレーンテキスト ファイルを追加し、"カスタム ツール" プロパティを TextTemplatingFileGenerator に設定してもかまいません。
詳細については、「T4 テキスト テンプレートを使用したデザイン時コード生成」を参照してください。テンプレートの構文の詳細については、「T4 テキスト テンプレートの作成」を参照してください。
[!メモ]
1 つ以上のテンプレートで読み込まれるデータを示す際に、モデルという用語を使用する場合があります。モデルはどのような形式でもかまいません。あらゆる種類のファイルまたはデータベースを使用できます。必ずしも UML モデルやドメイン固有言語 (Domain Specific Language) モデルである必要はありません。'モデルは、コードのようなものではなく、ビジネス概念の観点でデータを定義できることを示します。
テキスト テンプレート変換機能は、T4 と名付けられています。
このセクションの内容
T4 テキスト テンプレートを使用した実行時テキスト生成
プリコンパイルされたテキスト テンプレートは、テキスト ファイルを生成するあらゆるアプリケーションにおいて、テキストを定義する簡単で信頼性の高い方法です。ただし、この方法では、実行時にテキスト テンプレートを変更することができません。T4 テキスト テンプレートを使用したデザイン時コード生成
モデルからコードやその他のリソースを生成すると、モデルを更新することによってアプリケーションを更新することができます。ビルド処理でのコード生成
Visual Studio Visualization and Modeling SDK がインストールされている場合は、生成されるソフトウェアをモデルの変更に合わせて最新の状態に確実に保つことができます。T4 テキスト テンプレートの作成
テキスト テンプレート ファイルの構文。チュートリアル: テキスト テンプレートを使用したコード生成
コード生成を使用する一例のデモ。T4 テキスト テンプレートのデバッグ
テキスト テンプレートのデバッグ方法および一般的なテキスト テンプレート エラー。TextTransform ユーティリティを使用したファイルの生成
テキスト テンプレート変換の実行に使用できるコマンド ライン ツール。T4 テキスト変換のカスタマイズ
ディレクティブ プロセッサの作成方法および独自のデータ ソース用のカスタム テンプレート ホスト。