Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SourceGeneratorのススメ
Search
tkym
January 24, 2026
Programming
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SourceGeneratorのススメ
tkym
January 24, 2026
More Decks by tkym
See All by tkym
すこし踏み込む CancellationToken
htkym
2
670
AIの中の人になってみる
htkym
0
180
今さら聞けない .NET CLI
htkym
0
240
GitHubCopilotCLIのスラッシュコマンドを自作してみる
htkym
0
160
今さら聞けないCancellationToken
htkym
0
310
GitHub Copilot CLIのいいところ
htkym
2
1.5k
GitHubCopilotCLIをはじめよう.pdf
htkym
0
420
RoslynAnalyzerをつかってみよう
htkym
0
1.3k
SourceGeneratorのマーカー属性問題について
htkym
0
300
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
490
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
160
setup-vp GitLab対応の裏側
naokihaba
0
120
Java 27新機能 / Java 27 new features
kishida
2
150
wkhtmltopdfの次どうするか問題2026
willnet
2
1.6k
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
Intent as Code
shoppingjaws
6
1.1k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
200
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
470
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
300
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Statistics for Hackers
jakevdp
799
230k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Bash Introduction
62gerente
615
220k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
RailsConf 2023
tenderlove
30
1.6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
For a Future-Friendly Web
brad_frost
183
10k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
500
Mind Mapping
helmedeiros
1
370
Transcript
Source Generatorのススメ FutureOne株式会社 高山博司
高山博司 ・ FutureOne株式会社 ・ C#/.NET/Blazor tkym @h_tkymx
Source Generator
メタプログラミング ・ 他のコードを生成、変更、または分析できるコードを記述すること ・ 下記のものは ”実行時”に機能する。 リフレクション プログラムの実行中に、型 の情報を取得したり、それを 利用して動的にインスタンス
を作ったりする. スクリプティング 属性 (Attributes) コンパイラやフレームワーク に対して「これはこういう扱 いをしてね」という追加情報 を伝える コンパイル時には決まってい ないメソッドやプロパティに 対して、実行時にアクセスす る.(dynamic 型など). Roslyn Scripting APIを使っ て、文字列としてのC#コード を実行時にコンパイル・実行 することも可能. 式木(Expression Tree) コード(処理ロジック)を、コ ンパイル後の命令ではなく 『データ構造(ツリー状)』とし て扱う
C# Source Generator .NET 5 で導入されたコンパイル時のメタプログラミングツール なにがいいの? ・ 開発中に実行 ・
実行時のパフォーマンスが向上 ・ 新しいC#ソースファイルを生成し,自動的に追加 ・ リフレクションを排除 ・ AOTコンパイルとツリーシェイキングを可能に
AOT: Ahead of Time Compilation (事前コンパイル) 実行時ではなくビルド時に機械語へ変換する技術 ・ パフォーマンス向上 ・
起動時間の短縮 ・ ツリーシェイキングによるデプロイサイズの縮小 ・ 実行時の評価やリフレクションが不要
ソースジェネレーター VS. 生成AI
LoggerMeessage - .NET 6
GeneratedRegex - .NET 7 (.NET 9でプロパティも可能に)
System.Text.Json - .NET 8
Blazor Form Validation - .NET 10
Source Generatorの設計原則 ・ 「追加」のみで「変更」はしない 既存のC#コードを書き換えることはできない コンパイルプロセスに参加し、新しいC#ソースコードを追加する役割 ・ パイプラインによる高速化 ビルド速度を落とさないよう、必要なデータだけを抽出・キャッシュする 入力(ソースやファイル)から必要な情報だけを取り出し、変更があった場合のみコード再生成
・ 完全な独立性 順序不同: ジェネレーター同士の実行順序は決まっていない 相互不干渉: 他のジェネレーターが作ったコードは見えないし、触れない どのジェネレーターも「ユーザーが書いたコード(と外部ファイル)」だけを入力とする ・副作用のない純粋な処理 同じ入力なら常に同じ出力を返す。 診断(エラーや警告)も出力可能だが、ビルドプロセスを汚染しないように設計する
Source Generatorの実装 .NET 5 / C# 9 .NET 6 /
C# 10
C#/VBのコンパイラのオープンソース実装 dotnet/roslyn: The Roslyn .NET compiler provides C# and Visual
Basic languages with rich code analysis APIs. Roslynとは?
Compiler as a Service C# コンパイラ IL
Compiler as a Service C# コンパイラ IL Syntax Tree 構文木
Demo
まとめ Source Generator ・ 反復作業の削減 ・ リフレクションの排除 ・ AOTが可能に ・
https://github.com/dotnet/roslyn/blob/main/docs/features/incremental- generators.cookbook.md