コンテンツにスキップ

Text Template Transformation Toolkit

出典: フリー百科事典『ウィキペディア(Wikipedia)』

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