8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FlutterAdvent Calendar 2021

Day 8

Flutter開発を4ヶ月ほどやっての振り返り

Last updated at Posted at 2021-12-08

はじめに

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楽しいからやっていけたとこはあります。
また自分は業務的には離れてしまいそうですが、個人でも続けて勉強していけたらなと思います。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?