コード生成と 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.

注意

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