読者です 読者をやめる 読者になる 読者になる

望月いちろうのREADME.md

書き溜めておいた技術記事や旅行記のバックアップです。

クロスプラットホーム開発フレームワーク[Xamarin ReactNative]を比較してみた

React Native

ここではHTML5で書くなんちゃってアプリではなく、あくまでネイティブで開発できるフレームワークについて整理しました。

主に以下の観点から比較してみます。

  • 開発言語
  • 対応OS
  • ライセンス
  • 開発者
  • 性能・パフォーマンス
  • 実績
  • 個人的な感想・おすすめ度

1.Titanium

開発言語

JavaScriptで開発、JavaScriptのランタイムからネイティブのAPIを呼び出す。

対応OS

Android、iPhone、Windowsに対応

ライセンス

Apacheライセンス 2.0

開発者

Appcelerator社

性能・パフォーマンス

あまり評判がよろしくない様子。動きがカクカクしている。よく落ちてクレームが続出など

http://qiita.com/star__hoshi/items/3d57db8d08eb8d2f1f32#titanium-mobileの辛み

実績

ベンチャーが初期に採用することが多いが、ユーザーの増加にともにネイティブに置き換えられる傾向

http://sssslide.com/speakerdeck.com/naoya/alternative-nakai-fa-turufalsecai-ze-nituite

個人的な印象

触ったことがないのでわかりませんが、学習コストが一番低いので、技術力に自信のない小規模スタートアップ向けでしょうか?

2. React Native

開発言語

React.js(JavaScript)で開発、 JavaScriptのランタイムからネイティブのAPIを呼び出す。

対応OS

Android、iPhone

ライセンス

BSDライセンス

原則的に利用・再配布も可

開発者

Facebook

性能・パフォーマンス

ネィティブと区別がつかないレベル

実績

Facebook社の多くのアプリで採用、また、Instagram、Airbnb、baidoもReact Nativeを採用している

詳しくは公式を

https://facebook.github.io/react-native/showcase.html

個人的な感想

採用実績やライセンスの柔軟さを考えるとベストな選択肢だと思われる。自分もいろいろテストしているが好印象で、目立った問題はなさそう。

Githubで検索しても優れたライブラリが整備されていて、大体の機能は簡単に利用できる。

問題はWindows Phoneに対応していないということと、それなりに学習コストが高いReact.jsを使える人を採用できるか?という話

前者はWindows Phoneのシェアを考えると、ある程度は無視できる。後者については、Reactの保守性の高さと相殺できると思う。

追記:Windowsに対応するためのライブラリを発見しました

https://github.com/ReactWindows/react-native-windows

3.Xamarin

開発言語

C#

対応OS

Android、iPhone、Windowsに対応

ライセンス

マイクロソフト ソフトウェア ライセンス条項に準ずる

個人開発者、小規模チーム、オープンソース プロジェクト、学術研究用では無料使用が可能だが、「エンタープライズ」(本格的な商用利用)での利用には有料ライセンスとなる。

開発者

マイクロソフトに買収されたXamarin

性能・パフォーマンス

高い

実績

公式に一覧がある。

https://www.xlsoft.com/jp/products/xamarin/consulting_partners.html

個人的な印象

企業で使用するとライセンス料が掛かるのがネックだが、大企業が管理していることによる信頼性と相殺できるだろう。マイクロソフトが普及に力を入れているようなので、Windowsプラットホームを中心に据える場合はベストかも?

共通の課題

実際はそこまでコードを共通化できない(せいぜい60%程度か) 優れたエンジニアならXamarinで90%共通化できるとのこと

何かトラブルが発生した場合はネイティブの部分を触る必要がある。

また、Githubを覗いて良いライブラリがなかった場合は、独自に機能を拡張する場合がある。つまり、ネイティブ(AndroidならJava、iPhoneならばObjective-C)をラッピングしたコンポーネントを作成する必要がある。React NativeならばJSとネイティブ両方を扱う必要があるが、XamarinではすべてC#でかけるとのこと