T4 でクラスやプロパティを自動生成する

Text Template Transformation Toolkit (T4) はテンプレート エンジンの一つで、主に Visual Studio で使われているものです。
これを使うと、ソースコードやデータの集合などのファイルを自動生成できます。

今回は例として、次のような Markdown を記述したら、
それに対応するクラスやプロパティを C# のソースコードとして生成することを考えます。

この Markdown の仕様を次のように定めます。

  • 空行は無視
  • 箇条書きでない行がクラス名
  • その下に続く箇条書きはプロパティ
    • 「- Type PropertyName」の形式
    • プロパティ名が省略された場合は、型名と同じ
  • クラス名およびプロパティ名は、PascalCase, camelCase のどちらを指定してもよい

以下では、このような .md ファイルを入力として、
プロパティおよびコンストラクターを持つ部分クラスを .cs ファイルに出力するように T4 で実装していきます。

まず、プロジェクトに上記の .md ファイルを追加しておきます。
そしてプロジェクトに「テキスト テンプレート (.tt)」 を追加します。

Add New Item

追加された .tt ファイルを、仕様に従って次のように実装します。

注意点は以下の通りです。

  • 初期状態では出力の拡張子が .txt になっているため、.cs に変更する
  • プロジェクト内のファイルのパスを取得するには、hostspecific="true" を指定して Host.ResolvePath メソッドを使う
  • <#= #> :テキストの出力
  • <# #> :コードを書ける、変数を使える
  • <#+ #> :メソッド、クラスなどを定義できる

.tt ファイルを保存したときに処理が実行されます。
または、.tt ファイルを右クリックして [カスタム ツールの実行] を選択すれば実行されます。

Run Custom Tool

これで、以下のように RecordTypes.cs が生成されます。

 

作成したサンプル

テストしたバージョン

  • Visual Studio 2017

参照

広告
カテゴリー: ツール. タグ: , . Leave a Comment »