Flutter は、単一のコードベースからモバイル、Web、デスクトップ、および組み込みデバイス向けのネイティブにコンパイルされたアプリケーションを構築するためのオープンソース UI ツールキットです。Flutter は、主に Google から資金提供を受けており、世界中にコントリビューターがいます。
Flutter 導入の判断基準
UI デザインを各 OS でどのくらい共通化するか
OS に依存した機能をどのくらい利用するか
アプリサイズをどの程度まで削減したいか
今後のアプリ開発の体制をどうしていくか
採用戦略
内製化
メリット
共通化できるコードが多ければ多いほど、開発期間の短縮・開発や保守運用コストの削減につながる
OS 独自の機能だったとしても Flutter パッケージが存在すれば共通化できる
GPS・Beacon・Bluetooth などもパッケージは存在する
マテリアルデザインが適用された Widget がパッケージとして提供されているため、マテリアルデザインによる UI の統一が簡単にできる
Material Design のサイトでは、コンポーネントは Flutter でどのようなコードを記述すればいいかの例が記載されている
開発時にホットリロード(Hot Reload)機能が使えることによって、コード修正がすぐアプリに反映され確認がしやすく、開発スピードの向上が期待できる
デメリット
最新 OS の対応については、Flutter やパッケージの対応を待たざるを得ない
主要なパッケージだと、リリースされて1ヶ月も経たないうちに対応されるケースも多い
主要でないパッケージについては、半年以上待つケースもあれば、そもそも対応されないといったケースもある。しかし、それはネイティブのライブラリにも同じことが言える
急ぎであればパッケージ自作でも対応可能
Dart 言語の機能はまだ Kotlin・Swift には及ばない
Flutter コアエンジンを含めないといけない関係上、どうしてもアプリサイズが一定増える(約4MB)
アプリサイズ 10MB 以内という要件を満たせなくなってしまうと iOS App Clips 対応ができない
iOS 16 からは 15MB 以内、 iOS 17 からは 50MB 以内と変更されました。
Flutter のパッケージがない機能や SDK、OS に依存した設定などは、ネイティブコードを書かざるを得ない
Salesforce SDK は現状 Flutter パッケージはない
ネイティブの UI パーツに依存する機能のある SDK は、その部分について利用できない可能性がある
世界での事例
公式サイトの Showcase で、いくつか紹介されている
Google Pay の完全な Flutter での作り直しは、おそらく一番利用ユーザー数が多そうで、世界的にインパクトの大きい事例
指標として、70 % のエンジニアリング作業の削減と 35 % のコード行の削減に成功したと発表している
国内での事例
このページに記載されている内容は 2024年3月12日 での最新情報を反映しています。しかし、ご覧になる時点でサービスが終了しているかアプリケーションストアから削除されている可能性があるためご注意ください。
ゆめみでの事例
2021.10.28 AndroidとiOSに対応したクロスプラットフォームフレームワーク「Flutter」技術を活用した内製化支援を本格開始
2022.01.06 Flutter技術を活用したアプリケーション開発が本格始動
コミューン|Flutter開発によるアプリの大幅アップデートを支援
Q & A
マテリアルデザインとは何でしょうか?
Google が提唱したデザインシステム(設計体系)の一種、および、それを実現する開発技術や手法、デザイン、試みなどの総称です。
Flutter で実現できないことはありますか?
アプリサイズ 10MB 以内という要件を満たせなくなってしまうため、iOS App Clips は本番環境では利用できません。(開発環境で作成はできます)
他は、概ね実現可能ですが、強くプラットフォームに依存する要件がある場合は、避けた方が無難な場合があります。
例えば、CarPlay・AndroidAuto に対応させるなど対象となる技術要素がニッチな場合も困りがちです。
また、計測のために導入指定されているライブラリが、Flutter 対応していない場合も手間になる場合があるかもしれません。
※ iOS 16 からは 15MB 以内、 iOS 17 からは 50MB 以内と変更されました。
Flutter を採用する場合に絶対にやめた方が良いパターン・アプリの種類などありますか?
絶対というものはありませんが、概ね「Flutter で実現できないことはありますか?」の回答と被ると思います。
また、プラットフォーム(Android・iOS)の世界観に準拠する形で、Android・iOS それぞれ全く異なる画面実装する場合であれば、Flutter をわざわざ選ぶ理由は小さくなります(実装を共通化できる、という利点を殺すことになるため)。こういったケースでは、画面表示のみ各プラットフォームでネイティブ実装して、ビジネスロジックの実装のみ共通化するアプローチが効果的に働きそうです(KMMなど)
Flutter とネイティブの工数差はどの程度でしょうか?
要件次第です。プラットフォームに依存する UI や機能がどのくらいあるかで大きく変わります。
ネイティブ開発とまったく変わらない、むしろ手間が増えるばかりになるケースもあります。
基本設計・テスト・不具合修正については、どのような要件であれ、工数変化なしと考えていただいて問題ないかと思います。
詳細設計・開発については、要件次第ではあるものの、iOS・Android ネイティブそれぞれ 1 ずつで合計 2 だとしたら、Flutter だと 1 前後(諸々の条件次第で 0.8 くらいかもしれないし 1.3 くらいかもしれない)です。つまり工数的には半分で済むこともあり得ます。(Flutter の習熟度が高いエンジニア前提)
Flutter 不慣れなメンバーだった場合、学習・破綻して作り直し・バグ修正に追われて収集がつかなってくるなどで、2-3 以上になってもおかしくありません。。
Flutter を採用する事で実現出来ない UI デザインはありますか?
基本的にはありません。しかし、例えば iOS ネイティブ UI と細かいディテールなど含めて 100% 同一にする、とかだと困難かもしれません(理屈的には開発者の能力次第で不可能ではないです)
また、iOS のようなデザインの Widget のパッケージが用意されていたりします。
Figma などで組まれたデザイン通りに普通に組めるかという観点だと、Flutter が特に不利な点はありません。
Flutter の将来性はどんな感じですか?
2021 年、Google は「Play Store 内にある 200,000 のアプリケーションで Flutter が使われている」と発表しました。この数字は 2020 年の年末に集計したデータよりも 50,000 多く、2019 年 12 月時点と比較すると 440 %増。Flutter の需要が急速に伸びていることが分かります。
また、Flutter で使用される言語の Dart は、2021 年に発表された Stack Overflow の開発者調査の「プログラマが愛してやまないプログラミング言語」で Kotlin・Swift を抑えて、第7位にランクインしています。
Flutter 以外にもクロスプラットフォーム開発技術はありますが、現時点(2024/03/15)での GitHub のスター数を比較したところ、以下のような結果でした。
Flutter 161k
React Native 115k
Angular 94.1k
Ionic-framework 50.3k
Xamarin.Forms 5.6k
日本では 2020 年に「Flutter大学」という Youtube チャンネルが開設され、現時点(2022/01/26)で登録者数が1万人を突破する勢いです。コミュニティとしても徐々に成長してきている印象で、大学生でモバイル開発するなら Flutter という流れが生まれつつあります。もしかすると、今後は Flutter で募集をかけた方が比較的に若い世代の応募数が増えていくかもしれません。










