Upgrade to Pro — share decks privately, control downloads, hide ads and more …

macros は死んだ。 コード生成の未来はどうなる?

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Kentaro Kawakami Kentaro Kawakami
October 29, 2026
5

macros は死んだ。 コード生成の未来はどうなる?

Avatar for Kentaro Kawakami

Kentaro Kawakami

October 29, 2026

Transcript

  1. DART / CODE GENERATION macros は死んだ。 コード⽣成の未来はどうなる? Dart メタプログラミング興亡記 mirrors

    から macros、runner と analyzer の現在地へ 株式会社WinTicket 川上健太郎 FlutterKaigi 2026
  2. DART / CODE GENERATION 川上 健太郎 • 2018 株式会社CyberAgent⼊社 •

    2023~ 株式会社 WinTicket • ソフトウェアエンジニア #釣り #ゴルフ FlutterKaigi 2026
  3. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 前史:mirrors を捨て、⽣成へ寄せた 2012 2014 2018-08 dart:mirrors。実⾏時に型を調 AngularDart の transformer。 Dart 2.0。web の mirrors と べる mirrors を使わず⽣成 transformers が消える 原⽂:Reflection in Dart with Mirrors(Gilad Bracha、Dart 公式ニュース 2012-12-01) 実⾏時に型や宣⾔を調べられる。Dart 1.0 より前からあり、VM(JIT)では今も使える Dart 2.0.0 CHANGELOG · AngularDart transformer · Flutter FAQ
  4. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 前史:mirrors を捨て、⽣成へ寄せた 2012 2014 2018-08 dart:mirrors。実⾏時に型を調 AngularDart の transformer。 Dart 2.0。web の mirrors と べる mirrors を使わず⽣成 transformers が消える 原⽂:generate static structures that remove the need for reflection (dart:mirrors) at runtime(AngularDart 1.x wiki) 実⾏時のリフレクションを不要にする静的な構造を、ビルド時に⽣成する。dart2js 後の JS を最⼩にするため Dart 2.0.0 CHANGELOG · AngularDart transformer · Flutter FAQ
  5. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 前史:mirrors を捨て、⽣成へ寄せた 2012 2014 2018-08 dart:mirrors。実⾏時に型を調 AngularDart の transformer。 Dart 2.0。web の mirrors と べる mirrors を避けて⽣成 transformers が消える 原⽂:dart:mirrors support was removed. Frameworks are encouraged to use code-generation instead.(Dart 2.0.0 CHANGELOG) dart:mirrors の対応は削除した。フレームワークにはコード⽣成を使ってほしい。transformers のビルドも新し い仕組みに置き換えた Dart 2.0.0 CHANGELOG · AngularDart transformer · Flutter FAQ
  6. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 前史:mirrors を捨て、⽣成へ寄せた 2012 2014 2018-08 dart:mirrors。実⾏時に型を調 AngularDart の transformer。 Dart 2.0。web の mirrors と べる mirrors を避けて⽣成 transformers が消える 原⽂:dart:mirrors support was removed. Frameworks are encouraged to use code-generation instead.(Dart 2.0.0 CHANGELOG) dart:mirrors の対応は削除した。フレームワークにはコード⽣成を使ってほしい。transformers のビルドも新し い仕組みに置き換えた Tree Shaking と AOT のために、実⾏時のリフレクションを捨て、⽣成に寄せた Dart 2.0.0 CHANGELOG · AngularDart transformer · Flutter FAQ
  7. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner:パッケージとして、共通の⽣成基盤が整った 2015-01 2016 2017-11 2018-09 source_gen 0.0.0 package:build と transformers を廃⽌ build / build_runner build_runner。出⼒を し、build_runner を本 1.0.0 事前宣⾔ 命に pub.dev の公開⽇は 2015-01-30。build より先に、analyzer を使うジェネレーターの共通基盤が始まる ジェネレーターは最初から⾔語の外、pub のパッケージとして育った 公開⽇は pub.dev API · 2017-11-27 Dartチームの告知 · build CHANGELOG
  8. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner:パッケージとして、共通の⽣成基盤が整った 2015-01 2016 2017-11 2018-09 source_gen 0.0.0 package:build と transformers を廃⽌ build / build_runner build_runner。出⼒を し、build_runner を本 1.0.0 事前宣⾔ 命に 原⽂:the build package will track any files you read in and run incremental rebuilds as necessary (source_gen 0.5.0、2016-03) build package が読んだファイルを追跡し、必要な分だけ再ビルドする。build 0.0.1 は 2016-01、build_runner 0.1.0 は 2016-11 公開 公開⽇は pub.dev API · 2017-11-27 Dartチームの告知 · build CHANGELOG
  9. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner:パッケージとして、共通の⽣成基盤が整った 2015-01 2016 2017-11 2018-09 source_gen 0.0.0 package:build と transformers を廃⽌ build / build_runner build_runner。出⼒を し、build_runner を本 1.0.0 事前宣⾔ 命に 原⽂:We're about to soft deprecate "pub transformers" entirely … enhance build_runner into a longer-term solution(Matan Lurey、2017-11-27) pub transformers は段階的に⾮推奨にする。build_runner を、⻑く使える仕組みに育てていく 公開⽇は pub.dev API · 2017-11-27 Dartチームの告知 · build CHANGELOG
  10. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner:パッケージとして、共通の⽣成基盤が整った 2015-01 2016 2017-11 2018-09 source_gen 0.0.0 package:build と transformers を廃⽌ build / build_runner build_runner。出⼒を し、build_runner を本 1.0.0 事前宣⾔ 命に いまの freezed や json_serializable も、この Builder をそのまま実装している 2018年9⽉、build と build_runner が 1.0 に。Builder の形はここで決まり、その後は変わっていない 公開⽇は pub.dev API · 2017-11-27 Dartチームの告知 · build CHANGELOG
  11. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner:パッケージとして、共通の⽣成基盤が整った 2015-01 2016 2017-11 2018-09 source_gen 0.0.0 package:build と transformers を廃⽌ build / build_runner build_runner。出⼒を し、build_runner を本 1.0.0 事前宣⾔ 命に いまの freezed や json_serializable も、この Builder をそのまま実装している 2018年9⽉、build と build_runner が 1.0 に。Builder の形はここで決まり、その後は変わっていない Builderの仕組みに合わせて書けば、変更に応じて⽣成し直せるように 公開⽇は pub.dev API · 2017-11-27 Dartチームの告知 · build CHANGELOG
  12. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2021年の提案:外部ツールは統合されておらず、遅い #1482 Static Metaprogramming (jakemac53, 2021-03-01) "These separate tools however are not well integrated into the compilers or tools" "It also tends to be slower than an integrated solution because it can't share any work with the compiler." "The most requested open language issue is to add data classes." copyWith は本体だけでなく、引数の⼀覧までフィールドに依存する 解析をコンパイラと共有し、IDE と⼀体にする。それが macros の狙いだった dart-lang/language #1482
  13. DART / CODE GENERATION 03 / 2024 macros:Dartで書いた⽣成処理を、 別 isolate

    で⾛らせる macrosの実⾏の仕組みと、編集後の再処理が重くなった理由 FlutterKaigi 2026
  14. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 macros の設計:Dartで書いた⽣成処理を、別 isolate で⾛らせる ホスト(2 系統) 別 isolate か別プロセス 3 段階で情報を確定 kernel に事前コンパイル macro = 普通の Dart プログラム analyzer IDE‧静的解析‧補完 introspection の RPC Isolate.spawnUri か Process.start で起動 JSON か byteData で往復 事前コンパイル済み kernel(.dill)を実⾏ CFE Turing 完全。使える core library は限定 コンパイル‧Hot Reload augmentation を返す それぞれが別の macro 実装を持つ 既存の宣⾔へ⾜すソース pkg/_macros/lib/src/executor/(SDK 3.6.0) Dart SDK 3.6.0:macros executor · macros 仕様(実⾏⽅式‧段階設計) ① Types 新しい型 ② Declarations 宣⾔ ③ Definitions 本体 前段の⽣成物を、後段が読める
  15. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 macros の設計:Dartで書いた⽣成処理を、別 isolate で⾛らせる ホスト(2 系統) 別 isolate か別プロセス 3 段階で情報を確定 kernel に事前コンパイル macro = 普通の Dart プログラム analyzer IDE‧静的解析‧補完 introspection の RPC Isolate.spawnUri か Process.start で起動 JSON か byteData で往復 事前コンパイル済み kernel(.dill)を実⾏ CFE Turing 完全。使える core library は限定 コンパイル‧Hot Reload augmentation を返す それぞれが別の macro 実装を持つ 既存の宣⾔へ⾜すソース pkg/_macros/lib/src/executor/(SDK 3.6.0) Dart SDK 3.6.0:macros executor · macros 仕様(実⾏⽅式‧段階設計) ① Types 新しい型 ② Declarations 宣⾔ ③ Definitions 本体 前段の⽣成物を、後段が読める
  16. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 macros の設計:Dartで書いた⽣成処理を、別 isolate で⾛らせる ホスト(2 系統) 別 isolate か別プロセス 3 段階で情報を確定 kernel に事前コンパイル macro = 普通の Dart プログラム analyzer IDE‧静的解析‧補完 introspection の RPC Isolate.spawnUri か Process.start で起動 JSON か byteData で往復 事前コンパイル済み kernel(.dill)を実⾏ CFE Turing 完全。使える core library は限定 コンパイル‧Hot Reload augmentation を返す それぞれが別の macro 実装を持つ 既存の宣⾔へ⾜すソース pkg/_macros/lib/src/executor/(SDK 3.6.0) Dart SDK 3.6.0:macros executor · macros 仕様(実⾏⽅式‧段階設計) ① Types 新しい型 ② Declarations 宣⾔ ③ Definitions 本体 前段の⽣成物を、後段が読める
  17. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 macros の設計:Dartで書いた⽣成処理を、別 isolate で⾛らせる ホスト(2 系統) 別 isolate か別プロセス 3 段階で情報を確定 kernel に事前コンパイル macro = 普通の Dart プログラム analyzer IDE‧静的解析‧補完 introspection の RPC Isolate.spawnUri か Process.start で起動 JSON か byteData で往復 事前コンパイル済み kernel(.dill)を実⾏ CFE Turing 完全。使える core library は限定 コンパイル‧Hot Reload augmentation を返す それぞれが別の macro 実装を持つ 既存の宣⾔へ⾜すソース pkg/_macros/lib/src/executor/(SDK 3.6.0) Dart SDK 3.6.0:macros executor · macros 仕様(実⾏⽅式‧段階設計) ① Types 新しい型 ② Declarations 宣⾔ ③ Definitions 本体 前段の⽣成物を、後段が読める
  18. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 macros の設計:Dartで書いた⽣成処理を、別 isolate で⾛らせる ホスト(2 系統) 別 isolate か別プロセス 3 段階で情報を確定 kernel に事前コンパイル macro = 普通の Dart プログラム analyzer IDE‧静的解析‧補完 introspection の RPC Isolate.spawnUri か Process.start で起動 JSON か byteData で往復 事前コンパイル済み kernel(.dill)を実⾏ CFE Turing 完全。使える core library は限定 コンパイル‧Hot Reload augmentation を返す それぞれが別の macro 実装を持つ 既存の宣⾔へ⾜すソース pkg/_macros/lib/src/executor/(SDK 3.6.0) ① Types 新しい型 ② Declarations 宣⾔ ③ Definitions 本体 前段の⽣成物を、後段が読める 2021-06 試作 → Dart 3.3 実験フラグ → 2024-05 JsonCodable プレビュー 問い合わせはホストへ RPC、結果は augmentation で返す。3 年間この構造だった Dart SDK 3.6.0:macros executor · macros 仕様(実⾏⽅式‧段階設計)
  19. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 なぜ遅かったか? 変更に伴う再処理 ① キャッシュの確認‧再コンパイル ソースの変更 API変更が利⽤側へ波及 ② 影響を受けるmacroを再実⾏ ③ 結果をマージ 事前コンパイル済み macro を 変更したライブラリに augmentation を 1 つにまとめ 再利⽤できるか判定し、 直接‧間接に依存するライブラリの 解析‧補完‧コンパイルへ渡す だめなら作り直す 全 macro(型の調査込み) 2系統の ホスト analyzer:編集中の解析 CFE:Hot Reload時のコンパイル CFE: _invalidatePrecompiledMacros #55784:数百で「複数秒」 影響は適⽤数に線形ではなかった 増分コンパイル=Hot Reload の初段 analyzer は 1 ⽂字ごとに処理 (Bob Nystrom、HN 2025-01-30) David Morgan 2026-01 Hot Reload はミリ秒で測る。公式の回帰ベンチ数値は未公開 dart-lang/sdk #55784(2024-05)· CFE incremental_compiler.dart · David Morgan 2026-01-05 #1482 · Bob Nystrom HN 2025-01-30
  20. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 なぜ遅かったか? 変更に伴う再処理 ① キャッシュの確認‧再コンパイル ソースの変更 API変更が利⽤側へ波及 ② 影響を受けるmacroを再実⾏ ③ 結果をマージ 事前コンパイル済み macro を 変更したライブラリに augmentation を 1 つにまとめ 再利⽤できるか判定し、 直接‧間接に依存するライブラリの 解析‧補完‧コンパイルへ渡す だめなら作り直す 全 macro(型の調査込み) 2系統の ホスト analyzer:編集中の解析 CFE:Hot Reload時のコンパイル CFE: _invalidatePrecompiledMacros #55784:数百で「複数秒」 影響は適⽤数に線形ではなかった 増分コンパイル=Hot Reload の初段 analyzer は 1 ⽂字ごとに処理 (Bob Nystrom、HN 2025-01-30) David Morgan 2026-01 Hot Reload はミリ秒で測る。公式の回帰ベンチ数値は未公開 dart-lang/sdk #55784(2024-05)· CFE incremental_compiler.dart · David Morgan 2026-01-05 #1482 · Bob Nystrom HN 2025-01-30
  21. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 なぜ遅かったか? 変更に伴う再処理 ① キャッシュの確認‧再コンパイル ソースの変更 API変更が利⽤側へ波及 ② 影響を受けるmacroを再実⾏ ③ 結果をマージ 事前コンパイル済み macro を 変更したライブラリに augmentation を 1 つにまとめ 再利⽤できるか判定し、 直接‧間接に依存するライブラリの 解析‧補完‧コンパイルへ渡す だめなら作り直す 全 macro(型の調査込み) 2系統の ホスト analyzer:編集中の解析 CFE:Hot Reload時のコンパイル CFE: _invalidatePrecompiledMacros #55784:数百で「複数秒」 影響は適⽤数に線形ではなかった 増分コンパイル=Hot Reload の初段 analyzer は 1 ⽂字ごとに処理 (Bob Nystrom、HN 2025-01-30) David Morgan 2026-01 Hot Reload はミリ秒で測る。公式の回帰ベンチ数値は未公開 dart-lang/sdk #55784(2024-05)· CFE incremental_compiler.dart · David Morgan 2026-01-05 #1482 · Bob Nystrom HN 2025-01-30
  22. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 なぜ遅かったか? 変更に伴う再処理 ① キャッシュの確認‧再コンパイル ソースの変更 API変更が利⽤側へ波及 ② 影響を受けるmacroを再実⾏ ③ 結果をマージ 事前コンパイル済み macro を 変更したライブラリに augmentation を 1 つにまとめ 再利⽤できるか判定し、 直接‧間接に依存するライブラリの 解析‧補完‧コンパイルへ渡す だめなら作り直す 全 macro(型の調査込み) 2系統の ホスト analyzer:編集中の解析 CFE:Hot Reload時のコンパイル CFE: _invalidatePrecompiledMacros #55784:数百で「複数秒」 影響は適⽤数に線形ではなかった 増分コンパイル=Hot Reload の初段 analyzer は 1 ⽂字ごとに処理 (Bob Nystrom、HN 2025-01-30) David Morgan 2026-01 Hot Reload はミリ秒で測る。公式の回帰ベンチ数値は未公開 dart-lang/sdk #55784(2024-05)· CFE incremental_compiler.dart · David Morgan 2026-01-05 #1482 · Bob Nystrom HN 2025-01-30
  23. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 なぜ遅かったか? 変更に伴う再処理 ① キャッシュの確認‧再コンパイル ソースの変更 API変更が利⽤側へ波及 ② 影響を受けるmacroを再実⾏ ③ 結果をマージ 事前コンパイル済み macro を 変更したライブラリに augmentation を 1 つにまとめ 再利⽤できるか判定し、 直接‧間接に依存するライブラリの 解析‧補完‧コンパイルへ渡す だめなら作り直す 全 macro(型の調査込み) 2系統の ホスト analyzer:編集中の解析 CFE:Hot Reload時のコンパイル CFE: _invalidatePrecompiledMacros #55784:数百で「複数秒」 影響は適⽤数に線形ではなかった 増分コンパイル=Hot Reload の初段 analyzer は 1 ⽂字ごとに処理 (Bob Nystrom、HN 2025-01-30) David Morgan 2026-01 Hot Reload はミリ秒で測る。公式の回帰ベンチ数値は未公開 再実⾏が広く波及し、IDEとコンパイラの両⽅でコストがかかった dart-lang/sdk #55784(2024-05)· CFE incremental_compiler.dart · David Morgan 2026-01-05 #1482 · Bob Nystrom HN 2025-01-30
  24. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2025-01-29:中⽌で消えたものと、残った 3 つの投資先 Our current implementation regresses both editing (e.g., static analysis and code completion) and incremental compilation (the first step of a hot reload). 代わりにやること その後(2026-10時点) build_runner の改善 同⽇に #3800 起票 → 2.5 / 2.10 / 2.13 / 2.14 / 2.17 augmentations 仕様 v1.47 を改訂中。未リリース データの表現 primary constructors が 3.13 で stable 2025-01-29 公式告知
  25. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2025-01-29:中⽌で消えたものと、残った 3 つの投資先 Our current implementation regresses both editing (e.g., static analysis and code completion) and incremental compilation (the first step of a hot reload). 代わりにやること その後(2026-10時点) build_runner の改善 同⽇に #3800 起票 → 2.5 / 2.10 / 2.13 / 2.14 / 2.17 augmentations 仕様 v1.47 を改訂中。未リリース データの表現 primary constructors が 3.13 で stable 2025-01-29 公式告知
  26. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2025-01-29:中⽌で消えたものと、残った 3 つの投資先 Our current implementation regresses both editing (e.g., static analysis and code completion) and incremental compilation (the first step of a hot reload). 代わりにやること その後(2026-10時点) build_runner の改善 同⽇に #3800 起票 → 2.5 / 2.10 / 2.13 / 2.14 / 2.17 augmentations 仕様 v1.47 を改訂中。未リリース データの表現 primary constructors が 3.13 で stable 2025-01-29 公式告知
  27. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2025-01-29:中⽌で消えたものと、残った 3 つの投資先 Our current implementation regresses both editing (e.g., static analysis and code completion) and incremental compilation (the first step of a hot reload). 代わりにやること その後(2026-10時点) build_runner の改善 同⽇に #3800 起票 → 2.5 / 2.10 / 2.13 / 2.14 / 2.17 augmentations 仕様 v1.47 を改訂中。未リリース データの表現 primary constructors が 3.13 で stable 2025-01-29 公式告知
  28. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 2025-01-29:中⽌で消えたものと、残った 3 つの投資先 Our current implementation regresses both editing (e.g., static analysis and code completion) and incremental compilation (the first step of a hot reload). 代わりにやること その後(2026-10時点) build_runner の改善 同⽇に #3800 起票 → 2.5 / 2.10 / 2.13 / 2.14 / 2.17 augmentations 仕様 v1.47 を改訂中。未リリース データの表現 primary constructors が 3.13 で stable 求める品質と応答速度に、いつ到達できるか⾒えなくなった 2025-01-29 公式告知
  29. DART / CODE GENERATION 05 / 2026 現在:runner と analyzer

    の改善 2025-01-29 の告知と、その後に残ったもの。 FlutterKaigi 2026
  30. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner の内側:build を打つたびに起きること for (var i = 0; i != primaryInputs.length; ++i) { outputs.addAll(await _buildForPrimaryInput(...)); // 逐次・1 isolate } final _driverPool = Pool(1); // analyzerへの入口は1本 byteStore ??= MemoryByteStore(); // 解析結果はプロセス内だけ await _graphLoader.libraryCycleGraphOf(loader, entry); // 依存先を全部読む build は毎回、import の先を全部読み直して、解析をやり直す watch はプロセスを維持し、メモリ上の解析状態を再利⽤できる build_runner 2.15.1 / analyzer 9.0.0
  31. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 原⽂:scalability of analyzer-based generators as the codebase grows(#3800、David Morgan) コードベースが育ったときの、analyzer ベース ジェネレーター のスケーラビリティ。macros 中⽌と同じ⽇に起 票 build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  32. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 #3811 クローズ時(2025-07-07)の本⼈計測。500 files の json_serializable で初回 28→13 秒、増分 28→9 秒 重複する解析をなくしただけで半分以下になった。並列化はしていない build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  33. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 原⽂:improve scalability with the number of library cycles(2.10.3、2025-11-14) library cycle の数に対するスケーラビリティを改善。2.10.0(2025-10-20)で builder を AOT 実⾏に build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  34. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 原⽂:speedup of between 1.4x for small initial builds to 4x for large incremental builds(2.13.0、 2026-03-17) 訳:⼩さな初回で 1.4 倍、⼤きな増分で 4 倍。2.14.0 は「増分 2 倍」と AOT 既定。倍率は開発者の本⼈計測 build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  35. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 原⽂:builders using Add to Library can see added source from earlier build phases using analysis(2.17 docs) 前の phase が⾜したソースを、後の builder が解析で読める。macros にあった「⽣成物を次の⽣成が読む」能 ⼒にあたる build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  36. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 中⽌の後:issue と changelog で追う 2025‒26 2025-01-29 2025-06 2025-10 2026-03/04 2026-10 #3800「Faster dev 2.5:重複解析の排 2.10:builder の 2.13 / 2.14:公開 2.17:前の phase cycle」起票。中⽌ 除。500 files で初 AOT、library cycle ベンチ1.4〜4倍、 が⾜したソースを 当⽇ 回 28→13秒 の改善 読める新 API AOT 既定 原⽂:builders using Add to Library can see added source from earlier build phases using analysis(2.17 docs) 前の phase が⾜したソースを、後の builder が解析で読める。macros にあった「⽣成物を次の⽣成が読む」能 ⼒にあたる 並列化ではなく、重複をなくし、再解析が必要な範囲を減らした build_runner CHANGELOG · #1189(並列化) · #3811(500ファイル実測)
  37. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 analyzer の世代交代は、augmentations の準備 ⽇付 analyzer ジェネレーターへの影響 2025-04 7.4:element model v1 を⾮推奨 「augmentations のため」 2025-07 8.0:v1 を削除 主要ジェネレーターが同⽇に⼀⻫移⾏ 2025-10〜 9.0 → 14.0 8 か⽉でメジャー 6 回 analyzer CHANGELOG · 移⾏ガイド
  38. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 analyzer の世代交代は、augmentations の準備 ⽇付 analyzer ジェネレーターへの影響 2025-04 7.4:element model v1 を⾮推奨 「augmentations のため」 2025-07 8.0:v1 を削除 主要ジェネレーターが同⽇に⼀⻫移⾏ 2025-10〜 9.0 → 14.0 8 か⽉でメジャー 6 回 analyzer CHANGELOG · 移⾏ガイド
  39. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 analyzer の世代交代は、augmentations の準備 ⽇付 analyzer ジェネレーターへの影響 2025-04 7.4:element model v1 を⾮推奨 「augmentations のため」 2025-07 8.0:v1 を削除 主要ジェネレーターが同⽇に⼀⻫移⾏ 2025-10〜 9.0 → 14.0 8 か⽉でメジャー 6 回 analyzer CHANGELOG · 移⾏ガイド
  40. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 analyzer の世代交代は、augmentations の準備 ⽇付 analyzer ジェネレーターへの影響 2025-04 7.4:element model v1 を⾮推奨 「augmentations のため」 2025-07 8.0:v1 を削除 主要ジェネレーターが同⽇に⼀⻫移⾏ 2025-10〜 9.0 → 14.0 8 か⽉でメジャー 6 回 ジェネレーターが新しいanalyzerに対応しているかも、更新するときの確認点 analyzer CHANGELOG · 移⾏ガイド
  41. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 Dartの構⽂で、短く書けるようになったこと enum Status { ready, busy } Status s = .ready; // 3.10 dot shorthands class Profile(final String name); // 3.13 primary constructor 機能 状態 減らすもの dot shorthands 3.10 stable ⽂脈で明らかな型名 primary constructors 3.13 stable フィールド‧引数‧代⼊の反復 augmentations 未 stable(実験フラグ 3.6〜) ⽣成物を既存の宣⾔に継ぎ⾜す⼿間 Dart 3.13 公式発表 · dot shorthands · augmentations 仕様
  42. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 Dartの構⽂で、短く書けるようになったこと enum Status { ready, busy } Status s = .ready; // 3.10 dot shorthands class Profile(final String name); // 3.13 primary constructor 機能 状態 減らすもの dot shorthands 3.10 stable ⽂脈で明らかな型名 primary constructors 3.13 stable フィールド‧引数‧代⼊の反復 augmentations 未 stable(実験フラグ 3.6〜) ⽣成物を既存の宣⾔に継ぎ⾜す⼿間 Dart 3.13 公式発表 · dot shorthands · augmentations 仕様
  43. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 Dartの構⽂で、短く書けるようになったこと enum Status { ready, busy } Status s = .ready; // 3.10 dot shorthands class Profile(final String name); // 3.13 primary constructor 機能 状態 減らすもの dot shorthands 3.10 stable ⽂脈で明らかな型名 primary constructors 3.13 stable フィールド‧引数‧代⼊の反復 augmentations 未 stable(実験フラグ 3.6〜) ⽣成物を既存の宣⾔に継ぎ⾜す⼿間 Dart 3.13 公式発表 · dot shorthands · augmentations 仕様
  44. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 Dartの構⽂で、短く書けるようになったこと enum Status { ready, busy } Status s = .ready; // 3.10 dot shorthands class Profile(final String name); // 3.13 primary constructor 機能 状態 減らすもの dot shorthands 3.10 stable ⽂脈で明らかな型名 primary constructors 3.13 stable フィールド‧引数‧代⼊の反復 augmentations 未 stable(実験フラグ 3.6〜) ⽣成物を既存の宣⾔に継ぎ⾜す⼿間 == や toJson までは付いてこない。⽣成は残る Dart 3.13 公式発表 · dot shorthands · augmentations 仕様
  45. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner以外の選択肢 候補 前提 lean_builder 1.2.2 ジェネレーターを専⽤ API に移植する前提。独⾃の解析器と isolate 並列 macro_kit 0.8.2 IDE plugin + 常駐 server。⾔語 macros とは別物 genq Go 製 CLI。Dart の⼀部だけを解析 lean_builder README · macro_kit README · genq README
  46. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner以外の選択肢 候補 前提 lean_builder 1.2.2 ジェネレーターを専⽤ API に移植する前提。独⾃の解析器と isolate 並列 macro_kit 0.8.2 IDE plugin + 常駐 server。⾔語 macros とは別物 genq Go 製 CLI。Dart の⼀部だけを解析 lean_builder README · macro_kit README · genq README
  47. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner以外の選択肢 候補 前提 lean_builder 1.2.2 ジェネレーターを専⽤ API に移植する前提。独⾃の解析器と isolate 並列 macro_kit 0.8.2 IDE plugin + 常駐 server。⾔語 macros とは別物 genq Go 製 CLI。Dart の⼀部だけを解析 lean_builder README · macro_kit README · genq README
  48. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 build_runner以外の選択肢 候補 前提 lean_builder 1.2.2 ジェネレーターを専⽤ API に移植する前提。独⾃の解析器と isolate 並列 macro_kit 0.8.2 IDE plugin + 常駐 server。⾔語 macros とは別物 genq Go 製 CLI。Dart の⼀部だけを解析 互換性や速度、保守、CIなどの観点から選ぶ lean_builder README · macro_kit README · genq README
  49. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  50. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  51. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  52. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  53. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  54. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  55. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  56. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  57. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る augmentations 仕様 · writing_builders.md · 2026 roadmap
  58. 2012 mirrors ‧ 2016 build_runner ‧ 2021 提案 ‧ 2024

    macros ‧ 2025 中⽌ ‧ 2026 現在 コード⽣成の未来はどうなる? macrosが⽬指したこと ① 宣⾔を⾜す(augmentation) ② ⽣成した宣⾔を次の⽣成が読む ③ 解析をコンパイラと共有する ⾔語 augmentations 仕様 v1.47 を改訂中。2026 年のリリース⽬標、SDK 版は未定 build_runner 2.17 の LibrarySourceSink:前の phase が⾜したソースを解析で読める analyzer 解析情報の再利⽤を改善中。コンパイラとの共有とは別 ④ IDE と⼀体の⽣成 未解決。⽣成コードを辿らない go-to-definition の要望が残る build_runnerでは⽣成処理が、analyzerでは解析処理が改善されている augmentations 仕様 · writing_builders.md · 2026 roadmap