はじめに
Flutterでの開発では、データクラスの管理や更新が頻繁に発生します。freezed
パッケージを使用することで、型安全かつシンプルなデータクラスを効率的に作成でき、メンテナンス性も向上します。本記事では、freezed
パッケージの導入から基本的なデータクラス作成方法、JSON対応までを解説します。
freezedパッケージとは?
freezed
パッケージは、Flutterで型安全なデータクラスを簡単に作成するためのツールです。従来のデータクラスを手作業で書く手間が省け、copyWith
やtoString
、hashCode
などの基本機能が自動で提供されます。
導入手順
まず、freezed
パッケージとbuild_runner
をプロジェクトに追加します。
-
pubspec.yaml
に以下を追加して依存関係を設定します。dependencies: freezed_annotation: ^2.0.0 dev_dependencies: build_runner: ^2.0.0 freezed: ^2.0.0
-
依存関係をインストールし、
build_runner
でコード生成します。flutter pub get flutter pub run build_runner build --delete-conflicting-outputs
データクラスの作成方法
freezed
を使って、シンプルなデータクラスを作成してみましょう。
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user.freezed.dart';
@freezed
class User with _$User {
const factory User({
required String name,
required int age,
String? email,
}) = _User;
}
ポイント解説
-
@freezed
アノテーションをクラスに追加すると、データクラスの機能が有効になります。 -
User
クラスにcopyWith
やtoString
などの基本的な機能が自動で追加されます。 -
String? email
のように、オプショナルなプロパティも簡単に扱えます。
データのコピーを簡単に行う copyWith
データの一部だけを更新したいときは、copyWith
メソッドが便利です。freezed
で自動生成されるcopyWith
を使用すると、新しいオブジェクトを生成しながら一部のデータだけを変更できます。
void main() {
final user = User(name: "John", age: 25);
final updatedUser = user.copyWith(age: 26);
print(updatedUser); // User(name: "John", age: 26)
}
このように、データの一部のみ変更しつつ、新しいインスタンスを作成できます。
JSONのシリアライズ・デシリアライズ対応
APIと連携する際には、データをJSON形式でやり取りする必要があります。freezed
とjson_serializable
を組み合わせることで、JSONシリアライズ・デシリアライズが簡単に行えます。
-
pubspec.yaml
にjson_serializable
を追加します。dependencies: json_annotation: ^4.0.1
-
User
クラスにfromJson
およびtoJson
を追加します。import 'package:freezed_annotation/freezed_annotation.dart'; part 'user.freezed.dart'; part 'user.g.dart'; @freezed class User with _$User { const factory User({ required String name, required int age, String? email, }) = _User; factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); }
-
build_runner
を再度実行して、JSONメソッドを含むコードを生成します。flutter pub run build_runner build
これで、User
クラスのインスタンスをJSONに変換したり、JSONからインスタンスを生成したりできます。
使用例
void main() {
// JSONからインスタンスを生成
final json = {'name': 'John', 'age': 25};
final user = User.fromJson(json);
// インスタンスからJSONを生成
print(user.toJson()); // {name: "John", age: 25, email: null}
}
まとめ
freezed
パッケージを使えば、型安全で保守性の高いデータクラスを簡単に作成できます。copyWith
やJSON対応など、freezedの基本機能を活用することで、より効率的にFlutterアプリを開発できるでしょう。ぜひ試してみてください!