【Flutter】build_runner 2.11.0 がリリースされたので解説してみた

Dart

概要

どうも、@daiki1003です!

さぁ、build_runner 2.11.0がリリースされましたね!

今回の目玉は--workspaceフラグ。モノレポで複数パッケージを管理している方、朗報ですよ。各パッケージに移動してビルドコマンドを叩くあの面倒な作業、もうやらなくてよくなるかもしれません。

それでは早速行ってみましょー!

概要図解

–workspaceフラグとは

--workspaceフラグを使うと、ワークスペース内のすべてのパッケージを一度にビルド・ウォッチできます。

実験的機能として追加されたものなので、今後変更される可能性はありますが、モノレポユーザーにはかなり嬉しい機能ですね。

従来の方法との比較

まず従来の方法を見てみましょう。複数パッケージがある場合、こんな感じでやってましたよね。

# package_aでビルド
cd packages/package_a
dart run build_runner build

# package_bでビルド
cd ../package_b
dart run build_runner build

# package_cでビルド
cd ../package_c
dart run build_runner build

# ...延々と続く

パッケージが増えるたびにコマンドも増える。CIスクリプトも複雑になる。なかなかつらいものがありました。

それが--workspaceフラグを使うとこうなります。

# ワークスペースルートから一発!
dart run build_runner build --workspace

これだけ。シンプル!!!

watchコマンドも同様です。

dart run build_runner watch --workspace

何が嬉しいのか

この機能の利点を整理してみましょう。

1. 操作がシンプル

複数パッケージを管理するモノレポで、1コマンドで全パッケージをビルドできます。もうディレクトリを行ったり来たりする必要はありません。

2. 効率的なビルド

パッケージ間の依存関係を考慮した最適化されたビルドが期待できます。

3. 統一された出力

.dart_tool/buildなどの出力がワークスペースルートに集約されます。どこに何が出力されたか迷うことがなくなりますね。

4. 一貫したログ

ログにパッケージ名が常に表示されるようになります。どのパッケージの出力なのかが明確になるので、デバッグもしやすくなりますね。

技術的な詳細

PR #4331を見ると、いくつか興味深いポイントがあります。

  • ワークスペース内の全パッケージに必要なビルダーのファクトリをエントリポイントに含める
  • ビルダーの自動適用ロジックが改善されている(あるパッケージの追加で他パッケージに意図しないビルダーが適用されないよう制御)
  • watchモードではワークスペースルートのbuild.yaml変更も監視される

どんな場面で使える?

この機能が活きる場面をいくつか挙げてみます。

Dartモノレポ

複数の相互依存パッケージを持つプロジェクト。これが一番の想定ユースケースですね。

大規模プロジェクト

機能ごとにパッケージを分割している場合。feature_a、feature_b…みたいな構成のプロジェクトです。

CI/CD

ビルドスクリプトがシンプルになります。1コマンドで済むので、CIの設定もスッキリしますね。

サポート状況

現時点でサポートされているコマンドは以下の通りです。

コマンドサポート
build✅ 対応
watch✅ 対応
serve🔜 検討中
daemon❌ 未対応
run❌ 未対応
test❌ 未対応

serveは今後追加が検討されているようです。

注意点

この機能は実験的機能です。フィードバックに基づいて変更される可能性があることは頭に入れておきましょう。

使ってみて何か気づいたことがあれば、GitHubのDiscussion #4349でフィードバックを送れます。Dart/Flutterチームも積極的に意見を求めているようなので、モノレポユーザーの方はぜひ声を届けてみてください。

まとめ

いかがでしたか?

--workspaceフラグ、モノレポでbuild_runnerを使っている方には待望の機能ではないでしょうか。まだ実験的機能ではありますが、早速試してみる価値はあると思います。

モノレポ運用の参考になれば幸いです!

誰かのお役に立てば。

Twitterフォローお願いします

「次回以降も記事を読んでみたい!」
「この辺分からなかったから質問したい!」

そんな時は、是非Twitter (@daiki1003)Instagram (@ashdik_flutter)のフォローお願いします♪

Twitterコミュニティ参加お願いします

Twitterコミュニティ「Flutter lovers」を開設しました!
参加お待ちしております😁

☕️ Buy me a coffee

また、記事がとても役に立ったと思う人は
コーヒーを奢っていただけると非常に嬉しいです!
@daiki1003

コメント

タイトルとURLをコピーしました