最近、3ヶ月ほどでFlutterの学習&アプリ開発して、Google Play Storeにリリースしました。
このときに利用したパッケージについて、簡単にまとめて紹介しておきたいと思います。
Dart、Flutterのバージョン
開発時のバージョンは以下です。
Dart: >=2.18 Flutter: >=3.3.0
プログラミング
Freezed(個人的オススメ度:★★★★★)
Freezedは、Dart/Flutter界隈ではかなり有名なパッケージの一つかと思います。
データクラスを作成する際のボイラープレートコードを生成してくれるため、データクラスを手軽に作成することができます。
Javaなどで言うところのLombokのような立ち位置でしょうか。
JSONとのシリアライズ/デシリアライズも、Factoryコンストラクタを追加するだけで自動生成してくれます。
Riverpod(個人的オススメ度:★★★★★)
Riverpodは、公式で「リアクティブ・キャッシングとデータバインディングを実現するフレームワーク」と紹介されるパッケージです。
簡単にいえば、それぞれの状態管理をStatefulWidgetで直接おこなうのではなく、状態(State)をProviderでラップしてWidgetの外に出すことができるようになります。
複雑なUIにおいては、Widgetの組み合わせも複雑になり、そこに状態管理が散らばっていることで状態管理自体も複雑になります。それをRiverpodを利用することで完結に状態管理をすることができるようになります。
go_router(個人的オススメ度:★★★★☆)
URLベースの画面遷移を実装できるパッケージです。
Navigator 2.0 と呼ばれるAPIをより簡単に利用できるようにしたものです。
現状でいくつかの課題もあるとのことで、改善の検討もされているようですが、シンプルな画面遷移においては便利かと思います。
get_it(個人的オススメ度:★★★★☆)
get_itはサービスロケーターのパッケージです。
DIのような用途で使います。
一般的なDIとは異なり、自身でオブジェクトの登録などが必要です。
ただし、登録をするタイミングや登録する場所を適切に設定できれば、大きくないアプリの開発であれば、依存関係の複雑性やテスト時の変更などがしやすくなるので、DIの代わりとして利用することもできるかと思います。
fpdart(個人的オススメ度:★★★☆☆)
Dartで関数プログラミングをしたい際に使うパッケージです。
いわゆるOptionalやEitherなどが提供されています。
今回は、非同期処理で例外を扱う際にEitherを利用したいために導入しました。
関数プログラミングやりたいときや、非同期処理で例外をうまく扱いたいときなどには有用かなと思います。
オーディオ再生
just_audio(個人的オススメ度:★★★★☆)
オーディオプレイヤーのパッケージです。
一般的なオーディオプレイヤーに必要な機能は一通り提供されています。
オーディオ再生機能を利用するときに、プレイヤー機能まで作りたいというときにはかなり便利かと思います。
ただ、やや使いこなすのは難しいので、単に再生するだけであれば、他のパッケージも検討してよいかと思います。
audio_service(個人的オススメ度:★★★★★)
audio_service | Flutter Package
オーディオ再生などをラップして、アプリがバックグラウンドになっても、Androidの通知領域やiOSのコントロールセンター、ウェアラブルデバイスとのやり取りなどができるようにするプラグインパッケージです。
今回はjust_audioと組み合わせて使いましたが、繋ぎ込みさえできれば、他のパッケージや自前のカスタム機能に対しても利用できます。
データストア
shared_preferences(個人的オススメ度:★★★★☆)
shared_preferences | Flutter Package
AndroidやiOSなどのプラットフォーム固有のアプリごとの永続化ストレージへのアクセス機能をラップして提供するパッケージです。
アプリ開発をしていると、スマホ自体にちょっとしたデータを永続化して保存しておきたいことはよくあるかと思います。そういった場合に、プラットフォームごとに個別の実装を作る必要がないため、便利かと思います。
アプリ作成補助
package_info_plus(個人的オススメ度:★★★★☆)
package_info_plus | Flutter Package
アプリの情報を取得することができるパッケージです。
アプリ名やバージョンなどを取得できます。
また、 showLicensePage
といった関数呼び出しをするだけで、ライセンスの一覧ページを生成できたりします。
flutter_native_splash(個人的オススメ度:★★★★★)
flutter_native_splash | Flutter Package
簡単にスプラッシュスクリーンを実装できるパッケージです。
画像と簡単な設定の準備をして、コマンドを実行するだけで実装できます。
プラットフォームごとに実装するなどしなくて良いため、非常に楽に対応できます。
flutter_launcher_icons(個人的オススメ度:★★★★★)
flutter_launcher_icons | Dart Package
アプリアイコンをプラットフォーム個別で対応せずに実装できます。
まとめ
Flutterは便利なパッケージが多くあるため、困ったときに簡単に対応できたり、それなりの機能をプラットフォーム固有の実装をせずに対応できるので、スピード感をもって開発できるので良いですね。
Flutter 3 から対象のプラットフォームの幅も広がり、アプリ開発以外でも活用される事例がでてくると面白そうですね。