収支管理アプリは、収支を簡単に管理できる家計簿のようなアプリです。余計な機能はできるだけ取り除き、必要な機能のみに絞ることでシンプルなアプリに仕上げました。
機能は、カレンダーによる収支の一覧画面、通帳のように収支を一覧で確認できる画面、グラフによる収支の推移がわかる画面、バックアップ機能やタグ仕訳など。
Flutterを使用したため、iOSとAndroid両方一度に開発することができました。iOSとAndroidで若干挙動が異なるところはありましたが、各プラットフォームでネイティブ開発していたこともあり、それほど苦労することもなくリリースできました。
まず、初めてFlutterを使ってみた感想は、ライブラリが充実していてUIの構築がとても簡単にできること、欲しいと思ったライブラリが既に用意されているので、爆速で開発できる点です。そして、ホットリロードによりコードの更新がリアルタイムに反映できる点もすばらしいと思いました。
アーキテクチャは、レイヤードアーキテクチャを採用しました。これは、UI層→アプリケーション層→ドメイン層→インフラストラクチャ層のように各層で、ロジックを分離する方法です。UI層からインフラストラクチャ層のように依存関係を一方向にすることで、各層の影響を限定的にすることが可能です。
例えば、インフラ層にデータベース入出力するロジックを実装した場合で考えます。テスト時だけデータベースを書き換えたいというケースにおいて、データベースの入出力するロジックをDIで入れ替えるということが簡単にできるわけです。
今回使用したライブラリなどは、状態管理にRiverpod、SQLiteへのアクセスdrift、リリース後の管理にFirebase、サブスクリプションの管理にRevenueCatを使用しました。
初めてサブスクリプションの実装にあたって、Firebaseで処理するか迷いましたが、iOSとAndroid両方に対応するのが少し面倒だったことや、サーバ側でデータをなるべく持ちたくなかったこともあり、RevenueCatを使うことにしました。
RevenueCatはサブスクリプション以外のアプリ内課金を管理するのにも便利そうです。月間$2,500までは無料で使えます。(それ以降は1%の手数料とのこと)
Flutterの開発部門の人員削減の話など出ているのが少し不安なところです。あとは、ライブラリについても更新されていないパッケージなども見かけますので、メリットとデメリットを考えて採用するのがよさそうです。