Android
Xamarin
クロスプラットフォーム
reactnative
Flutter

クロスプラットフォーム開発手法の比較(Xamarin、Flutter、React Native)


概要

本記事は、AndroidとiOSのクロスプラットフォーム開発手法を比較したものです。

2018年9月に社内で共有した記事をアップデートし、

ACCESS Advent Calendar 2018の17日目の記事として一般公開します。


比較


対応比較

手法
iOS
Android
Windows
macOS
Webフロントエンド
Webバックエンド

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.NativeというラッパーAPIの存在
・通信やDB周りの共通化に向いている
・C#は歴史も長く、便利なライブラリが多い

・UIは共通化できない
・レンダラーを作る手間がかかる
・検索結果にFormsとNativeが混ざる
・定期的にVisual Studioがバグる
・全然カスタマイズできない
・公式ドキュメントの中途半端な翻訳
・アプリの起動が遅い

Flutter
・ホットリロードが爆速
・Widgetsの数が豊富
・標準パーツでそこそこ綺麗なアプリを作れる
・Intellij(Android Studio)を開発に使える
・フレームワークのバグが少なめ
・日本語の記事がまだ少ない
・dartのエンジニアが少ない
・Realm未対応
・マテリアルデザイン以外のUI作成に弱い

React Native
・ホットリロードが早い
・Flux(Redux)を採用でき、理解して使うとバグが減る
・困ってもググれば解決策がすぐ見つかる(ただし、すぐ次の問題で困る)
・JSXはスクリプトの中にXML、その中にスクリプトということもよくあり、そういうの嫌う人は受け付けない
・Flux(Redux)の理解が難しい(Facebookが推奨する状態管理モデル、単方向データフロー)
・npmの理解が必要
・使えるライブラリを探すのに苦労する
・サードパーティライブラリに依存することが多い
・まだ0.57で正式リリースされておらず、今後どうなるか未定


社内で寄せられた質問と、それに対する回答


ネイティブAPIのサポート具合は?(Notificationなど)


ネイティブSDKのメジャーバージョンアップからのアップデートタイムラグはどれくらい?

ネイティブの追随の早さについては、確たる情報を得られなかったが、


その他の手法


Unity


  • やっぱりゲーム用

  • 昔はボタンを作るにも画像が必要だったが、最近変わった


Kotlin


  • Kotlin Nativeが出てきた

  • 次期クロスプラットフォーム開発かもしれない


最後に

今回、作成時間が圧倒的に足りず、後半はやっつけになってしまいました。

ご意見やより正確な/新しい情報を積極的にお待ちしています。


関連リンク

社内向け記事です。


参考リンク

各サイトの皆様に御礼申し上げます。