はじめに
モバイルアプリ開発において、ネイティブ開発とクロスプラットフォーム開発(Flutter、React Native)の選択は継続的な議論となっています。Androidリードエンジニアの視点から、iOSとAndroid両方が必要という前提での選定方法を紹介します。
経歴
執筆者の開発経験:
- Swift: SwiftUIで個人開発4件、100万円以上の収益化実績あり、1.5〜2年経歴
- Kotlin: 個人開発2件+現職リードエンジニア、Jetpack Compose主体、1年余経歴
- React Native: 実務1年半、ネイティブ機能ブリッジ実装経験
- Flutter: 実務半年、環境設定支援経験
結論
クロスプラットフォーム開発(React Native or Flutter)を第一候補とする
ただし、以下の場合はネイティブ開発を選択:
- 開発予算が潤沢
- 先進的ネイティブ機能が必要(AR表示など)
- 非機能要件がシビア
- Rustなどライブラリ組み込みが必要
クロスプラットフォーム優先の理由
iOSとAndroidのコード共通化による"コスト面での大きな恩恵"が重要です。仕様が不明瞭な案件では、OS別に異なる実装者による理解相違から挙動差異が生じやすく、クロスプラットフォーム採用でこのリスクを軽減できます。
個人開発の新規案件では、特段の理由がない限りReact Native一択を推奨します。
Flutter vs React Native
React Nativeを推奨
実装面
Flutterは環境設定が楽で初心者向き。一方、React Nativeは拡張性が優れています。Webフロントのライブラリがほぼそのまま利用でき、Webで可能なことはReact Nativeでも実現可能です。
ビジネス面
React Nativeが勝ります。Reactスキルがあればほぼそのまま活用でき、Web業界の主流言語であるため"エンジニア採用が容易"で、Webエンジニアへのキャリアパスも開けます。
Dartはモバイル限定のため汎用性に欠けます。
Expoについて
React NativeのExpoはまだ本番利用を推奨しません。ライブラリ制限や認証周りの不具合があるため、bareの使用を推奨します。整備が進めばの検討で十分です。
ネイティブ開発が適切な場合
資金が潤沢な場合
コスト無視なら、AppleとGoogle公式ライブラリによる"信頼性と品質の高さ"が得られます。各プラットフォームの最新技術をすぐに導入でき、クロスプラットフォームより強固なアプリが実現します。
先進的機能が必要な場合
AR等の最新機能はクロスプラットフォームでサポート遅延が一般的。ネイティブブリッジ実装で対応可能ですが、複雑さと難度が高くお勧めしません。
非機能要件がシビアな場合
パフォーマンスはネイティブが優位です。カメラ起動速度やアプリサイズで、クロスプラットフォームとの差異が生じやすいため、要件が厳しければネイティブが必須です。
組み込みライブラリが必要な場合
Rustライブラリ等の実装時、ネイティブが推奨されます。クロスプラットフォームのブリッジ実装は煩雑で難度が高くなります。
まとめ
- クロスプラットフォーム開発を優先検討する
- React Nativeが推奨
- 特殊条件下でネイティブ開発を選択する
