Mobile 端末を利用したアプリケーションの新規開発のために
Native, React Native, Flutter, Xamarin…
Mobile 端末と言っても実質的には Android のスマホやタブレットか、iPhone, iPad など Apple 系のものに限られるだろう。
開発すべきプロジェクトとしては地図情報など最新のフレームワークを要するものを想定する。ユーザーを認証したり、通知などと言ったセンシティブな情報も扱うアプリを想定する。ありがちな BtoC アプリは大抵こういうものだろう。
こういうものを開発するのに現在利用できる開発手段としてまず Native 開発。ついで React Native、Flutter、Xamarin のようなクロスプラットフォーム系が挙げられる。
他の Ionic 等のハイブリッド(クロスプラットフォーム)系は Native と同じ事ができるか不明なので除外する。
React Native
Facebook 社が作ったオープンソースのネイティブアプリケーション開発フレームワークである。作成されるのは Native のアプリなので実行速度等には Native で開発されたものと特段に劣るものではない。
React Native には Expo という簡単にアプリを作成、アップロードできる枠組みがある。これを利用するだけでできるアプリなら勧められる。Expo アプリに関してはちょっとした改修では Apple への申請が不要なのである。
Expo では対応できない Native の機能を利用する場合、Eject という手続きで Expo から抜ける。抜けた後のビルドには Xcode や Android Studio を利用することになる。
実際問題、最新のフレームワークの機能を利用するためには Eject しなくてはならないケースがほとんど。この場合、色々と謎の行動を示すようになるのでお勧めできない。
作成したソースコードに問題があって生じるバグなのか、React Native のバグなのか判定に時間が取られる。日常的にデバッグに専従するチームを抱えなくてはならなくなり、何のために「手早く開発したのか分からない」結果が待ち受ける。
開発者としても日頃謎の現象に出会すことが少なくない。Android エミュレータを取り替えると一回目のビルドは途中で止まるので、やむを得ず一旦プロセスを殺してからもう一度ビルドすると元気にエミュレータでアプリが起動する、等々。
課金アプリ、有料アプリでは返金などのリスクが増えるので採用しない方が良いだろう。広告収入で開発チームを維持できるような「うらやましい」アプリ限定かも知れない。
Flutter
Google が作ったオープンソースのネイティブアプリケーション開発フレームワークである。
Dart という共通言語で開発を行う。React Native との違いは Dart が JVM の「ネイティブ言語」で Java や Kotlin と同列のものである点。詳しいデバッグができるので React Native で感じる「隔靴掻痒」感は少ない。
開発環境(IDE)は Android Studio を使うが iOS のビルドには Xcode 11.4~が実行できる macOS 搭載マシンつまりmacOS Catalina 以降の動いているマックが必要である。古いものなら Core i7 搭載のものが良いと思われる。新しいものなら Core i5 でも十分だろう。メモリは最低でも 8GB。
ちなみに Flutter Studio は Flutter の UI 作成のために使えるサイト。ビルドのためのものではない。Flutter を採用するなら使うことになるのではないかと思われる。
Flutter ではそれぞれの Native パートをプロジェクト含めることができる。
Xamarin
Microsoft が作ったオープンソースのネイティブアプリケーション開発フレームワークである。
本家のサイトによると
Anything you can do in Objective-C or Java, you can do in C#
とのこと。Swift や Kotlin でないのが気になる・・・。
Visual Studio での.NET 開発に慣れたチームで開発するならこちらかも知れない。Native のラッパーというイメージが一番ぴったりくると思う。ただ最新のものへの対応は一歩遅れる可能性が高い。
大きなメリットが macOS, Windows (Phone も!)を開発ターゲットにできること。
やったことがないのでこれ以上の論評は避ける。
Native
両方のチームが協力的な関係であれば、これに勝るものはない。とにかく風通しの良いチームを形成することが大事で、間違っても競い合わせるようなことはしてはいけない。
まとめ
Android と Apple 系、二つのチームを持てる、あるいは両方を担当できるチームが形成できるなら Native 一択でしょう。どちらのプラットフォームも UI 周りを含めて開発全般が現在、変革期です。ここで乗り遅れると取り戻すのは大変になると思われます。
そうでない場合、既存チームの構成に応じて React Native、Flutter、Xamarin を選ぶ感じでしょうね。クロスプラットフォーム系に走るならそれを究める気持ちで行くしかないですね。
- JavaScript が得意 => React Native
- Android(Java 等 JVM の言語利用)開発に慣れている => Flutter
- .NET 開発(特に C#)に慣れている => Xamarin
これまでに Android 開発アプリを行ってきた場合、iOS アプリ経験者を集めにくければ Flutter という事になると思われます。
React Native は Expo から Eject しなくてはならないことが事前に分かっているならお勧めできません。開発コストを抑えてもメンテナンス効率が悪くなりがちですから長期的には損になりかねません。
いずれの道を通るにせよ、とにかく英語で情報収集できないとお話になりません。本家サイトを始め、サンプル作成、ベストプラクティスなどまとまった最新の情報が展開されているのは全て英語だと思って良いでしょう。