見出し画像

ミャンマーでのモバイルアプリ技術選定

グルメアプリyatharをリリースして1年ほど経ちました。
アクティブユーザー数は業界ナンバーワンになり、まだ始まったばかりではありますが一定の成果も出始めて、少しほっとしているところです。

モバイルアプリを作る技術にはいくつか種類があり、それぞれメリット・デメリットがあります。

yatharはCordovaという技術で作っていたのですが、仕様上ビジネスの要求に答えられない事も出てきて、現在ネイティブ(Swift/Kotlin)に移行するプロジェクトの真っ最中です。
この技術選定は本当に難しく、あのFacebookやAirbnbも迷いまくって何度かプラットフォーム変更をしているほど。

ネイティブかクロスプラットフォームか、XamarinかReactNativeかCordovaかFlutterか

iOSとAndroid両方にリリースするのを前提としています。

大きく分けてネイティブかクロスプラットフォームかの二択があり、さらにクロスプラットフォームの中に多くの企業やオープンソースで開発されている多数の技術が存在するという構図です。

この選定問題がややこしいのは、

・今後のサービスの展開方針
・予算規模
・採用する技術を扱える人材の獲得難易度と単価水準

などなど、単純に技術的な長短だけでなく、経営的な視点からも判断する必要がある点です。

特に、東南アジアではエンジニアの数や質の事情が日本や欧米と異なりますので、選定前にHR視点の事前リサーチも必要かと。

前置きはこのくらいにして、僕の経験上、それぞれのプラットフォームのメリット・デメリットを書きます。

ネイティブ(Swift/Kotlin)

その名のとおり、iOSとAndroidが標準でサポートしている言語で開発します。

メリット:
- ネイティブ機能をフルに使える
- ビジネスに合わせて自由に機能実装ができる
- エンジニアの絶対数が多く、採用が比較的容易

デメリット:
- iOSとAndroidそれぞれ別に作るため工数と運用リソースが2倍

Xamarin

Microsoftが買収したクロスプラットフォームで、Android/iOSのネイティブAPIをC#で呼び出せるようにした技術です。

メリット:
- クロスプラットフォームで処理を共通化できる。Xamarin.Formsを使えば画面の共通化も一部可能
- 普及しているIDEであるVisualStudioと親和性が高い

デメリット:
- C#や.NETの知見はもちろん、共通化できない部分はネイティブの知識がやはり必要で学習コストが高い。

React Native

Facebook が開発したクロスプラットフォームアプリ開発用フレームワークです。前述しましたがFacebookは2012年にHTML5ベースのWebアプリをリリースした際に、動作の不安定さから市場から不評を買いネイティブに移行したのですが、その後React Nativeを開発し再リリース、今に至っています。
ちなみにInstagramやFB Messangerなども同技術で作られているため、現在注目のフレームワークのひとつです。

メリット:
- 何しろ世界的な人気アプリでの実績
- JavaScript、HTML、CSSなどのWeb標準技術を使っているので言語習得しているエンジニアは多い(が、React Native自体の学習コストは決して低くない)

デメリット:
- 二週間に一度バージョンアップ、三ヶ月に一度メジャーバージョンアップがあり、破壊的な仕様変更もしばしば。キャッチアップしていくのがつらい。
- 学習コストが高い(関連技術であるReact、Reduxなどをマスターする必要あり)。
- コードの煩雑さや、パフォーマンスチューニングの難易度高め

Cordova

Apacheの元で管理されているオープンソースのハイブリッドアプリ開発フレームワークです。

メリット:
- JavaScript、HTML、CSSなどのWeb標準技術だけで作れる
- Angularやionic Frameworkを使うことで、さらに容易に開発可能

デメリット:
- 機能をプラグインに頼るため、依存性や動作干渉が起こりやすい
- ネイティブに比べて動作が遅い傾向にある

Flutter

Googleによって開発されたフリーかつオープンソースのモバイルアプリケーションフレームワークです。御大Google様が正式版を発表したことで、今注目を浴びています。

メリット:
- アニメーションや動作スピードはKotlinと遜色なし
- firebaseなどGoogleの他サービスと親和性良さそう

デメリット:
- まだDartの事例が少ない
- 新しすぎて情報が少なく、商用プロダクトでの採用は時期尚早?

番外編: Kotlin Multi Platform

Androidネイティブで使われている言語であるKotlinで書いたコードを、各プラットフォームに適した形でコンパイルしてくれるクロスプラットフォーム開発ライブラリの1つです。2019年に正式版がリリースされました。
現在、以下の形式にコンパイルする事が出来ます。

・iOS (arm32, arm64, emulator x86_64)
・MacOS (x86_64)
・Android (arm32, arm64)
・Windows (mingw x86_64)
・Linux (x86_64, arm32, MIPS, MIPS little endian)
・WebAssembly (wasm32)

これだけ対応できるのはすごいですね。
これまでのクロスプラットフォームへのアプローチは、「Web言語など既存技術で解決できないか」「どのようにしてネイティブAPIに効率よくアクセスするか」という考え方だったのですが、ネイティブ言語そのものであるKotlin側からクロスプラットフォームに拡張していく事はとても意義のあるプロジェクトだと思います。
まだまだ発展途上のところはありますが、積極的に開発が進められており注目しています。

結局ミャンマーではどうするのが良いのか?

ミャンマーは人件費の安さから、欧米や日本からオフショア開発の受託先となってきたため、ネイティブやWebのエンジニアは多く、レベルもそれなりに上がってきています。
逆にいうと比較的新しい技術であるクロスプラットフォームについては、エンジニアの絶対数が少ないため、本格的なプロダクトで採用するのは運用管理も含めると難しいかもしれないなという印象です。
ただ弊社がそうしたように、工数やエンジニアリソースが限られていたり、とにかくプロトタイプを出さなきゃいけない状況においては、あえて開発速度重視の技術を採用するのも短期的にはありかと感じています。

まとめ

書かせていただいた内容は僕個人の見解や使ってみた感想、ベンチャー企業特有の状況が多分に含まれていますので、ビジネスやアプリの用途によっては全く合わない内容かもしれません。
例えば展示会限定のアプリとかなら、シンプルに地図やスケジュールがわかれば良いだけだったり、工数はそれほど使えないがすぐにリリースできたほうが用途に合っているわけで、ゴリゴリのネイティブアプリにしなくてもWebviewを使ったガワアプリやハイブリッドの方がベターです。
弊社の採用したCordovaも当初は速度に難がありましたが、ここ数年でAngular側のチューニングやJavaScript自体の実行速度の向上もあり、かなり改善しました。
Flutter(Dart)だって最近まで人気ないbetaプロジェクトだったし。。。

というわけで、この世界は日進月歩なので、状況も変わります。
一概に決めてしまうのではなく、常に情報のインプットを怠らずにキャッチアップしていくことと、その上で会社の方針やサービス内容と照らし合わせて決定するのがいいのかなと思います。
誰かの参考になれば幸いです。

いいなと思ったら応援しよう!