Text Template Transformation Toolkit

Text Template Transformation Toolkit（通称：T4、または、T4 テキストテンプレート）は、Visual Studioに含まれるテンプレートベースのテキスト生成エンジンである。
C#またはVB.netのプログラムコードを含むテンプレートファイルを記述することで、最終的なテキストファイルを自動生成することができる。

 例 

下記の内容のSample.ttを作成する。
<#@ output extension=".txt" #>
<# for (int i = 1; i <= 4; i++) { #>
Hello, T<#=i#>!
<# } #>

上記のSample.ttを元に、同名で拡張子が.txtであるSample.txtが下記のように生成される。

Hello, T1!
Hello, T2!
Hello, T3!
Hello, T4!

 構文 

 テキストブロック 
テキストブロックは、制御ブロックではない全ての箇所を指す。
テキストブロックの中身は、出力内容に直接挿入される。

制御ブロックのみが書かれていて、かつ、出力が無い場合、行末の改行文字はテキストブロックとは見做されない。

 エスケープ 
<##>の直前に\を記述することで、エスケープできる。これらのブロックの直前に連なる\は2つ毎に1つの\にエスケープされる。
これ以外の箇所では、\は単体でそのまま出力される。

つまり、以下のような出力となる。
 \<# ⇒ <#
 \#> ⇒ #>
 \\<# ⇒ \の後に制御ブロックが続く
 \\\<# ⇒ \<#
 \abc ⇒ \abc
 \\abc ⇒ \\abc

 制御ブロック 

 標準制御ブロック 
<# #>で囲まれた箇所を指す。
標準制御ブロック内では、templateディレクティブで指定された言語(C#,VB.net)の制御を記述できる。

 式制御ブロック 
<#= #>で囲まれた箇所を指す。
式制御ブロック内では与えられた式の評価結果が、出力内容に挿入される。
例えば、<#= DateTime.Now #>と書いた場合、実行時(またはデザインの内容に変更があった時点)の現在時刻が挿入される。

ユーティリティメソッドのWriteメソッドの簡略表記と考えられる。

 クラス機能制御ブロック 
<#+ #>で囲まれた箇所を指す。
クラス機能制御ブロックでは、主にテキストを生成するためのメソッドを定義する。

 ディレクティブ 
<#@ #>で囲まれた箇所を指す。
コードはディレクティブと呼ばれ、テンプレートの処理方法を指示するために利用される。

 templateディレクティブ : このテンプレートで使用する言語や、デバッグの有無を指示する。
 assemblyディレクティブ : 外部アセンブリの使用を宣言する。
 importディレクティブ : 名前空間の使用を宣言する。
 includeディレクティブ : 他のテンプレートファイルのテキストを取り込む。
 outputディレクティブ： 出力ファイルの出力方法を指示する。

 ユーティリティメソッド 
Microsoft.VisualStudio.TextTemplating.TextTransformationクラスにユーティリティメソッドが定義されている。
例えば、PushIndent(),PopIndent()メソッドを利用することで、出力ファイルのインデントを操作することができる。

 歴史 
T4の最初のバージョンは、Visual Studio 2005で登場した。当初はVisual Studioに同梱されておらず、SDKのインストールが必要だった。
Visual Studio 2008 以降では標準で同梱される。

Category:.NET
Category:テンプレートエンジン
Category:長大な項目名