概要
本記事は、AndroidとiOSのクロスプラットフォーム開発手法を比較したものです。
2018年12月に、
ACCESS Advent Calendar 2018の17日目の記事として一般公開しました。
本記事は2018年8〜9月頃に調査して社内勉強会で発表した内容なので、古い情報がありましたら教えてください。
比較
対応比較
手法 | iOS | Android | Windows | macOS | Web Frontend |
---|---|---|---|---|---|
Xamarin | ○ | ○ | ○ | ○ | |
Flutter | ○ | ○ | ○ | ○ | ○ |
React Native | ○ | ○ | ○ |
機能比較
|手法|主な開発環境|言語|API|UIパーツ|
|---|---|---|---|---|---|
|Xamarin|Visual Studio|C#|独自API+
ラッパーAPI|ネイティブ|
|Flutter|Intellij(Android Studio)|Dart|独自API|独自レンダリング|
|React Native|Atom|Javascript|独自API|ネイティブ|
手法 | アプリアーキテクチャ | 主な採用/移行ターゲット |
---|---|---|
Xamarin | MVVM | C#が好きな人 |
Flutter | Reactive | オブジェクト指向言語の利用者 |
React Native | Reactive | JavaScriptが好きな人や、ReactでWebフロントエンド開発してた人 |
手法 | 強み | 弱み |
---|---|---|
Xamarin | ・UIはXamlかコードで選べる(Xamarin.Forms) ・Xamarin.NativeというラッパーAPIの存在 ・通信やDB周りの共通化に向いている ・C#は歴史も長く、便利なライブラリが多い |
・レンダラーを作る手間がかかる(Xamarin.Forms) ・UIは共通化できない(Xamarin.Native) ・検索結果にFormsとNativeが混ざる ・定期的にVisual Studioがバグる ・UIのカスタマイズをしずらい ・公式ドキュメントの中途半端な翻訳 ・アプリの起動が遅い(改善Tipsあり) |
Flutter | ・ホットリロードが爆速 ・Widgetsの数が豊富 ・標準パーツでそこそこ綺麗なアプリを作れる ・Intellij(Android Studio)を開発に使える ・フレームワークのバグが少なめ |
・日本語の記事がまだ少ない ・dartのエンジニアが少ない |
React Native | ・ホットリロードが早い ・Flux(Redux)を採用でき、理解して使うとバグが減る ・困ってもググれば解決策がすぐ見つかる(ただし、すぐ次の問題で困る) |
・JSXはスクリプトの中にXML、その中にスクリプトということもよくあり、そういうの嫌う人は受け付けない ・Flux(Redux)の理解が難しい(Facebookが推奨する状態管理モデル、単方向データフロー) ・npmの理解が必要 ・使えるライブラリを探すのに苦労する ・サードパーティライブラリに依存することが多い ・まだ0.61.5で正式リリースされておらず、今後どうなるか未定 |
社内で寄せられた質問と、それに対する回答
ネイティブAPIのサポート具合は?(Notificationなど)
- React NativeはネイティブAPIをほとんどラップしていない。が、ネイティブモジュールを呼び出す方法も存在する
- XamarinはXamarin.NativeというラッパーAPIによって、C#であらゆるネイティブAPIの処理を書ける
- 表面上、iOSもAndroidも100%のAPIをサポートしていると謳われている
- Flutterはチャンネルという概念を用いてネイティブAPIやネイティブコードを呼び出せる
- APIのサポート領域は、React Nativeと同等レベルと思われる
ネイティブSDKのメジャーバージョンアップからのアップデートタイムラグはどれくらい?
ネイティブの追随の早さについては、確たる情報を得られなかったが、
- Flutterは始まったばかりなのでほぼ最新をすぐに追随し、最新安定版リリースは約2週間毎
- XamarinもXcode9対応を即日行うなど以前からほぼ最新をすぐに追随している
- React Nativeの最新安定版リリースは約1ヶ月毎らしい
- 追随という意味では3手法の中で最も遅い?
その他の手法
Unity
- やっぱりゲーム用
- 昔はボタンを作るにも画像が必要だったが、最近変わった
Kotlin
- Kotlin Nativeが出てきた
- 次期クロスプラットフォーム開発かもしれない
最後に
今回、作成時間が圧倒的に足りず、後半はやっつけになってしまいました。
ご意見やより正確な/新しい情報を積極的にお待ちしています。
関連リンク
社内向け記事です。
参考リンク
各サイトの皆様に御礼申し上げます。
- FlutterとReact Native(とXamarin)の正しい(?)比較
- Xamarin と React Native と Flutter の違いを正しく理解しよう
- React Native をプロダクションで使ってわかった良かった点・悪かった点
- ReactNativeでネイティブモジュールを扱う方法
- FlutterでのiOS API呼び出し
- React Native開発の良い点と注意点まとめ
- 10分間で分かった気になれるXamarin概要
- iOS 9 のリリースと同じ日に Xamarin は iOS 9 をサポート
- Flutter SDK Archive
- SERAKU_みんなの情熱大学 スマホアプリクロスプラットフォーム開発比較講座
- Xamarin.Forms(iOS)でSearchBarのカスタマイズで困ったこと