TextTransform を使用して Visual Studio を起動せずに T4 によるコード自動生成を行う

ページ更新日 :
ページ作成日 :

動作確認環境

Visual Studio
  • Visual Studio 2022
Windows
  • Windows 11

動作必須環境

Visual Studio
  • ある程度古いバージョンでも動きます

前提条件

本 Tips は以下を前提として説明しています。

  • Visual Studio が Windows にインストールされていること

今回「TextTransform (または TextTransformCore)」というツールを使用しますが、Visual Studio に含まれているツールなので Visual Studio を起動しないとはいってもインストール自体は必要です。

「TextTransform.exe」と「TextTransformCore.exe」の違いについて

「TextTransform.exe」は Entity Framework が登場したあたりからある初期のツールです。

「TextTransformCore.exe」は .NET 6 をベースに作られた新しめのツールです。

大きな機能差はないのでどちらを使用しても構いません。

T4 ファイル (.tt) の作成

Visual Studio 上で作るものとなんら変わりはないのでテキストエディタを使用して作っておいてください。 今回は以前サンプルとして作成したコードをそのまま流用します。

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>

<#
  List<string> types = new(){"Int", "Short", "Long", "Float", "Double", "Decimal"}; 
#>

public static class ParseExtensions
{
<# foreach (var type in types) { #>
<#   var typeLower = type.ToLower(); #>
  public static <#= typeLower #> Parse<#= type #>(this string self, <#= typeLower #> defaultValue)
  {
    return <#= typeLower #>.TryParse(self, out var val) ? val : defaultValue;
  }
<# } #>
}

今回はこのファイルを以下の場所に置いておきます。どこでも実行できるので好きな場所に置いておいてください。

  • C:\Temporary\Sample.tt

コマンドラインツール「TextTransform」を使用してコードを生成する

Visual Studio では Visual Studio が自動的に「TextTransform」を使用してコードを生成していたので手軽でしたが、Visual Studio を使わない場合は手動で「TextTransform」を使用してコードを生成する必要があります。

「TextTransform」はコマンドラインツールであり、Visual Studio をインストールしたときに以下のフォルダにインストールされます。

  • <ドライブパス>\Program Files\Microsoft Visual Studio\<Visual Studio のバージョン>\<エディション>\Common7\IDE\TextTransform.exe
  • <ドライブパス>\Program Files\Microsoft Visual Studio\<Visual Studio のバージョン>\<エディション>\Common7\IDE\TextTransformCore.exe

【例】

  • C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\TextTransform.exe

ターミナルやコマンドプロンプトを起動して TextTransform を使用しコードの生成を行います。

Windows 11 の場合はスタートメニューからターミナルを起動して下さい。ほかの OS の場合はコマンドプロンプトを使用します。

ターミナルの場合はコマンドプロンプトに切り替えてください。PowerShell でもできないことはないですが記述が少し変わります。

cd コマンドで .tt ファイルを置いたフォルダに移動し以下のようにコマンドを入力します。(フォルダパスのバージョンなどは適時変えてください)

【入力例】

  • "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\TextTransform" Sample.tt

成功すると何事もなく処理が終わったかのように進みます。実際にフォルダを見てみるとコードが自動生成されていることを確認できます。

中身もちゃんと作成されています。

コマンド実行時の TextTransform のパスを短くしたい

コマンドを実行するたびに TextTransform の長いパスを記述するのが面倒である場合、そのパスを「環境変数」に登録する方法もありますが、 Visual Studio に付属している開発用コマンドプロンプトであればデフォルトでそのパスを参照するので記述が楽になります。

スタートメニューから Visual Studio のフォルダを見ると開発用コマンドプロンプトがあるのでそれを起動します。

同じようにコマンドを記述する際に TextTransform のパスを省略して実行できます。

ちなみに Windows 11 の場合ターミナルに組み込まれるので開くのは簡単です。

.bat や .ps1 ファイルにコマンドを記述しておいて簡単に実行できるようにする

記述すべき内容は普通にコマンドを入力するときと同じなので内容は割愛します。 OS の設定によっては .bat や .ps1 ファイルをダブルクリックしても実行できないように制限されている場合はありますのでその場合は実行できるように設定してください。