AndroidとiOS向けにガワネイティブアプリを開発した経験を振り返ります。
業務では初のアプリ開発でしたが、意外とそれらしいものが出来上がったので、
これからクロスプラットフォーム向けにアプリを開発するときの参考にしてもらえればと思います。
ガワネイティブアプリとは
WebViewで特定のサーバにhostされたWebページを表示するだけのアプリのことです。
選んだ技術
Cordovaは普通に実装するとweb assetで記述したリソースファイルをCordovaが用意したWebViewで表示してクロスプラットフォーム対応が行えるフレームワークです。
web assetはスマホ本体にインストールしたファイルだけでなくインターネットから取得したものも扱うことができます。
良かったこと
- アプリ本体のリリースとweb assetのリリースを分割できた
- AppStoreの審査を通さずにアプリの振る舞いを修正できる
- リリースのタイミングをコントロールできる
- クライアント・サーバ間のバージョンの差を吸収する方法がシンプルになる
- (アプリインストールに比べれば)バージョンアップに伴うユーザの負担も小さめ
- フロントを記述する言語を統一できた
- PC用とスマホ用の画面の処理を共通化できる
- JavaやSwiftなどの言語を知らなくてもいい
- 開発に参加するためのハードルが低い(パートナー、アルバイト)
- HTMLとCSSの知識があればスマホのスタイルも変更できる
- デザイナーがそのまま実装できる
- こちらの記事で言われていることがそのままメリットになってます
- E2Eテストも同じフレームワーク上で動かすことができる
- 結局のところどちらもブラウザアプリのため
- ネイティブの機能を使うテストは別途必要
悪かったこと
- ネイティブの機能を使うと自由度が減る
- ネイティブの機能を使うためにはpluginが必要
- pluginがない場合、自前で用意しなければならない
- 開発メンバーがネイティブに強くないと諦めるしかない
- 逆に言えば個別に実装するスキルがあれば強みにも成りうる
- スピードを出すためには頑張りが必要
- リソースをネットから取得するため初回読込時間にネイティブ版との差が出る
- キャッシュだけだと容量的に辛い
- デバイスのストレージをキャッシュとして使うなどの工夫が必要
- pluginを使うためにはアプリのリリースが必要
- あれ、、結局アプリもリリースすんの?
- とはいえ必要最小限のpluginさえ入っていればあとはリリース不要
- ブラウザではなくCordova WebViewなので独特の振る舞いがある
- dynamic importが未対応
ガワネイティブとネイティブで変わらないこと
- OS、デバイス固有の問題への対応
- ガワネイティブに関わらず発生する
- ただしデバッグはしづらい
- ガワネイティブに関わらず発生する
- デザイン
- UIフレームワークでAndroid、iOSでそれぞれ用意されたものがあり、出し分けは可能
- しかしHTML構造が基本共通のため、そこから逸脱しないと実現できないデザインは諦めるしかない
- HTML構造を分ければ実現可能だがクロスプラットフォームの旨味との天秤
- 古いAndroid OSへの対応
- Android 5.0未満は切り捨て、これは全体の8.6%程度
- メルカリも5.0未満は切り捨てている
- Cordovaのバージョンに依存
- Android 5.0未満は切り捨て、これは全体の8.6%程度
PWAとはどう違うのか
PWAはアプリをそもそもインストールしなくても良い、というメリットがありますが、
iOSの11.3からsafariがservice workerをサポートしたとはいえ、まだ機能不足という印象です。
また、以下の記事にもあるようにAndroidでもPWA版のサイトをユーザに利用してもらうための導線が貧弱で、コンシューマ向けに展開するのは難しいと思います。
今後、ガワネイティブとPWAのいずれかを選択するのであれば、当分はガワネイティブになるだろうと思います。
(PWA版も開発することになった場合はガワネイティブの資産を流用してリリースできるメリットがあるので)
結論
ガワネイティブをやるならCordovaに限った話ではないですが、
Cordovaはpluginも豊富で技術としては古いので知見もネットに沢山転がっています。
フロントと言語の共通化ができる点など特にチーム開発で扱うには向いているかなと思います。