8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

menu事業部 フロントエンドエンジニアの坂井田です。

社内でとある新規開発チームが発足し、私はそのチームで約半年間、ストアリリースの目標に向けて開発を行っておりました。

このプロジェクトは社内初となるFlutterを採用しての開発になりましたので、同じチームで一緒に調査から始めた大口さん・るいさんと共に、その経緯についてご紹介します!

既存アプリを踏まえた技術選定

私は以前ユーザーアプリを開発するチームに所属していたのですが、スクロールしたときのカクツキや画面遷移がスムーズではないなどの課題が何度か挙がっていました。

ユーザーアプリではReactNativeとExpoで実装していましたが、新規で開発を始めるのは良いチャンスかもしれないということで、技術選定の際、ReactNativeとよく比較されるもので以前から気になっていたFlutterを一緒に調査し、以下3つの技術を候補として挙げました。

  • Kotlin / Swift:ネイティブ開発
  • ReactNative:既存アプリで採用していた技術
  • Flutter:新候補

また、評価軸をいくつか設けて調査し、各技術でどのような利点があるかを調べて表にまとめました。

Kotlin / Swift ReactNative Flutter
パフォーマンス
要素が多いと遅くなる (ScrollView)
全体的なメンバーの学習コスト
メンバーが慣れている (RNでの開発実績が多い)

クロスプラットフォームだけど慣れていない
UI作成の学習コスト
AndroidとiOSで別々に実装する必要あり

Webに近い知識で実装できる

クロスプラットフォームだけど慣れていない
エコシステム (ライブラリ)
全般

Google系のライブラリが豊富 ()
エコシステム (ライブラリ)
カメラなどネイティブ依存が強そうなもの

相性があまりよくない (対応機能など)

ライブラリによる
ネイティブAPIの利用
割と簡単に呼び出せる
コミュニティ
トレンド
(参考)
リリース
都度申請が必要

OTAアップデートできる (Expo)

都度申請が必要

パフォーマンスの一点でみるとネイティブ言語での開発に軍配が上がりますが、エンジニアの規模や保守の観点でみるとクロスプラットフォームを利用しての開発が望ましいと感じます。(両方のOSで使用する可能性があるアプリのため)

チームに目を向けたとき、今まで主にReactNativeを使ってきたため、やはり学習コストが無視できないというのはネックになっていました。

決定

各調査をしてメンバーで話し合った結果、以下のことが決定打となり、今回のプロジェクトではFlutterを採用することになりました!!

  • サービスでは主にGoogle系のサービスを使用する(Firebase)
  • 動作速度を優先させたい
  • カメラなどネイティブ依存が強そうなものを使用する可能性がある

検証の際に各言語でデモアプリを作成しましたが、ReactNative + Expo と Flutter では目に見える差があることがわかり、Flutter採用に拍車がかかりました。

また、プロダクトオーナーからも是非新しいことに挑戦して欲しいという言葉をいただくことが出来たのも、理由としてありました!

リリースに関しては、既存アプリとは運用方法を変更することで対応する方針になりました。

最後に

同じチームで開発していたメンバーもFlutterに関する記事を書いていますので、ぜひ合わせてお読みください!

8
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?