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 以降では標準で同梱される。