🥶

Flutterでの開発を加速させる「Freezed」パッケージ紹介

2024/03/31に公開

Freezedとは?

Freezedは、Flutter開発において、イミュータブルなデータクラスを簡単に作成できるようにするパッケージです。イミュータブルなデータクラスとは、一度作成されたらその内容を変更できないクラスのことを指します。これにより、バグを減らし、アプリケーションの安定性を高めることができます。

Freezedのメリット

開発しながら思ったのは、以下2つです

  • コード生成: Freezedは、少ないコードで多くのボイラープレート(繰り返し記述が必要なコード)を生成します。これにより、開発者はビジネスロジックに集中できるようになります。
  • イミュータビリティ: 生成されたクラスは変更不可能で、安全な状態管理ができます。
  • コピー操作copyWithメソッドが自動生成されるため、既存のインスタンスをコピーして一部プロパティを変更するのが簡単です。
  • JSONシリアライゼーションtoJson()fromJson()メソッドが自動生成されるため、JSONとの相互変換が容易です。
  • 比較操作==演算子とHashCode生成も自動で行われ、コレクション操作(add,deleteなど)が簡単に行えます。

これらの機能により、Freezedを使うことで、安全性の高い、メンテナンス性の良いコードを簡単に書くことができます。

Freezedの導入方法

  1. pubspec.yamlファイルに以下の依存関係を追加します。

    dependencies:
      flutter:
        sdk: flutter
      freezed_annotation: ^[最新バージョン]
    
    dev_dependencies:
      build_runner: ^[最新バージョン]
      freezed: ^[最新バージョン]
    
  2. 依存関係をインストールした後、Freezedを使用してデータクラスを定義します。

  3. コマンドラインでdart pub run build_runner buildを実行し、Freezedによるコード生成を行います。すでにファイルを自動生成済みで、追加でデータクラスをfreezedで生成したい場合、オプションで--delete-conflicting-outputsを行末につけます。(dart run build_runner build --delete-conflicting-outputs

Freezedの使用例

Userデータモデルの作成

以下は、Freezedを使用してユーザーのデータモデルを定義する例です。

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user.freezed.dart'; // モデルの比較、コピー、不変性の機能を提供するファイル
part 'user.g.dart'; // JSONのシリアライズ/デシリアライズを提供するファイル


class User with _$User {
  const factory User({
    required String id,
    required String name,
    required int age,
  }) = _User;
}

この例では、Userクラスにidnameageの3つのプロパティが定義されています。Freezedを使用することで、このクラスのイミュータブルなインスタンスを簡単に生成できます。

データモデルの使用

次に、**main.dartなどのファイルでこのUser**クラスを使ってみましょう。

import 'user.dart';

void main() {
  // Userインスタンスの作成
  final user = User(id: '1', name: 'Spider man', age: 30);

  // ユーザー情報の表示
  print('User ID: ${user.id}');
  print('User Name: ${user.name}');
  print('User Age: ${user.age}');

  // FreezedによるcopyWithメソッドを使ったユーザーデータの更新
  final updatedUser = user.copyWith(name: 'Iron man');

  // 更新後のユーザー情報の表示
  print('Updated User Name: ${updatedUser.name}');
}

この例では、まずUserデータモデルをインポートしています。その後、Userクラスのインスタンスを作成し、そのプロパティをコンソールに表示しています。copyWithメソッドを使用して、ユーザー名を変更した新しいUserインスタンスを生成し、その変更を確認しています。

上記のmain関数を実行すると、以下のような出力が得られます。

User ID: 1
User Name: Spider man
User Age: 30
Updated User Name: Iron man

まとめ

Freezedは、Flutterでの開発効率を高める強力なツールです。イミュータブルなデータクラスの生成を簡単にし、コードの安全性とメンテナンス性を向上させます。

Flutter開発において、より効率的で安全なコードを書きたい方には、Freezedの使用をお勧めします!

Discussion