SlideShare a Scribd company logo
1 of 13
Download to read offline
Visual Studioのデザイン時T4テキスト
テンプレートをほんの少し理解した
2022/8/25
tat_tt
自己紹介
名前:tat_tt (たっと)
年齢:27歳(社会人5年目)
業務:C#を使ったデスクトップアプリ開発
目次
• 背景
• 本日お話しすること
• デザイン時T4テンプレートの概要
• 便利に使える場面と使い方
• まとめ
背景
末尾の数字だけが変わるような複数のフィール
ドやプロパティをコメントも合わせて、手動で
実装するのが面倒
調べてみると、デザイン時T4テンプレートを使
うと楽できそう
実際に使ってみて得た知見を今日は共有
本日お話しすること
以下2点が話題
• デザイン時T4テンプレートの概要
• 便利に使える場面
Visual Studioのプロジェクト
デザイン時T4テンプレートの概要(1)
T4テキストテンプレートファイルを使って、テ
キストファイルをビルド時に自動生成する仕組
み
T4テキスト
テンプレートファイル
(.tt)
ビルド時
テキストファイル
(.txt, .csなど)
自動生成
ディレクティブ:出力ファイルの設定やコントロールブロック向けの設定
<#@ import namespace="System" #>
<#@ output extension=“.cs” #>
テキストブロック:出力ファイルに直接挿入されるテキスト
public class Sample
{
// ・・・
}
コントロールブロック:テキストを生成するためのプログラムコード
<#
for(int i = 0; i < 4; i++)
{
Write(i + ", ");
}
Write("4");
#>
デザイン時T4テンプレートの概要(2)
T4テキストテンプレートの構成要素は以下
便利に使える場面と使い方
• 末尾の数字だけが変わるようなフィールドやプ
ロパティを効率的に定義したい
• ジェネリックで受け取る型の数だけが違うよう
な共通実装が多いメソッドを効率的に定義した
い
以降で具体例を掲示
便利に使える場面 ~困りごと~
20個の文字列型の設定項目があるクラスを定義
することを考える
class Sample
{
/// <summary>
/// 設定項目1
/// </summary>
string SettingItem1 { get; set; }
/// <summary>
/// 設定項目2
/// </summary>
string SettingItem2 { get; set; }
// SettingItem3~20も同様に定義
}
■困る点
・単純に20個定義する
のが面倒
・プロパティ名やコメ
ントを変えると20個す
べてに反映が必要
便利に使える場面 ~テンプレートを使うと~
制御ロジックを使って簡潔に書ける!
下で使う変数を定義
for文内のテキストを
20回分生成
この部分がfor文内の変数count
の値に置き換わる
便利に使える場面 ~使い方①~
T4テンプレート用の.ttファイルを追加
便利に使える場面 ~使い方②~
テンプレート作成
保存
テンプレートから
テキスト作成
まとめ
以下のような場面ではデザイン時T4テキストテ
ンプレートが便利
• 末尾の数字だけが変わるようなフィールドやプロパ
ティを効率的に定義したい
• ジェネリックで受け取る型の数だけが違うような共通
実装が多いメソッドを効率的に定義したい
Visual Studioで面倒なテキストを作る場合には
デザイン時T4テキストテンプレートを使えない
か確認するとよいかも!

More Related Content

Similar to Visual Studioのデザイン時T4テキストテンプレートをほんの少し理解した.pdf

Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDShinya Nakajima
 
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ日本マイクロソフト株式会社
 
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?Akira Hatsune
 
SharePoint Online Communication Sites お手軽サイト作成
SharePoint Online Communication Sites お手軽サイト作成SharePoint Online Communication Sites お手軽サイト作成
SharePoint Online Communication Sites お手軽サイト作成Hirofumi Ota
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう増田 亨
 
オブジェクト指向設計の原則
オブジェクト指向設計の原則オブジェクト指向設計の原則
オブジェクト指向設計の原則Toru Koido
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08孝文 田村
 
Adobe Fireworks CS6 使いこなしテクニック
Adobe Fireworks CS6 使いこなしテクニックAdobe Fireworks CS6 使いこなしテクニック
Adobe Fireworks CS6 使いこなしテクニックMori Kazue
 
プランナーがPR駆動してみた話
プランナーがPR駆動してみた話プランナーがPR駆動してみた話
プランナーがPR駆動してみた話Rino Omura
 
今日から始めるEnvoyの開発
今日から始めるEnvoyの開発今日から始めるEnvoyの開発
今日から始めるEnvoyの開発Rei Shimizu
 
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップアジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップYou&I
 
ある製造業のチームトポロジー
ある製造業のチームトポロジーある製造業のチームトポロジー
ある製造業のチームトポロジーTakuya Matsunaga
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminarAtushi Sugiyama
 
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~日本マイクロソフト株式会社
 
connpass特徴と開発の流れ
connpass特徴と開発の流れconnpass特徴と開発の流れ
connpass特徴と開発の流れIkeda Yosuke
 

Similar to Visual Studioのデザイン時T4テキストテンプレートをほんの少し理解した.pdf (20)

Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CD
 
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
【de:code 2020】 開発者が語る! Microsoft Teams アプリケーション開発の実例とコツ
 
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?
 
SharePoint Online Communication Sites お手軽サイト作成
SharePoint Online Communication Sites お手軽サイト作成SharePoint Online Communication Sites お手軽サイト作成
SharePoint Online Communication Sites お手軽サイト作成
 
DL-D_ver1.pdf
DL-D_ver1.pdfDL-D_ver1.pdf
DL-D_ver1.pdf
 
Trat_sprint7
Trat_sprint7Trat_sprint7
Trat_sprint7
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
オブジェクト指向設計の原則
オブジェクト指向設計の原則オブジェクト指向設計の原則
オブジェクト指向設計の原則
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
 
Adobe Fireworks CS6 使いこなしテクニック
Adobe Fireworks CS6 使いこなしテクニックAdobe Fireworks CS6 使いこなしテクニック
Adobe Fireworks CS6 使いこなしテクニック
 
プランナーがPR駆動してみた話
プランナーがPR駆動してみた話プランナーがPR駆動してみた話
プランナーがPR駆動してみた話
 
今日から始めるEnvoyの開発
今日から始めるEnvoyの開発今日から始めるEnvoyの開発
今日から始めるEnvoyの開発
 
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップアジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
 
ある製造業のチームトポロジー
ある製造業のチームトポロジーある製造業のチームトポロジー
ある製造業のチームトポロジー
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~
【de:code 2020】 Teams から WinActor を呼び出そう! ~WinActor Bot のご紹介~
 
connpass特徴と開発の流れ
connpass特徴と開発の流れconnpass特徴と開発の流れ
connpass特徴と開発の流れ
 

Visual Studioのデザイン時T4テキストテンプレートをほんの少し理解した.pdf