モバイルクロスプラットフォーム開発の夢と現実

iOSAndroidをまとめて開発したいという要望があり、その夢と現実の歴史。ゲームは知りません。

3行まとめ

  • 流行りと衰退を繰り返している
  • それぞれの差分が辛い
  • Flutterが流行りつつある(?)

ネイティブアプリ

iPhoneAndroidが2007年に発表され、今後の携帯電話のスタンダードになっていくことが予見された。当時の開発言語はObjective-CJavaであり、ほぼ同じロジックを二つの言語で書く必要があった。現在はSwiftとKotlinに取って代わられつつあるが2つの言語で書く必要があるのは変わらない。面倒くさいよね。

クロスプラットフォーム

  • 理論上、半分の時間でできる。OSごとで何かあって半分にはならない程度
  • OSのアップデート等で不具合が発生したりするのはネイティブでも同じだが、プラットフォームがアップデートしないと対応できない場合がある
  • 早くなる分人間より安い程度の利用料がかかったりする。

RubyMotion

Rubyでかけるやつ。iOS 13.2. Android 8.1が最新なので察してあげてください。

Adobe AIR

Flashをベース。AcrionScript3+MXMLで開発ができる。Flash職人がアプリ開発に使っていたという印象があります。一時期の郵便局年賀状アプリや初期の艦これAndroid版はAirで動いていたらしい。HARMAN に移行され、HARMANに連絡しないとアップデートが受けられないという実質的な死を迎えました。Apache Flexとその派生のApache Royaleもありましたが、Apache財団に移管済に移管済みだそうです

Titanium Mobile

JSでかけるやつ。最古参でまだ定期的にアップデートされている。最近は聞かない。

Delphi

よく知らない。Object Pascal言語(Delphi)で書くらしい。アップデートはあるようだけど、使っている話はあまり聞いたことがない Delphi: 概要 - エンバカデロ・テクノロジーズ

Ratchet

珍しくOSS。WebView 動く。5年前からアップデートがない。 Ratchet

Phone Gap系

Phone GapはAdobeが次世代Flashになると見込んで開発元を買収した。 WebViewでUI作って、ネイティブの機能をブリッジして使えるようにしたもの。当初Web系の人たちの使いやすさもあって流行ったが、iPhoneAndroidのギャップにやられる。Phone GapはApache Cordovaとして寄贈され、Phone Gapとしての終焉を迎えました。 CordovaからはMonacaに派生があります。 IonicはCordvaをベースに独自のプラットフォームを構成し、今はCordva相当を自作して置き換えた。

SCADE

Swiftでクロスプラットフォームの開発を行えるようにしたもの。 チェンジログが3年前のベータ版リリースだったり、動きが全く掴めない。少なくとも流行ってはなさそう。

SCADE

Xamarin

Xamarinはマイクロソフトが開発した。 C#で開発できる。マイクロソフトは激推ししているのでしばらくは死にそうにない。接触確認アプリで使われている。ちゃんと動く印象。C#に使い慣れている人が多ければ採用される可能性はある印象。 Windows Phoneなんてものもありました。

Xamarin ドキュメント - Xamarin | Microsoft Docs

React Native

React NativeはFacebookが開発した。 JSCかhermesを通してNative UIでレンダリングしてる。Reactはが得意ならあり得る。WebでいいならアプリとしてリリースせずにWebにしとけばいいじゃね?

React Native · A framework for building native apps using React

Flutter

FlutterはGoogleが開発している。 Dartで開発する。どうしてもGoogleのアプリっぽくなる。ここ最近(2020年8月)は割と使われているらしいということを聞く。

Flutter - Beautiful native apps in record time

UIはないタイプ

UIはそれぞれの言語で書いて、ドメインモデルなどの共通のロジック部分は一つの言語で各タイプ。

C言語

JavaからもObjective-Cからも無理なく呼び出せる。実際使っているという話は聞いたことがない。どこかにはいそう。

Kotlin Native

Kotlinで書けるのでAndroidはもちろん動く。iOSの方はなんかいろいろやって、frameworkに固めてインポートできるようにしているらしい。

その他いろいろ

C言語と同じく、JavaからもObjective-Cからも呼び出せれば何でもいいので、かなりの数の言語が理論上はできるということになっている。実際のアプリでやっているのはごく少数だとは思う。

私感

5年以上栄えているクロスプラットフォームは今のところなく、繁栄と衰退を繰り返している。完全に死んでいるのは少ない。最近流行っている物はわからないが、正直長く続けるとわかってるならネイティブで開発することをお勧めする。スタートアップで高速でリリースしなければいけないときや、どうしてもアプリエンジニアを採用できない時、Xamarin,React Native,Flutterが今までの夢の歴史を終わらせれると思った時などに採用すべきだろう。