モバイル開発、Flutterで進めるか、Nativeで進めるか
最近はFlutterの勢いがすごいですね。
元々Native開発が中心でしたが、Flutterも触ってみて自分なりにどちらを選ぶべきかをまとめてみました。
どちらが良いかの好き嫌いは傍に置いておきます。
また、下記の記事を参考にしています。
https://www.simform.com/flutter-vs-native-technology/
Flutterについて簡単な説明
FlutterはGoogle社のクロスプラットフォームフレームワーク(iOS/Android/Web)です。2018年12月に発表されました。言語はDartです。宣言的UIで記述できることが特徴です。ここではiOS/Androidのみに焦点を絞ります。
1つのソースコードでiOS/Androidの両方の開発ができ、開発スピード・コストが削減されることが期待されます。
プラグイン・ライブラリ機能により、GPSなど一部の端末依存の機能を使うことができます。
この記事でのNative開発について
iOS/Androidの両方でモバイルアプリを開発することを指します。
Nativeに向いている
・AR / VRアプリケーション
・リッチアニメーション
・OSが提供するUIで複雑かつ革新的なUIにする
・GPSなどのハード中心
・計算が多い
・AI関連
・IoTに繋ぐ
Flutterに向いている
・MVP(Minimum Value Product)モバイルアプリケーション
・Material Designを採用
・OSレベルの機能で動くアプリ、ハード(GPSなど)は使わないもの
・Widgetで柔軟なUIを構築
開発スピードとコスト
<Native>
iOS/Androidの両方のソースコードを書かなくてはならないので、スピードも初期開発コスト・メンテナンスコストもかかります。
アーキテクチャ(MVC, MVVMなど)や開発パターンは整っているので、セキュアで堅牢なシステムを作ることができます。
<Flutter>
単一ソースコードでiOS/Androidの両方に対応が可能なので、開発スピードも早く初期開発コストも低いです。また、独自Widget機能により柔軟なUIを組み立てることができます。学習コストも低いです。
まだFlutterはこれから進化していくと考えられるので、Flutter/Dartのアップデートにコストはかかります。プラグインを使用しているのであれば、プラグインのアップデートに対応するコストもかかります。
ネイティブな機能
<Native>
iOS/Androidの固有の機能を使用するためのフレームワークが整えられており、高速で対応できます。
例えば、GPS・カメラへアクセスするためのフレームワークは標準で用意されており、実装までのスピードは速いです。
<Flutter>
プラグインで機能が提供されている場合があります。プラグイン次第ではアプリの市場投入まで時間がかかる場合があります。また、OS固有の最新機能への対応は時間がかかります。
パフォーマンス
ここでのパフォーマンスとは、CPU・GPU・メモリに関することです。
<Native>
それぞれのOSに最適化されているので、CPU・GPU・メモリのパフォーマンスは良いです。
<Flutter>
Dart・Skia(レンダリングエンジン)に依存しています。Nativeと比べるとパフォーマンスはそれほど良くはありません。アプリを動作させる上での最低限(60fps)のパフォーマンスは確保されています。
https://ichi.pro/flutter-vs-native-vs-react-native-pafuxo-mansu-no-chosa-54097512765824
https://ichi.pro/flutter-vs-native-vs-react-native-pafuxo-mansu-no-shosaina-hikaku-168274952262707
Nativeを選択するべき場合
・デバイスの機能を100%活用
・市場にニッチな独自MVPアプリ
・開発期間・費用がある場合で高度なネイティブアプリ
・OSのアップデート・新しい技術スタックにすばやく対応
・セキュリティと信頼性
・パフォーマンスが高いアプリ
・アプリ内課金によるマネタイズモデルが明確
Flutterを選択するべき
・単一コードによる開発スピード・メンテナンス性を重視
・市場投入までの時間短縮
Nativeを避けるべき
・少ない初期投資と市場投入までの期間
・少人数チームもしくはスキルの低いチーム
・メンテナンス・更新コストの上昇が許されない
・アプリ内課金の可能性が少ない
Flutterを避けるべき
・UIや機能の制限の無いネイティブアプリの開発
・パフォーマンスと機能に重点を置く
・ビジネスブランド固有もしくは機能固有のアプリの開発
・明確なアーキテクチャ(MVP, MVC, MVVMなど)で開発
所感
ビジネスで求められるのはどの項目かを判断すれば、Flutter・Nativeのどちらが適切なのか見えてきます。