トップ7のFlutterステート管理ライブラリ

Flutterフレームワークを使うと、AndroidとiOSのモバイルアプリを高性能かつ高品質で作ることができます。Flutterは、Googleが提供するポータブルUIツールキットで、一つのコードベースからモバイル、ウェブ、デスクトップアプリを作れます。全世界の組織や開発者に使われていて、オープンソースで無料であることが最大の特長です。

StatefulまたはStatelessなウィジェットがこのツールキットで主に表示されますが、他のフレームワークほど状態管理やアーキテクチャ設計を包括的には扱いません。Flutterでの状態管理の方法はいくつかあり、それぞれにコミュニティが異なる解決策を提供しています。

Flutterの状態管理


Flutterアプリ開発では状態管理が非常に重要です。これは、ユーザーが行うUIの変更を把握する方法です。ウェブ、デスクトップ、モバイルアプリの管理がこれに依存しています。Flutterの状態管理ライブラリを使えば、データと情報の同期が簡単になります。

状態変更のタイプにかかわらず、Flutterの状態管理ライブラリを使うとアプリの構築と管理がラクになります。開発者は、Flutterの宣言型プログラミングスタイルを用いてユーザーインターフェースを一から設計し、アプリの状態をUIに合わせて更新できます。

Flutterのアーキテクチャは状態管理に自己完結しています。小規模なアプリを開発する場合、多くの状態遷移がない限り、状態管理ライブラリを避けることもよくあります。しかし、複雑なFlutterアプリを開発する場合は、状態管理ライブラリを使う方が良い選択です。2022年に最も人気のある7つのFlutterステート管理ライブラリを見ていきましょう。

トップ7のFlutterステート管理ライブラリ


Flutterの状態管理ライブラリを使えば、状態の変更がどのようなものであっても、アプリの開発と管理がしやすくなります。Flutterでは宣言型のプログラミング構造を使用して、アプリの状態への変更を反映します。2022年に人気のあるFlutterの状態管理ライブラリは以下のとおりです。

1. BLoC

Flutterの状態管理のオプションの一つに、Googleが推奨し、最もポピュラーなアプローチの一つであるBlocパターン(ビジネスロジックコンポーネント)があります。Blocパターンの名前が示すように、すべてのFlutterアプリケーションロジックをビジネスロジックコンポーネントというシングルコンポーネントに分けることができます。

Blocsは通常、Flutterアプリケーションの各画面に割り当てられます。このアプローチを使うと、プレゼンテーションコードとビジネスロジックを分けて、テストや再利用を簡単にすることができます。開発者は、統一されたパターンと規約を使用して同じコードベースで効率良く作業できます。

Bloc/RXRxとは、BLoCとリデューサーパターンを組み合わせたものです。リデューサーは、現在の状態とアクションを引数に取り、新しい状態としての結果を返す関数として定義することができます。

2. InheritedWidget

Flutterは、状態管理を簡単にするために継承ウィジェットを提供しています。継承クラスにより、他のクラスがツリー内の情報にアクセスできるようになります。ウィジェットはツリーの上部に作られ、あらゆるアプリに相互運用性を追加します。子クラスごとにコードをタイプする必要がなく、InheritedWidgetのコンビニエンスクラスを使って状態を下に渡すことができます。InheritedWidgetを使った状態遷移はツリーの上のウィジェットには影響を与えません。なぜならそれはツリーで最も低いレベルのウィジェットだからです。

3. Provider

Providerパッケージは、InheritedWidgetsをより使いやすく、再利用可能にするためのラッパーです。InheritedWidgetをより簡単に使いたい人にとってこのパッケージは有益です。Blocパッケージ内のProviderクラスによって、ウィジェットツリーのオブジェクトが内部で提供され、アクセスされます。また、Triple、ValueNotifier、ChangeNotifierなどの他の状態オブジェクトと一緒にproviderを使うことができます。

4. Riverpod

Providerと同じ作者によって開発されたRiverpodは、InheritedWidgetsを一から再実装したものです。Providerの開発中に作者がいくつかの問題に直面したため、Riverpodではそれらの問題を排除しています。

Providerを使用する際に開発者が直面するいくつかの課題があるため、ライブラリの作成者はそれらの懸念に対処するために開発しました。InheritedWidgetは、シンプルで使いやすい方法で再実装されています。Providerよりも最近で使用されている頻度は少ないですが、最近実験段階を脱出しました。

Riverpodは、ランタイムまで待つのではなく、コンパイル時にコーディングエラーを特定します。Riverpodによって、アプリのオブジェクトがデフォルトでFlutterのDevToolに表示され、アプリがよりスケーラブルになります。さらに、複雑なオブジェクトグラフを簡素化し、Flutterから独立したパターンを作ります。

5. MobX

公式ドキュメントで定義されている通り、MobXはリアクティブなデータをユーザーインターフェースに接続する簡単な方法を表しています。MobXは、いくつかの単純そうな方法でバックグラウンドで作業を行ないますが、いくつかのキーコンセプトと用語を理解する必要があります。MobXは、観測可能、行動、反応の3つの主要なコンセプトに基づいています。

MobXでは、状態管理ライブラリを使って、リアクティブなデータを簡単にUIに接続できます。その自動性にも関わらず、この配線は非常に自然に感じます。UI開発者は、リアクティブなデータが何を消費する必要があるのか純粋に集中することができ、これら二つのものを同期させる心配をしなくても良くなります。

6. GetX

GetXは、Flutter用の軽量で迅速かつ安定した状態管理ライブラリです。Flutterでは、MobX、BLoC、Redux、Providerなど他の状態管理ライブラリがあります。

GetXを使えば依存性注入も行うことができます。GetXは強力なミニフレームワークです。アプリケーション内で情報を伝えるために状態管理を使い、情報が伝えられるたびにアプリケーションの状態が更新され、アプリケーションが再構築されます。

7. Cube

Cubeは、Flutterのための状態管理ライブラリで、コード生成を必要とせずに依存性注入を使用します。これは、状態管理ライブラリのリストの中で最新のものです。プロジェクトは比較的新しく、すべてのFlutterユーザーに知られているわけではありません。Flutterが初めての人でも、このアプローチは比較的理解しやすいです。それ以外にも、必要に応じてウィジェットツリーを再構築することで、状態管理を客観的に単純化し、コードの複雑さを減らします。

新しいユーザーにとって、Cubeは非常に直感的で、人気を集めています。オブジェクト指向の状態管理がアプリケーションの焦点です。その結果、必要なときにのみウィジェットツリーが再構築され、コーディングの複雑さを減らします。

_関連記事を読む: MVP開発のためのFlutter - なぜ最良の選択なのか?_​

締めくくりに


正しいFlutter状態管理ライブラリを選ぶことは、それを使うことと同じくらい重要です。複雑なボイラープレートコードの代わりにシンプルな状態遷移を使用することで、開発者の貴重な時間を節約できます。アプリの要件に基づいて、状態管理ライブラリを選ぶべきです。

Flutterでアプリを作成する必要がある場合は、これ以上探す必要はありません。今日、私たちのチームとミーティングをスケジュールしてください。あなたの夢のアプリケーションを一緒に作りましょう!

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/solutelabs/top-7-flutter-state-management-libraries-f6