目次
Flutter(フラッター)は、Google によって開発されたオープンソースのモバイルアプリケーション開発フレームワークで、多くの開発者や企業に支持されています。この記事では、Flutter のメリットとデメリット、競合フレームワークとの比較、そしてその将来性について詳しく掘り下げていきます。
Flutter とは
Flutter は Google によって開発されたオープンソースのフレームワークです。Flutter は Dart 上で使用されるフレームワークで、さまざまなプラットフォームで動作するアプリを一度のコードベースで構築できるクロスプラットフォームのフレームワークです。「Flutter は流行らない」と言われることもありますが、フリーランス市場では案件数が増加している技術の一つです。
Flutter の現在の市場ポジショニング
Flutter の市場シェア
Flutter は急速に市場シェアを拡大しています。特に新規のモバイルアプリ開発において、開発者や企業から選択肢の一つとして注目されています。 日本国内においても大手企業からベンチャー企業まで幅広い企業が Flutter を活用し、高品質なモバイルアプリを開発しています。具体的な事例として、Cyber Agent が 2018 年にリリースしている Ameba のスキルシェアーリングサービスの開発は Flutter が使用されています。
Flutter導入から見るクロスプラットフォーム開発のリアル
なぜ一部の開発者(企業)が Flutter を採用しているのか?
ネイティブアプリ開発の場合には、それぞれのプラットフォーム毎にコードが必要になることでコストが大きくなることや使用する言語が異なるため人員確保の難易度も高くなるなどのデメリットがありますが、クロスプラットフォーム開発では、同じコードベースで iOS と Android アプリを効率的に開発することができるため、それらのデメリットを解決することができます。
クロスプラットフォーム開発が可能な言語(フレームワーク)はいくつかありますが、UI コンポーネントの再現性の高さやモダンな設計になっていることも Flutter が採用されている理由の一つです。
Flutter のメリット
Flutter を使用するメリットについて解説します。
クロスプラットフォーム開発
クロスプラットフォーム開発は近年注目されている開発手法で、異なる OS 上で動作するアプリケーションを一つのコードベースで開発する方法です。従来では、iOS アプリは Swift や Objective-C を使用し、Android アプリでは、Java や Kotlin を使用するなどプラットフォーム毎に異なる言語を使用する必要がありましたがクロスプラットフォーム開発ではその必要がありません。 Flutter は、クロスプラットフォーム開発が可能なフレームワークで、コストの削減と開発スピードの向上を実現することができます。クロスプラットフォーム開発は Flutter 以外にも React Native や Kotlin Multiplatform 、Xamarin などで実現することができます。
高速なパフォーマンス
Flutter は Dart で書かれているコードが ARM および Intel アーキテクチャ向けのネイティブマシンコードにコンパイルされることで生成されます。このコンパイルされたコードはモバイルデバイスで直接実行されるため高速なパフォーマンスを実現できます。クロスプラットフォーム開発には、React Native が使用されることもありますが、こちらは JavaScript で処理されるため、Flutter よりもパフォーマンスが劣ることがあります。
ウィジェットベースの UI
Flutter の UI はウィジェットと呼ばれる小さな部品から構築されます。ウィジェットはボタン、テキスト、アイコン、コンテナなどあらゆる UI 要素を表すものです。 このウィジェットは再利用することができ、カスタマイズも可能です。これにより、コードの再利用が促進され、開発プロセスが迅速化することができます。
Flutterのデメリット
パフォーマンスへの懸念
Flutter に限らずクロスプラットフォーム開発はネイティブアプリと比較してパフォーマンスが劣る場合があります。3Dゲームや動画編集アプリのようなグラフィックスや画像処理に焦点を当てているアプリに関しては、ネイティブアプリの方が適している場合もあります。また、Flutter はフレームワークが提供するウィジェットの抽象化に依存するため、ウィジェットツリーが更新されると CPU とメモリ使用率が増加することがありますが、どちらも大きなデメリットではありません。
特に前者に関しては、ネイティブ API にアクセスすることでハードウェアを最大限に活用できるというのが大きな理由ですが、Flutter でもプラグインを使用することでネイティブ API にアクセスすることができるため、ネイティブアプリに近い状態で開発することができます。
ライブラリの普及が成長途中
Flutter は比較的新しいフレームワークであるため、ライブラリが少ないというデメリットが挙げられることもあります。実際に Flutter のライブラリはそこまで多くないですが、徐々に増加しており基本的な機能は標準装備されていることから、そこまで大きなデメリットではないでしょう。
以下は、Flutter で使用できる主要なライブラリと内容を表で示したものです。
ライブラリ | 内容 |
---|---|
Flutter Material | マテリアルデザインに基づくコンポーネントを提供。ウィジェットやスタイリングに関連する要素が含まれる |
Flutter Cupertino | iOS デバイスに特有の Cupertino デザインを実装。iOS プラットフォームに特有の外観と動作を提供 |
Flutter Provider | 状態管理のためのパッケージ。ウィジェット間での状態の共有と追跡を効率的に行う |
Flutter Animation | アニメーションを作成・制御するためのライブラリ。ウィジェットやプロパティのアニメーションをサポート |
Flutter Firebase | Firebase との統合を容易にし、バックエンドサービス、認証、データベース、ストレージなどを提供 |
競合フレームワークとの比較
クロスプラットフォーム開発に使用されるフレームワークには React Native や Xamarin があります。
React Native との比較
特徴 | Flutter | React Native |
---|---|---|
開発言語 | Dart | JavaScript(React) |
UIコンポーネント | カスタムウィジェット | ネイティブコンポーネント(Reactコンポーネント) |
パフォーマンス | ネイティブコードにコンパイル | インタープリターで実行 |
アーキテクチャ | MVVM および BLoC など | コンポーネントベースのアーキテクチャ |
クロスプラットフォーム API アクセス | Dart プラグインを使用 | ネイティブモジュールまたはサードパーティライブラリ |
パフォーマンスの調整 | 高度なカスタマイズが可能 | 制限されたカスタマイズ |
Flutter は Dart を使用して、ネイティブコードにコンパイルしますが、React Native は JavaScript を使用してインタープリターで実行します。また、Flutter はウィジェットベースのリアクティブアーキテクチャを採用しています。一方で、React Native は独自のカスタムコンポーネントによって UI をカスタマイズします。そのため UI のカスタマイズやデザインにおいてより高度な制御が可能でコンポーネントの再利用性が高く、一貫性のある UI デザインを実現しやすいのが Flutter です。
Xamarin との比較
項目 | Flutter | Xamarin |
---|---|---|
開発言語 | Dart | C#(Xamarin.Forms)、C++(Xamarin.Native) |
UIコンポーネント | カスタムウィジェット | ネイティブUIコントロール (Xamarin.Forms) |
パフォーマンス | ネイティブコードにコンパイル | パフォーマンスは良好で、最新の Xamarin.Forms では高速化が進んでいる。JIT コンパイルがデフォルト |
アーキテクチャ | MVVM および BLoC など | MVVM、MVC、MVP など |
クロスプラットフォーム API アクセス | Dart プラグインを使用 | .NET Standard ライブラリおよび Xamarin.Essentials を介してプラットフォーム API へアクセス |
パフォーマンスの調整 | 高度なカスタマイズが可能 | 制限されたカスタマイズ |
Xamarin は Microsoft によって開発されたクロスプラットフォームフレームワークで、C# や C++ を使用します。Flutter と異なる点は MVC や MVP などのアーキテクチャを採用している点です。しかし、クロスプラットフォーム開発を実施する際に Xamarin が採用されるケースは少ないのが現状です。
Flutter エンジニアの市場価値
フリーランス市場における Flutter エンジニアの市場価値を FAworks で取り扱っている案件をもとに解説します。 まず現在フリーランスで募集がかかっている Flutter 案件の報酬は月額単価で 55 〜 100 万円の範囲内であることがわかります。Flutter は技術者が少ないため比較的高単価な案件が多い技術です。
以下で単価毎に求められることが多いスキルや経験をご紹介します。
ポジション:PG 月額単価:50 ~ 60 万円程度
- モバイルアプリの開発経験
ポジション:SE 月額単価:60 ~ 70 万円程度
- 基本設計や詳細設計の経験
- モバイルアプリの UI/UX に関する深い知見
- Flutter を使用した開発経験(もしくはクロスプラットフォーム開発の経験)
- CI/CD に関する知識
- コードレビューの経験
- アーキテクチャ設計の経験
ポジション:リードエンジニア 月額単価:70 万円以上
- 要求定義や要件定義の経験
- プロジェクトマネジメントの経験
- 技術選定の経験
※ FAworks 調べ
フリーランス案件では Flutter の経験が無くてもネイティブアプリの開発経験やクロスプラットフォーム開発の経験があればエントリー可能な場合も多いです。また、月額単価が上がるにつれて要件定義や技術選定などの上流工程のスキルが求められます。プロジェクトに寄っては開発メンバーのマネジメントを任される場合もあります。
下記は、実際に募集されている Flutter 案件です。Flutter を使用した開発案件ですが、モバイルアプリの開発経験があればエントリー可能です。
Flutter の将来性
クロスプラットフォーム開発の需要
クロスプラットフォーム開発の需要は増加の一途をたどっており、Flutter はその市場において強力な選択肢です。フリーランス案件においても Flutter の案件数は React Native や Xamarin よりも多く、フリーランス市場での需要も高いと言えます。 複数のプラットフォームでアプリケーションを開発およ持び維するコストを削減し市場に迅速に投入できるというメリットは大きく、今後もクロスプラットフォーム開発は増加していくと見られます。
Google のサポート
Flutter は Google が開発するオープンソースのフレームワークであり、安定したバックアップを受けています。Google は積極的に Flutter を推進し、新機能を追加し続けています。 そのため、ライブラリのような機能も増加していくことが見込まれており、より採用しやすいフレームワークになっていくことが予想されます。
まとめ
Flutter はモバイルアプリケーション開発において、クロスプラットフォーム開発、ウィジェットベースの UI など多くのメリットを提供します。将来性については、クロスプラットフォーム開発の需要の増加と Google のサポートに期待が寄せられています。フリーランス市場でも需要が高い技術であるため、モバイルエンジニアにとっては身に着けておきたい技術の一つです。