コード生成と T4 テキスト テンプレート

更新 : 2011 年 3 月

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 Developer Center (T4 デベロッパー センター) T4 に関するサンプル、ヒント、よく寄せられる質問を示します。

参照

その他の技術情報

方法: UML モデルからファイルを生成する

ドメイン固有言語からのコード生成

履歴の変更

日付

履歴

理由

2011 年 3 月

実行時テンプレートとデザイン時テンプレートの違いが強調されました。

カスタマー フィードバック