[読書会]freezed 2.5.7 翻訳及び補足(How to use / Run the generator)

freezedは、データクラス、ユニオン(合併型)、およびクローニング用のコードジェネレーターです。
これはDartプログラミング言語におけるモデル定義を簡単にするために設計されています。

Note(注釈)
現在、Freezedのマクロを使用した初期プレビュー版が利用可能です。
詳細については、GitHubのリンク https://github.com/rrousselGit/freezed/tree/macros を参照してください。

本ブログの(上記https://pub.dev/packages/freezedの)翻訳および解説の目次頁(構成上のトップページ)は次のURLになります。

また前回記事は、こちらになります。

本頁は、上記(目次)のうちの、「How to use / Run the generator」の章の翻訳および解説頁になります。

2-2.Run the generator(ジェネレータの実行)

Freezedのコードジェネレータを実行するには、次のコマンドを実行します:

Freezedのコードジェネレータを実行:
dart run build_runner build

ほとんどのコードジェネレーターと同様に、Freezed では注釈 (freezed_annotation) をインポートすることと、ファイルの先頭で part キーワードを使用することの両方が必要であることに注意してください。 そのため、Freezed を使用するファイルは次で始まります。

(Freezed を使用するファイルの冒頭)
import 'package:freezed_annotation/freezed_annotation.dart';

part 'my_file.freezed.dart';

package:flutter/foundation.dartもインポートすることを検討してください。 なぜなら、foundation.dartをインポートすると、Flutterのdevtoolでオブジェクトをきれいに読めるようにするためのクラスもインポートされるからです。 foundation.dartをインポートすると、Freezedが自動的にインポートしてくれます。

結果:
>dart run build_runner build
Building package executable... (5.0s)
Built build_runner:build_runner.
[INFO] Generating build script completed, took 582ms
[INFO] Precompiling build script... completed, took 5.8s
[INFO] Building new asset graph completed, took 1.5s
[INFO] Checking for unexpected pre-existing outputs. completed, took 2ms
[INFO] Generating SDK summary completed, took 8.3s
[INFO] Running build completed, took 27.3s
[INFO] Caching finalized dependency graph completed, took 135ms
[INFO] Succeeded after 27.5s with 84 outputs (193 actions)

このコマンドを実行することで、定義されたモデルに基づいて必要なコードが自動的に生成されます。

補足)2回目以降のbuild_runner実行時エラー対応手順

2回目以降のbuild_runner実行時に、次のエラーが発生する場合があります。

2回目以降のbuild_runner実行時エラー:
>dart run build_runner build
Building package executable... (4.9s)
Built build_runner:build_runner.
[INFO] Generating build script completed, took 416ms
[INFO] Precompiling build script... completed, took 5.3s
[INFO] Building new asset graph completed, took 1.4s
[INFO] Found 2 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.        
Delete these files?
1 - Delete
2 - Cancel build
3 - List conflicts
//ここで処理が停止して完了していない場合があります

このメッセージは、build_runnerが実行されたときに、すでに生成されているファイル(出力)が見つかったことを示しています。これは、以前にbuild_runnerを実行したときに生成されたファイルが残っているか、あるいは.dart_tool/buildフォルダが削除された後に何らかの方法で再生成されたファイルが存在する場合に発生します。

メッセージにある選択肢は次のような意味です:

  • Delete – 既存の生成ファイルを削除して、新しいビルドを実行します。これにより、新たなコード生成が行われ、古いファイルは新しいもので上書きされます。
  • Cancel build – ビルドプロセスをキャンセルし、何も変更せずに終了します。
  • List conflicts – 現在のディレクトリに存在し、コンフリクトしている生成ファイルのリストを表示します。これを選択すると、どのファイルが問題を引き起こしているか具体的に確認することができます。

この状況を解決するためには、通常は以下の手順を実行します:

  • 既存の生成ファイルを削除する(1を選択):これは最も一般的な解決策です。生成されたファイルを削除し、build_runnerを再実行して、すべてのファイルを最新のソースコードに基づいて再生成します。
  • コンフリクトしているファイルを確認する(3を選択):どのファイルが問題を引き起こしているのか具体的に知りたい場合に便利です。ファイルを確認した後、手動で削除するか、あるいは問題が解決するような別のアプローチを取ることができます。

この状況でコマンドライン上で応答が必要な場合は、適切な番号を入力して進める必要があります。どう進めるか決定するためには、プロジェクトの現状や、変更をどのように管理しているかによります。生成されたファイルをソース管理に含めている場合は特に慎重に進める必要があります。

Note(注釈)

Freezedや他の多くのコードジェネレーターと同様に、Freezedを使用する際は、アノテーションをインポートし(freezed_annotation)、ファイルの先頭にpartキーワードを使用する必要があります。

Freezedを使用するファイルは以下のように始まるべきです:

Freezedを使用するファイルの冒頭:
import 'package:freezed_annotation/freezed_annotation.dart';
part 'my_file.freezed.dart'; //@freezed用

part 'my_file.g.dart'; //@riverpod用
参考) 上記 part コードで参照しているファイルについて

example.freezed.dart:
 このファイルには、freezed パッケージによって生成されます。
 イミュータブルなデータクラスその他のユーティリティコードが含まれます。
example.g.dart:
 このファイルには、json_serializable パッケージによって生成されます。
 シリアライゼーションとデシリアライゼーション用のコードが含まれます。

Note(注釈)

package:flutter/foundation.dartをインポートすることも検討してください。
これにより、foundation.dartがインポートされ、Flutterのdevtoolでオブジェクトがより読みやすく表示されるクラスが利用可能になります。
foundation.dartをインポートすると、Freezedは自動的にこの操作を行うため、開発者はこれを手動で行う必要がなくなります。
これらの手順に従うことで、Freezedを効果的に使用し、開発プロセスをよりスムーズに進めることができます。

(続きの記事はこちら)

コメントを残す