menu事業部 フロントエンドエンジニアの坂井田です。
社内でとある新規開発チームが発足し、私はそのチームで約半年間、ストアリリースの目標に向けて開発を行っておりました。
このプロジェクトは社内初となるFlutterを採用しての開発になりましたので、同じチームで一緒に調査から始めた大口さん・るいさんと共に、その経緯についてご紹介します!
既存アプリを踏まえた技術選定
私は以前ユーザーアプリを開発するチームに所属していたのですが、スクロールしたときのカクツキや画面遷移がスムーズではないなどの課題が何度か挙がっていました。
ユーザーアプリではReactNativeとExpoで実装していましたが、新規で開発を始めるのは良いチャンスかもしれないということで、技術選定の際、ReactNativeとよく比較されるもので以前から気になっていたFlutterを一緒に調査することにし、以下3つの技術を候補として挙げました。
- Kotlin / Swift:ネイティブ開発
- ReactNative:既存アプリで採用していた技術
- Flutter:新候補
また、評価軸をいくつか設けて調査し、各技術でどのような利点があるかを調べて表にまとめました。
Kotlin / Swift | ReactNative | Flutter | |
---|---|---|---|
パフォーマンス | ◎ | △ 要素が多いと遅くなる (ScrollView) |
○ |
全体的なメンバーの学習コスト | △ | ◎ メンバーが慣れている (参考) |
○ クロスプラットフォームだけど慣れていない |
UI作成の学習コスト | △ AndroidとiOSで別々に実装する必要あり |
◎ Webに近い知識で実装できる |
○ クロスプラットフォームだけど慣れていない |
エコシステム (ライブラリ) 全般 |
○ | ◎ | ◎ Google系のライブラリが豊富 (例) |
エコシステム (ライブラリ) カメラなどネイティブ依存が強そうなもの |
◎ | △ 相性があまりよくない (対応機能など) |
○ ライブラリによる |
ネイティブAPIの利用 | ◎ | ○ | ○ 割と簡単に呼び出せる |
コミュニティ | ○ | ◎ | ◎ |
トレンド (参考) |
○ | △ | ◎ |
リリース | △ 都度申請が必要 |
◎ OTAアップデートできる (Expo) |
△ 都度申請が必要 |
パフォーマンスの一点でみるとネイティブ言語での開発に軍配が上がりますが、エンジニアの規模や保守の観点でみるとクロスプラットフォームを利用しての開発が望ましいと感じます。(両方のOSで使用する可能性があるアプリのため)
チームに目を向けたとき、今まで主にReactNativeを使ってきたため、やはり学習コストが無視できないというのはネックになっていました。
決定
各調査をしてメンバーで話し合った結果、以下のことが決定打となり、今回のプロジェクトではFlutterを採用することになりました!!
- サービスでは主にGoogle系のサービスを使用する(Firebase)
- 動作速度を優先させたい
- カメラなどネイティブ依存が強そうなものを使用する可能性がある
検証の際に各言語でデモアプリを作成しましたが、ReactNative + ExpoとFlutterでは目に見える差があることがわかり、Flutter採用に拍車がかかりました。
また、プロダクトオーナーからも是非新しいことに挑戦して欲しいという言葉をいただくことが出来たのも、理由としてありました!
リリースに関しては、既存アプリとは運用方法を変更することで対応する方針になりました。
最後に
今回は決定までの経緯についてを書きましたが、今後は使用したパッケージの話など、より技術的な話をメンバーと書いていこうと思います。
次回の更新をお楽しみに!!