はじめに
7月から4ヶ月間Flutterでアプリ開発を行いました。
リリースが終わり、振り返りを含めて良かったこと、大変だったことをまとめようと思います。
うまくいったとは言えないので、未だに困っていることやダメだよってところの指摘とかあったら嬉しいです。
これからFlutter開発しようと思う人で、自分のケースだとどんなことが活かせたかとかもサンプルとして参考にしていただけたら幸いです。
チーム体制
不動産系のスマホアプリで、チームとしてはテスターさん含めて7人くらいの構成です。
チームメンバー全員、はじめて触るFlutterということで調べながら試行錯誤、手探りで行っていました。
iOSエンジニア→Flutterで活かせたこと
自分は元々iOSのモバイルエンジニアで5年ほど経験がありました。
スクラッチでの開発やリリース経験はあったのでその点はFlutterでのモバイル開発でも活かせるなと感じました。
あと前提知識として活かせたものは
・プッシュ通知(リモート)
・Firebase関連
・アプリ起動時のアプリ全体(システムの)ライフサイクルの理解
・MVVMの知識(今回の場合)
etc....
プッシュ通知
プッシュ通知はFirebaseのCloud Messagingを使いました。
CloudFunctionsで、CloudFireStoreに保存や削除がかかったタイミングや新しくユーザー作成したタイミングに通知を飛ばしています。
リモート通知の導入のための各OSごとの設定やinfo.plistのような必要なファイルは同じなのでここも良かったです。
ただ、後述しますがもちろん違って新しい作業もあります。
Firebase
ここは案件によって違うと思いますが、今回の場合はAnalyticsや上記のプッシュ通知、DBやテストアプリ配信などもFirebaseを利用したのですが、今までのモバイルアプリ開発とここも同じでした。
なんだか書いてると当たり前だよなと思いつつ、実装前は不安なところでした。
ライフサイクル
ライフサイクルは画面ごとのものと、システムのライフサイクルがあって、呼ばれる回数が違うものなどはありましたが、概念は一緒というか同じスマホなのでそこはすんなりいけました。(すんなりと言いつつ最後らへんに手間取られました。。)
2021/12/16 追記
iOS側のだけとりあえず簡単に記事にしました。
FlutterでシステムのアプリライフサイクルをSwiftで書いた
MVVM
アーキテクチャは今回MVVM + Clean Architectureを目指して開発しました。
Riverpodがええぞ(ハナホジ)ということだったので脳死で利用することにしましたが、やりたいことはわかりました。
もう一度言います。やりたいことは。笑
後々になって、共通のproviderにしておいた方が良かったなど反省点や改修が必要になりました。
Rx系やったことある人とかAndroidエンジニアの方は比較的入りやすいのかなと思います。
その他
あとはAtomic Designも取り入れてUIパーツを作成とかもしようと努力した(結局最初に決めきれずうまく利用できていない)のですが、概念自体はiOSだとXibファイルにボタンなどのパーツを切り出していくことがあるのでそこもとっつきやすやはありました。
利用ライブラリ
実際に利用したライブラリとこれ良かったなっていうのを補足していきます。(ちょっと後で)
cupertino_icons
# Firebase関連
firebase_core
firebase_auth
firebase_messaging
firebase_analytics
cloud_firestore
firebase_remote_configRemote Config
flutter_svg # fluttergen 使ってるから必要なかった
carousel_slider
http
http_interceptor
flutter_riverpod
shared_preferences
freezed_annotation
flutter_sliding_tutorial
url_launcher
auto_size_text
flutter_inappwebview
package_info
uni_links
expandable
flutter_dotenv
dotted_line
google_fonts
flutter_local_notifications
flutter_localizations
intl
flutter_native_splash
clock
logger
tuple
in_app_review
adjust_sdk
app_tracking_transparency
flutter_launcher_icons
share
maps_launcher
google_maps_flutter
flutter_typeahead
scrollable_positioned_list
lint
mockito
build_runner
freezed
json_serializable
良かったこと
個人のモチベーションとしては、Flutterに興味があり、だいぶ好きなように作らせてもらったのでよかったです。
開発的には、クロスプラットフォームの恩恵はあったと思います。
Cordova+Angularの開発もしたことがありますが、意外とSafariやChromeのブラウザによるバグの影響や、HTML,CSS、javascriptによるOS差分があったりしました。
Flutterの場合、natveプラグイン以外で大きな差分みたいのはなかった印象です。(プロジェクトの規模とかも違うので比較対象にならないといえばならないですが。。)
大変だったこと
かなりドキュメントや不具合に対する記事が多くなっとはいえ、当時SwiftやKotlinに比べると手探り感はありました。
あとは、自分含めてFlutter経験者が0だったので、進めていく上での妥当性を考えたり本当に良いのか不安になりながらやったところが大変でした。
最後に
すみません、いつものようにギリギリになって投稿を思い出して中途半端な状態で出すことをお許しください。。
Flutter、dart楽しいからやっていけたとこはあります。
また自分は業務的には離れてしまいそうですが、個人でも続けて勉強していけたらなと思います。