📱

フルスクラッチ開発をFlutterで開始した

2023/06/16に公開

大体1年半前から仕事でFlutterを本格的に使っている(数年前もちょっと使っていた)ので、そのあたりで記事を書こうと思っています
基本的にはFlutter中心の技術記事なりますが、ちょこちょこそうじゃない箇所もあるかもしれないですが、許してください

なお、技術的な部分以外はすべてフィクションなので、「あれ、今自分がいるチームと似ている・・・?」というのはすべて勘違いです

まとめ

  • Flutter自体は良いものだった
    • 特に、開幕は開発メンバーが少なかったので、1つのコードで2つのOSで動かせる分、開発工数が効果的に減らせた
    • OSごとの動作差分が(開発している限りでは)出てこなかったので、そこで無駄に工数がかかることはなかった
  • とは言え、各OSの知識はいる箇所はある
  • バッケージも充実している(開発中で困ることはなかった)ので、今後の開発でも採用価値はあると思う

何作っているの?

業務をサポートするスマホアプリです
よく知られていそうなサービスで一番近い例を上げると、ウーバーイーツの配達員向けのアプリが近いものになります(使ったこと無いけど)
開発するOSはAndroid、iOSの両方になります

何使って開発しているの?

アプリはFlutterで開発しています
この1年間の間でも、正式サポートを開始したOSが色々追加されていたりと、結構話題性高めでした(今でもホットだと思います)

使っているパッケージ

パッケージはよくあるものばかりを使っています
その例を上げると↓になります

  • riverpod
    • 状態管理できるパッケージ
  • freezed
    • modelのテンプレを作ってくれる
  • intl
    • 日付や数値等、様々なフォーマットを提供する
  • logger
    • logをもっといい感じに表示する
  • firebase_core
    • firebaseとのやり取りをする時に必要になるパッケージ
    • firebase_crashlyticsを使っているので、↑も必要

他にも使っているパッケージはいっぱいありますが、開発しているアプリの仕様に大きく依存するものなので、ここでは割愛します
アプリの仕様に依存するやつでもOKなので知りたいという需要があったら追加するかもしれないです

アーキテクチャ

色々模索した結果、MVPにしました
理由は↓になります

  • エンジニアがかなり少人数なので、ディレクトリやファイルを増えづらいアーキテクチャがいい
    • クリーンアーキテクチャやVIPERがこの時点で却下
  • フルスクラッチ+少人数なので、最初からいきなり大規模な開発にはならない
    • 小規模でもやりやすいアーキテクチャを採用したい

実際、Flutter使ってどうだったのか?

結果的には良い選択だったと思います
何より、1つのコードでAndroid、iOSどちらも対応できることが強かったです
単純にKotlin、Swiftでそれぞれ書く必要が無いので、その分開発コストが減るのもありますが、使ってみて見えたのは以下になります

公式のドキュメントが充実している

公式ドキュメントで導入や各Widgetの使い方、APIなど、いろんなドキュメントがあります
動画なども用意されているので、いろんなアプローチでFlutterを理解することが出来ます

デザインや細かい動作など差分を意識しなくて良い

AndroidとiOSの開発が別だと、Androidはボタン押した瞬間に見た目が変わるのに、iOSはちょっと時間が経ってから変わるみたいなやつです
1つのコードで動かしているので、基本的にはAndroidが動いたら、同じ様にiOSも動きます
通知の許可など、OSに依存する処理は無理なところがあるが、ビジネスロジックで動作に差が出ることはありませんでした
特定のOSと機種の組み合わせで差が出ることがあるらしいですが、まだ出くわしてないです

思っていたよりもOS、ハードなどでの動作差分がなかった

前述とかぶるところがありますが、通話アプリ起動や輝度の変更など、どうしてもOSや機種に依存しそうな箇所で差が出ると思っていました
唯一見つけた差分と言えば、キーボードの種類です
テキストなどを入力する時、表示するキーボードは種類がいくつかあります
キーボードアプリによって、-が同じ種類でも入力できたりできなかったりしていました
このあたりはOS標準のキーボードはどうなるか確認したほうが良いかもしれません
ちなみに、OSやハードで差分出るだろうなと思って、テストは基本的に実動作で行ってテストコードを使わなかったことは後悔しています

パッケージが豊富なので、大抵は困らない

「〇〇したいからFlutter APIを見たけどなかった、パッケージあるかな、あったわ」というノリで大抵解決します
ここからパッケージを探します
似たようなパッケージがあったら、各パッケージにあるScoresやパッケージの使い方、Google検索したときの件数で判断しました
基本的にはどの開発でも使えるパッケージばかりですが、使っているiPhoneの機種名を取得するパッケージなど、特定のOSに尖ったパッケージもあります

各OSの知識はいる

Flutterのアーキテクチャにもある通り、独自の方法で画面描画や処理を行います
なので、基本的にはFlutterのWidgetやAPI、Dartの言語仕様さえ把握していれば、開発は進められます
ですが、ビルド設定や通知や写真などの許可設定は、各OSの設定が必要になるので、この部分は各OSの知識が必要です
まだ開発したことが無いので未知数ですが、デスクトップやWebもそういった知識が必要になってくると思います

Flutterで開発し始める価値はあるのか?

全然あると思います
ですが、例えば以下のような場合はFlutterを採用する価値が低くなると思います

  • OS固有の機能がアプリの根幹になる場合(FlutterはOS固有の機能を扱えないので、それぞれで作る必要がある)
  • 最新のOSがリリースされてから、そのOSでもできる限り早くサポートを行えることの重要性が高め(Flutter自身がそのOSに対応しているかの確認が必要)

今後のFlutter本体の動向でも価値が変わって来ますが、現状は開発で使うほど価値が元からないレベルまで価値がいきなり下がることは無いと思います

カラビナテクノロジー デベロッパーブログ

Discussion