dart-code-generation について
Dart パッケージで build_runner を使ってコードを生成するためのスキルです。開発、CI ビルド、テストでのコマンド選択や、生成ファイルの管理、出力競合への対処を説明します。
主な機能
- 01build_runner の依存関係設定
- 02watch、build、test コマンドの選択
- 03生成ファイルのバージョン管理方針
- 04ビルド出力の競合解決
活用シーン
- 01開発中のコード再生成
- 02CI やリリースでのコード生成
- 03テスト用ファイルの生成
- 04競合するビルド出力の解消
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dart-lang/ skills --skill dart-code-generationインストール後、Claude Code で/dart-code-generationを入力して読み込まれたか確認します。
詳細
Build Runner による Dart コードの生成
目次
セットアップと設定
Dart のビルドシステムを使用するパッケージ(例:json_serializable、built_value_generator)のコード生成を処理するように、build_runner を設定します。
必要なパッケージを pubspec.yaml の dev_dependencies に追加します。生成されたコードに依存するテストを作成する場合にのみ、build_test を含めてください。
注:Web 固有の開発とサービングについては、dart-web-development スキルを参照し、build_runner serve の代わりに webdev ツールを使用してください。
注:テスト戦略については、dart-testing スキルを参照してください。
基本的なコマンド
Dart CLI から build_runner コマンドを実行します。次の条件に基づいて、適切なコマンドを選択してください。
- ローカルで開発している場合:
watchを使用して、入力ファイルを監視し、差分ビルドを自動的に実行する常駐ビルドサーバーを起動します。開発作業中は、この方法を推奨します。 - CI/CD パイプラインを実行する場合、または最終リリースビルドを行う場合:
buildを使用して、厳密なビルドを一度だけ実行します。 - 生成されたコードを必要とするテストを実行する場合:
testを使用して、生成されたアセットをコンパイルし、テストスイートを実行します。 - Web アプリケーションをビルドする場合:
build_runner serveを使用するのではなく、サービングをwebdev serveに任せます。
バージョン管理ポリシー
生成ファイル(通常は .g.dart、.freezed.dart、または .part.dart)に関するプロジェクトのリポジトリポリシーに基づいて、条件に応じて対応します。
- プロジェクトのポリシーでオンザフライ生成が必要な場合: 生成ファイルをコミットしないでください。
.gitignoreファイルに*.g.dart(およびその他の生成ファイルの拡張子)を追加します。 - プロジェクトのポリシーで生成コードのキャッシュが必要な場合: 生成ファイルをコミットし、CI パイプラインで生成ファイルがソース入力と一致していることを検証します。
ワークフロー:継続的な開発
コード生成が必要な通常の機能開発では、このワークフローを使用します。
タスクの進行状況
-
dart pub getを実行して、すべてのビルダー依存関係が解決されていることを確認します。 - 専用のターミナルプロセスで
dart run build_runner watchを実行します。 - ソースファイルを変更します(例:
@JsonSerializable()アノテーションを追加します)。 - ウォッチャーが変更を検出し、生成ファイルを正常に出力することを確認します。
- ウォッチャーの出力にあるエラーを確認し、ソースのアノテーションを修正して、ウォッチャーが正常に再ビルドすることを確認します。
ワークフロー:ビルドの競合の解決
既存の生成ファイル、または以前のビルド実行による出力の競合が原因で build_runner が失敗した場合は、このワークフローを使用します。
タスクの進行状況
- ビルド出力で
ConflictingOutputsExceptionまたは同様のエラーを特定します。 - 実行中の
watchプロセスをすべて終了します。 - 競合を解決するフラグを付けて、ビルドコマンドを実行します:
dart run build_runner build --delete-conflicting-outputs。 - ビルドが正常に完了することを確認します。
- 継続的な開発のために
watchプロセスを再起動します。
例
依存関係のセットアップ
# pubspec.yaml
dev_dependencies:
build_runner: ^2.4.0
build_test: ^3.2.0 # Optional: Include if testing generated code
json_serializable: ^8.0.0 # Example builder
コマンドの実行
継続的な生成を開始する(開発時に推奨):
dart run build_runner watch
競合する出力を削除してクリーンビルドを強制する:
dart run build_runner build --delete-conflicting-outputs
生成コードを使用してテストを実行する:
dart run build_runner test