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

Visual Studio の "T4 テキスト テンプレート" は、テキスト ファイルを生成できる、テキスト ブロックと制御ロジックが混在するファイルです。 制御ロジックは、 Visual C# または Visual Basicのプログラム コードのフラグメントとして記述します。 Visual Studio 2015 Update 2 以降では、T4 テンプレート ディレクティブで C# バージョン 6.0 の機能を使用できます。 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 テキスト テンプレート

デザイン時テンプレートは、アプリケーションのソース コードや他のリソースの一部を定義します。 通常は、複数のテンプレートを使用して 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.
}

XML ファイルの値に応じて、次のような .cs ファイルが生成されます。

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

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

デザイン時テンプレートを使用すると、要件が変わったときに構成をすばやく変更できるようになり、変更の信頼性も高まります。 ワークフローの例のように、ビジネス要件の観点で入力を定義するのが一般的です。 このように定義すると、変更点についてユーザーと共に検討しやすくなります。 そのため、デザイン時テンプレートは、アジャイル開発プロセスにおける有用なツールとなります。

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

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

注意

1 つ以上のテンプレートで読み込まれるデータを示す際に、 モデル という用語を使用する場合があります。 モデルはどのような形式でもかまいません。あらゆる種類のファイルまたはデータベースを使用できます。 必ずしも UML モデルやドメイン固有言語モデルである必要はありません。 'モデル' は、コードのようなものではなく、ビジネス概念の観点でデータを定義できることを示します。

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

関連項目