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

Visual Studio の "T4 テキスト テンプレート" は、テキスト ファイルを生成できる、テキスト ブロックと制御ロジックが混在するファイルです。 制御ロジックは、Visual C# または Visual Basic のプログラム コードのフラグメントとして記述されます。 T4 テンプレート ディレクティブでは、C# バージョン 6.0 の機能を使用できます。 Web ページ、リソース ファイル、任意の言語のプログラム ソース コードなどのテキスト ファイルを生成できます。

特定の問題空間でステートメントを表現するために設計されたドメイン固有言語 (DSL) については、「ドメイン固有言語からのコード生成」の方法を参照してください

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 テキスト テンプレート

デザイン時テンプレートは、アプリケーションのソース コードや他のリソースの一部を定義します。 通常は、複数のテンプレートを使用して 1 つの入力ファイルまたはデータベースのデータを読み込み、一部の .cs.vb などのソース ファイルを生成します。 各テンプレートによって 1 つのファイルが生成され、Visual Studio または MSBuild 内でビルドされます。

たとえば、入力データが構成データの XML ファイルであるとします。 開発中に XML ファイルを編集するたびに、テキスト テンプレートによって、アプリケーション コードの一部が再生成されます。 テンプレートの例を次に示します。

<#@ output extension=".cs" #>
<#@ assembly name="System.Xml" #>
<#
 System.Xml.XmlDocument configurationData = ...; // Read a data file here.
#>
namespace Fabrikam.<#= configurationData.SelectSingleNode("jobName").Value #>
{
  ... // More code here.
}

生成される .cs ファイルは、XML ファイルの値に基づいて次の形式になります。

namespace Fabrikam.FirstJob
{
  ... // More code here.
}

別の例として、入力がビジネス アクティビティのワークフローの図であるとします。 ユーザーがビジネス ワークフローを変更した場合や、別のワークフローを使用する新しいユーザーとの作業を開始する場合は、新しいモデルに合わせてコードを簡単に再生成できます。

Note

1 つ以上のテンプレートで読み込まれるデータを示す際に、 モデル という用語を使用する場合があります。 モデルはどのような形式でもかまいません。あらゆる種類のファイルまたはデータベースを使用できます。 必ずしも UML モデルやドメイン固有言語モデルである必要はありません。 'モデル' は、コードのようなものではなく、ビジネス概念の観点でデータを定義できることを示します。 デザイン時テンプレートは、要件の変更に応じて構成を変更するときに、より迅速で信頼性が高くなります。 ワークフローの例のように、ビジネス要件の観点で入力を定義するのが一般的です。 デザイン時テンプレートはアジャイル開発プロセスにおいて有用なツールです。

デザイン時テンプレートを作成するには、 テキスト テンプレート ファイルをプロジェクトに追加します。 または、プレーンテキスト ファイルを追加し、 [カスタム ツール] プロパティを TextTemplatingFileGeneratorに設定することもできます。

詳細については、「T4 テキスト テンプレートを使用したデザイン時コード生成」を参照してください。 テンプレートの構文の詳細については、「T4 テキスト テンプレートの作成」を参照してください。

テキスト テンプレート変換機能は、 T4と名付けられています。

関連項目