FlutterKaigi 2022登壇報告と当社モバイルアプリ開発におけるクロスプラットフォーム事情
リサーチ・アンド・イノベーションの高田(tfandkusu)です。Androidエンジニアをやっています。2022年11月16日(水)から18日(金)の3日間に渡って行われたFlutterKaigi 2022で登壇しました。この記事ではその報告と、それに関連して当社モバイルアプリ開発におけるクロスプラットフォーム事情を紹介します。
発表内容
発表タイトルは「Flutterアプリの安全な変化と拡大を支えるアーキテクチャと単体テスト」です。
プロポーザルにあるとおり、Android公式のアーキテクチャガイドと、PEAKSから出版されている「チームで育てるAndroidアプリ設計」を主な引用元として、変化を続けるFlutterアプリのアーキテクチャや単体テストを解説する基礎的な内容の発表でした。なぜAndroidの情報をFlutterに適用したかというと、Flutterの公式ドキュメントには推奨アーキテクチャが無いですが、モバイルアプリのアーキテクチャはAndroidとFlutterでほぼ同じ考え方が使えるからです。
当社のAndroidアプリ開発体制との関連
当社では現在Flutterは使っていません。しかし今回の発表で紹介した内容はすべて当社のAndroidアプリ開発で取り入れている施策です。一部紹介するとこのような施策を行っています。
- パッケージ配置やクラス、メソッド名などの命名規則をチームの共通認識とする
- 人によって書き方が違う箇所は定例会議の議題にする。
- UIレイヤ、データレイヤだけでなく、任意追加のドメインレイヤも作る。
- Codecovで単体テストの作成抜けを可視化する。
当社のFlutter事情
先ほど当社ではFlutterを使っていないと説明しました。しかし将来に渡ってFlutterを使うことがないとは言えないです。ビジネスの展開によっては新たなアプリを作る可能性があります。そのときの要件やメンバーのバックグランドを考慮して、Flutterがベストな選択と判断したらFlutterを使います。CODEについても今後の状況次第ではソースコード共通化のためにFlutterのApp-to-appを導入する可能性もあります。(可能性の話であり具体的な話にはなっていないです。)
当社のKotlin Multiplatform Mobile事情
iOS/Androidコード共通化の文脈では、Kotlin Multiplatform Mobile(KMM)がよくFlutterと比較されます。
- Flutterは見た目の部分まで共通化できる。
- KMMは状態ホルダ(またはドメインレイヤ)より下の層を共通化して、見た目の部分はiOS/Androidネイティブ(例えばSwiftUI/Jetpack Compose)で記載する。
といった違いがあります。
つい最近まで、もしCODEでiOS/Androidのコード共通化を考えるならば、FlutterのApp-to-appではなくて、KMMだと思っていました。理由としては広告のための外部SDKのFlutter対応が一部ベータ版になっていたため、広告を貼る見た目の部分はiOS/Androidネイティブで作ることになるためです。
しかし広告のための外部SDKの使用状況もビジネスの状況が変化したことで、Flutterにも対応している外部SDKに変更することになりました。事前に動作確認を行う必要はありますが、FlutterのApp-to-appを選択する可能性が高まりました。
まとめ
クロスプラットフォーム事情はカジュアル面談でよく聞かれる質問のため、FlutterKaigi 2022で登壇した報告と併せて紹介しました。
当社リサーチ・アンド・イノベーションでは、例えば、登壇や記事投稿などで積極的に発信したり、iOS/Androidの壁を取りたいiOSエンジニアまたはAndroidエンジニアを募集しています。