iOS/Androidアプリ「HistBet」をリリースしました🎉
— hisurga | Flutter開発 (@hisurga) November 9, 2020
競馬の収支を "見やすく" 管理できます!
月間成績やグラフで振り返ることもできるので、競馬が好きな方はぜひともインストールしてみてください✨https://t.co/2BvXRWdVD5https://t.co/OIuFtrmSC4 pic.twitter.com/ziD0KIYhEv
個人開発として終業後と土日を利用してコツコツ実装していたモバイルアプリですが、ようやく公開することができました。
アプリの目的からして対象ユーザーは限られますが、もし競馬が趣味であればぜひとも試していただきたいです。
さて、初版リリースを達成したところで、HistBetを作成するまでに利用した技術やサービスを共有したいと思います。
なお、「アプリの目的」や「作った理由」などは主題と異なるので割愛します。
使った技術やサービス
- Flutter
- Firebase
- Firestore
- Cloud Functions for Firebase
- Codemagic + GitHub
Flutter
HistBetはiOS/Android両プラットフォーム向けにリリースしていますが、それを可能にしたのはFlutterのおかげです。間違いない。
多少のコード分岐はありますが、8-9割を共通のコードで作成できています。
この効率性は個人開発するなら間違いなく採用候補になると思います。
また、FlutterのUI作成はイメージをサクサクとコードに落とし込めるので気持ちがいいです。いわゆる宣言的UIフレームワークってやつですね。
(意識せずともマテリアルデザインを実現できる点もとても好きです)
ただFlutterもFlutterで利用するpackageも破壊的変更が多いので、その点をデメリットに感じる方はいるかもしれません。
アプリ設計
定番のChangeNotifier + Provider です。
シンプルに書けそうですし、ある程度規模が大きくなっても問題ない手法と考えて採用しました。
実際学習コスト少なめに苦もなく進められたので間違ってはいなかったと思います。
Flutterは進化が早いので、この設計に固執せずにいたいとは思います。
Firebase
- ユーザのアカウント管理 (Firebase Auth + Firestore)
- Googleサインイン
- Appleサインイン
- 匿名認証
- ユーザーデータ管理 (Firebase Auth + Firestore)
- 収支管理
- 馬券管理
- 課金管理 (Firebase Auth + Firestore + Cloud Functions)
- 課金データ管理
- 課金レシートの認証
これら全てでFirebaseを利用しています。それぞれの詳細については割愛(多分別記事)します。
Firebaseがなければ個人で上記機能の実装は相当大変だと思います。
FlutterとFirebaseの相性が良く、情報もそれなりにあったのでハマりポイントは少なめでした。
Codemagic
元々Flutter向けに作られたCI/CDサービスとのこと。
個人開発でCI/CDが必要かと疑問に思われるかもしれませんが、
「一度設定すれば以降のアップデートはGitHubにpushするだけでストアへバイナリアップまでしてくれる」
このメリットだけでも採用価値があると思います。
ストアアップ作業は地味に面倒なので、とても快適になりました。
正直今はテストコードをほとんど書いていないのでストアアップ専用になっていますが、いずれテストコードをしっかり書いてCodemagic上のクリーンな環境でテストするシステムを構築したいです。
気になる点として、Firebaseを利用したFlutterアプリだとビルドがめちゃくちゃ遅いです。タイムアウト60分設定だと結構な頻度でオーバーするので90分に設定しています。
無料プランだと月間500minまでなので、頻度次第では足りなくなりそうです。
つまりFlutter + Firebaseサイッキョ
私見ですが、個人開発でiOS/AndroidアプリをリリースするのであればFlutter + Firebaseは間違いなく候補になります。
思い描いたデザインや仕様をサクサク形にできる体験はたまりません。
今後のプラン
実はHistBetの機能は、私が本来実装したい機能の一部しか実装できていません。
アプリとして成り立つレベルを1.0.0として公開しました。
そのためしばらくはHistBetの機能拡充を目標に開発を進めていくつもりです。
並行して、今回の開発で得た知見を本ブログに記録し、これからFlutter/Firebase開発を頑張る人の役に立てればなと思います。