ハイブリッドアプリの使いどころと落とし穴
ハイブリッドアプリとして一般的に向く用途を記したものが図2になります。既にWebとして提供しているようなサービスであれば、そのアプリはハイブリッドアプリとして適していると言っていいと思います。
特にニュース系アプリなどデザインやUIを頻繁に更新するようなアプリや、データの管理を扱う業務アプリなどは非常に適しているといえます。反対にハイブリッドアプリとして適していないのは、速度を求められるケースです。画面の反応速度に関してはどうにもならず、画面表示の更新が10ms以下のレベルで求められる場合や、グラフィックアプリのような画面への微妙なタッチの違いが求められる場合、そして、画像や映像などのマルチメディアデータをバイナリとして扱う場合や、3D計算など大量の単純な演算を即時に処理をして画面に反映しなければならない場合には、それらをハイブリッドアプリとして実装することは困難を極めます。
このような場合には、ネイティブアプリであってもパフォーマンスを保ちながら実装することが難しいので、ハイブリッドアプリには適しているとはいえません。
一方で、画面の切替や、一時的な通信遅延などへの対応はすでに高いレベルでブラウザ自身が持っていますので、ネイティブで作り込むよりも快適になるケースもあります。用途によっては、ネイティブアプリよりも「速い」という体感をえられることもあります。
Web開発者にとっては、ネイティブアプリを作る際には新しい言語など多くのことを新たに覚える必要があるため、Web技術を既に知っているの場合にはそれらの知識やリソースを利用し、アプリの作成ができます。このこと自体が、最もハイブリッドアプリを採用するメリットになるはずです。
しかし、ハイブリッドアプリではよく陥りやすい問題があることも事実です。以下に説明するこれらの問題のほとんどは、ハイブリッドアプリ固有の問題ではありませんが、どうしてもWebの常識のままアプリを作りがちなために生じてしまう場合が多いです。
ネイティブアプリを作ったことがある人が周りに全くいない場合や、実際にスマートフォンでアプリをあまり使っていないという場合にはこれらのギャップを埋めることは難しくなりますので、ある程度の規模のアプリを作る場合には、ネイティブエンジニアなどの助言を受けつつ開発を進めることをおすすめします。
具体的には以下の問題、もしくは障害にぶつかっている場合が多いようです。
- セキュリティ・プライバシーに関する問題
- データ保護に関する問題
- オフライン時(ネットワークが長い時間使えない場合)の問題
セキュリティ・プライバシーに関する問題
WebViewで動作している情報はPCブラウザのデバッグツールなどを使って比較的簡単にコードなどが参照できます。したがって、サーバに接続する際のパスワードなどをJavaScript内に記述することは避ける必要があります。
また、Androidでは機能を利用する際にはあらかじめ宣言を行ってから機能を利用しますが、面倒なためか利用しない機能も含めて多くの宣言がされている場合があります。
スマートフォンには個人情報がたくさん入っています。例えば、電話帳などの情報を利用しないにもかかわらず、それらにアクセスする設定を行っていると利用者から不審がられます。また、利用しない機能の部分は脆弱性の対策にも、必要な機能のみを宣言する必要があります。
Cordovaはプラグイン形式になっていますので、利用しない機能があらかじめ有効になっていることはありませんが、最初のうちは使わないプラグインも、便利だからといって導入してしまいがちです。使うかわからないプラグインをあらかじめ導入しておくことは避けてください。
データ保護に関する問題
Cordovaを用いて端末内にデータを保存する場合には、HTML5のストレージ機能を用いるか、プラグインを用いてネイティブ機能を使って保存するのどちらかを選択する必要があります。HTML5のストレージ機能は、デバッグツールなどを用いて参照できるために利用者が参照、もしくは変更しても問題ないようにする必要があり、あまりおすすめできる方法ではありません。したがって、プラグインを用いて保存する方をおすすめします。具体的なプラグインについては次回以降、紹介していきます。
また、サーバに保存する場合にも次に説明するオフラインの問題があり、一時的にでも端末内にデータを保存する必要性が生じてくるケースが多くなります。サーバ連携が前提であっても、この問題については知っておく必要があるでしょう。
ネットワークが長い時間使えない場合の問題
通常のブラウザ上で動作するアプリの場合には、利用者がオンラインでのみ動作する前提のアプリであることは使う際にあらかじめ理解して使っています。ハイブリッドアプリの場合には利用者からは通常のアプリと違いがありませんので、当然オフラインであっても動作は行えるという前提があります。
しかしながら、Webアプリという感覚で作ってしまう傾向があり、ネットワークを必須としてしまうような作り方が見受けられます。たまに、「ページが見つかりません」というブラウザのエラー画面を表示するようなアプリを見受けられますが、このようなエラーは利用者には意図が通じませんので、どうしてもオンラインが必要なケースには、あらかじめネットワークが必要な機能を使っているという告知等に加えて、実際のエラー時にもダイアログなどでキチンとエラー対応をする必要があります。また、WebViewに外部から取得したHTMLをそのまま表示する事は、セキュリティの問題になることもあるため、できるだけ避けた方がよいでしょう。