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