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

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

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

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

本頁は、上記のうちの、「How to use / Install」の章の翻訳および解説頁になります。

2.How to use(利用手順)

「Freezed」を使用するためのインストールと設定についてです。

2-1.Install(インストール)

Freezedを使用するには、通常のbuild_runner(ビルドランナー)とコードジェネレータのセットアップが必要です。
まず、build_runnerとFreezedをpubspec.yamlファイルに追加してインストールします。

Flutterプロジェクトの場合:
以下のコマンドを実行して、必要なパッケージを追加します。

Dart
flutter pub add dev:build_runner
flutter pub add dev:freezed
flutter pub add freezed_annotation
# fromJson/toJsonを生成する場合は、以下も追加:
flutter pub add json_annotation
flutter pub add dev:json_serializable

インストールされるパッケージ

  • build_runner: コード生成ツールを実行するためのツールです。
  • freezed: データクラス、ユニオンクラス、シーライズ可能なクラスを生成するためのコードジェネレーターです。
  • freezed_annotation: Freezedで使用されるアノテーションを含むパッケージです。

補足) json_annotationjson_serializable

fromJson/toJsonメソッドを生成する場合、json_annotationjson_serializableも追加する必要があります。
これらは、JSONのシリアライゼーションとデシリアライゼーションを自動で行うために必要なパッケージです。

この手順に従って正しくパッケージを設定することで、Freezedを利用して効率的にコードを生成し、開発プロセスを加速させることが可能です。

補足)metaパッケージ依存関係でエラー発生時の対応

次のエラーは、metaパッケージが(暗黙的にFlutter SDK が(強制的に)ver1.2に固定依存していることが原因で)他のパッケージと依存関係で矛盾を起こしている場合に発生します。

metaパッケージとの依存関係の問題発生:
>flutter pub get
Resolving dependencies... (1.0s)
Note: meta is pinned to version 1.12.0 by flutter from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.


Because analyzer >=6.5.1 depends on meta ^1.15.0 and analyzer >=6.5.0 <6.5.1 depends on meta ^1.14.0, analyzer >=6.5.0 requires meta ^1.14.0.
And because riverpod_generator >=2.4.2 <3.0.0-dev.2 depends on analyzer ^6.5.0 and every version of flutter from sdk depends on meta 1.12.0, riverpod_generator >=2.4.2 <3.0.0-dev.2 is incompatible  
  with flutter from sdk.
So, because taskapp03 depends on both flutter from sdk and riverpod_generator ^2.4.2, version solving failed.

もしこの制約を解除する場合は、pubspec.yamlで、meta(ver1.2.0)固定という制約を、依存関係のオーバーライド: dependency_overrides セクションを pubspec.yaml に追加して、SDKのバージョン制約を無視することができます。
これにより、特定のバージョンの meta をプロジェクトで使うことが可能になりますが、他のパッケージとの互換性に影響を与える場合があります。

pubspec.yaml(meta(ver1.2)固定制約解除設定追加):
dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.8
  path: ^1.9.0
  sqflite: ^2.3.3+1
  sqflite_common_ffi: ^2.3.3
  flutter_riverpod: ^2.5.1
  riverpod_annotation: ^2.3.5
  freezed_annotation: ^2.4.4
  json_annotation: ^4.9.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  # The "flutter_lints" package below contains a set of recommended lints to
  # encourage good coding practices. The lint set provided by the package is
  # activated in the `analysis_options.yaml` file located at the root of your
  # package. See that file for information about deactivating specific lint
  # rules and activating additional ones.
  flutter_lints: ^4.0.0
  riverpod_generator: ^2.4.2
  build_runner: ^2.4.11
  custom_lint: ^0.6.4
  riverpod_lint: ^2.3.12
  freezed: ^2.5.7
  json_serializable: ^6.8.0

dependency_overrides:  //追加
  meta: ^1.15.0        //追加
  
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true  

上記設定により、依存関係の問題は解消しました(以下)。

上記設定により依存関係が解消しました(以下):
>flutter pub get
Resolving dependencies... 
Downloading packages... 
  _fe_analyzer_shared 68.0.0 (73.0.0 available)
  analyzer 6.5.0 (6.8.0 available)
  build_runner 2.4.11 (2.4.12 available)
  build_runner_core 7.3.1 (7.3.2 available)
  collection 1.18.0 (1.19.0 available)
  http_parser 4.0.2 (4.1.0 available)
  leak_tracker 10.0.4 (10.0.5 available)
  leak_tracker_flutter_testing 3.0.3 (3.0.5 available)
  macros 0.1.0-main.0 (0.1.2-main.4 available)
  material_color_utilities 0.8.0 (0.12.0 available)
! meta 1.15.0 (overridden)
  rxdart 0.27.7 (0.28.0 available)
  shelf 1.4.1 (1.4.2 available)
  string_scanner 1.2.0 (1.3.0 available)
  test_api 0.7.0 (0.7.3 available)
  vm_service 14.2.1 (14.2.4 available)
  web 0.5.1 (1.0.0 available)
Got dependencies!
16 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.

generatedファイルのinvalid_annotation_target警告を無効にする

Freezedをjson_serializableと組み合わせて使用する際の設定とコード生成の手順です。

次のエラー発生時の話題です。(発生場所は、analysis_options.yamlファイル)

PROBLEMS:(invalid_annotation_target への警告)
'invalid_annotation_target' is not a recognized lint rule.
Try using the name of a recognized lint rule.

json_serializableと組み合わせてFreezedを使用する場合、最新のjson_serializablemetaパッケージでは、invalid_annotation_target警告を無効にする必要があるかもしれません。

これを行うには、プロジェクトのルートにあるanalysis_options.yamlファイルに以下の設定を追加します:

analysis_options.yaml:
include: package:flutter_lints/flutter.yaml

linter:

  rules:
    errors:
      invalid_annotation_target:  ignore  # Freezed,json_serializable 使用時警告無視

(続きの記事はこちら)

コメントを残す