コード生成と T4 テキスト テンプレートCode Generation and T4 Text Templates

Visual Studio で、 T4 テキスト テンプレートテキスト ブロックとテキスト ファイルを生成できる制御ロジックの組み合わせです。In Visual Studio, a T4 text template is a mixture of text blocks and control logic that can generate a text file. 制御ロジックは、 Visual C#Visual C# または Visual BasicVisual Basicのプログラム コードのフラグメントとして記述します。The control logic is written as fragments of program code in Visual C#Visual C# or Visual BasicVisual Basic. Visual Studio 2015 Update 2 以降では、T4 テンプレート ディレクティブで C# バージョン 6.0 の機能を使用できます。In Visual Studio 2015 Update 2 and later, you can use C# version 6.0 features in T4 templates directives. 生成されたファイルは、web ページ、またはリソース ファイル、または任意の言語でプログラムのソース コードなど、あらゆる種類のテキストを指定できます。The generated file can be text of any kind, such as a web page, or a resource file, or program source code in any language.

T4 テキスト テンプレートの 2 種類があります: 時およびデザイン時に実行します。There are two kinds of T4 text templates: run time and design time.

実行時 T4 テキスト テンプレートRun time T4 text templates

呼ばれます '前処理された' テンプレート、実行時テンプレートは、通常は、出力の一部として、テキスト文字列を生成するために、アプリケーションで実行されます。Also known as 'preprocessed' templates, run time templates are executed in your application to produce text strings, typically as part of its output. たとえば、次のように HTML ページを定義するテンプレートを作成できます。For example, you could create a template to define an HTML page:

<html><body>
 The date and time now is: <#= DateTime.Now #>
</body></html>

このテンプレートは、生成される出力に似ている点にご注目ください。Notice that the template resembles the generated output. このように、テンプレートは結果の出力に似ているため、テンプレートを変更する場合に誤りを防ぐことができます。The similarity of the template to the resulting output helps you avoid mistakes when you want to change it.

また、テンプレートにはプログラム コードのフラグメントも含まれます。In addition, the template contains fragments of program code. これらのフラグメントを使用して、テキストのセクションの繰り返し、条件付きセクションの作成、アプリケーションのデータの表示を行うことができます。You can use these fragments to repeat sections of text, to make conditional sections, and to show data from your application.

出力を生成するには、テンプレートによって生成される関数をアプリケーションで呼び出します。To generate the output, your application calls a function that is generated by the template. 例えば:For example:

string webResponseText = new MyTemplate().TransformText();

アプリケーションは、Visual Studio をインストールしていないコンピューターで実行できます。Your application can run on a computer that does not have Visual Studio installed.

実行時テンプレートを作成するには、 前処理されたテキスト テンプレート ファイルをプロジェクトに追加します。To create a run-time template, add a Preprocessed text template file to your project. または、プレーンテキスト ファイルを追加し、 [カスタム ツール] プロパティを TextTemplatingFilePreprocessorに設定することもできます。Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFilePreprocessor.

詳細については、次を参照してください。 T4 テキスト テンプレートを使用した実行時テキスト生成します。For more information, see Run-Time Text Generation with T4 Text Templates. テンプレートの構文の詳細については、次を参照してください。 T4 テキスト テンプレートの作成です。For more information about the syntax of templates, see Writing a T4 Text Template.

デザイン時 T4 テキスト テンプレートDesign time T4 text templates

デザイン時テンプレートは、ソース コードの一部と、アプリケーションの他のリソースを定義します。Design time templates define part of the source code and other resources of your application. 通常、1 つの入力ファイルまたはデータベースのデータを読み取るいくつかのテンプレートを使用しの一部を生成、 .cs.vb、または他のソース ファイル。Typically you use several templates that read the data in a single input file or database, and generate some of your .cs, .vb, or other source files. テンプレートごとに 1 つのファイルが生成されます。Each template generates one file. Visual Studio または MSBuild 内で実行されます。They are executed within Visual Studio or MSBuild.

たとえば、入力データが構成データの XML ファイルであるとします。For example, your input data could be an XML file of configuration data. 開発中に XML ファイルを編集するたびに、テキスト テンプレートには、アプリケーション コードの一部が再生成します。Whenever you edit the XML file during development, the text templates regenerate part of the application code. テンプレートの例を次に示します。One of the templates could resemble the following example:

<#@ 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ファイルは、次のようになります。Depending on the values in the XML file, the generated .cs file would resemble the following:

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

別の例として、入力がビジネス アクティビティのワークフローの図であるとします。As another example, the input could be a diagram of workflow in a business activity. ユーザーがビジネス ワークフローを変更した場合や、別のワークフローを使用する新しいユーザーとの作業を開始する場合は、新しいモデルに合わせてコードを簡単に再生成できます。When the users change their business workflow, or when you start work with new users who have a different workflow, it is easy to regenerate the code to fit the new model.

デザイン時テンプレートを使用すると、要件が変わったときに構成をすばやく変更できるようになり、変更の信頼性も高まります。Design-time templates make it quicker and more reliable to change the configuration when the requirements change. ワークフローの例のように、ビジネス要件の観点で入力を定義するのが一般的です。Typically the input is defined in terms of business requirements, as in the workflow example. このように定義すると、変更点についてユーザーと共に検討しやすくなります。This makes it easier to discuss the changes with your users. そのため、デザイン時テンプレートは、アジャイル開発プロセスにおける有用なツールとなります。Design-time templates are therefore a useful tool in an agile development process.

デザイン時テンプレートを作成するには、 テキスト テンプレート ファイルをプロジェクトに追加します。To create a design-time template, add a Text Template file to your project. または、プレーンテキスト ファイルを追加し、 [カスタム ツール] プロパティを TextTemplatingFileGeneratorに設定することもできます。Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFileGenerator.

詳細については、次を参照してください。 T4 テキスト テンプレートを使用したデザイン時コード生成します。For more information, see Design-Time Code Generation by using T4 Text Templates. テンプレートの構文の詳細については、次を参照してください。 T4 テキスト テンプレートの作成です。For more information about the syntax of templates, see Writing a T4 Text Template.

Note

1 つ以上のテンプレートで読み込まれるデータを示す際に、 モデル という用語を使用する場合があります。The term model is sometimes used to describe data read by one or more templates. モデルはどのような形式でもかまいません。あらゆる種類のファイルまたはデータベースを使用できます。The model can be in any format, in any kind of file or database. 必ずしも UML モデルやドメイン固有言語モデルである必要はありません。It does not have to be a UML model or a Domain-Specific Language model. 'モデル' は、コードのようなものではなく、ビジネス概念の観点でデータを定義できることを示します。'Model' just indicates that the data can be defined in terms of the business concepts, rather than resembling the code.

テキスト テンプレート変換機能は、 T4と名付けられています。The text template transformation feature is named T4.

関連項目See Also