アプリを開発していれば何らかのデータが発生します。例えばチャットであればテキストデータが、写真アプリであれば写真データが作成されます。

ゲームのようなものでも得点という数字データが作成されます。こうしたデータをどこに保存するのがいいのか、利用目的別に解説します。

ローカルまたはクラウド

まずデータをローカル(アプリ内)に残すか、クラウド上(インターネット上)に蓄積するのかの2種類に大別されます。

ローカルにデータを残した場合、インターネットを使わないので、セキュアというのが利点になるでしょう。インターネット上に蓄積する以上、一定のセキュリティリスクはあります。もちろん通信をSSL/TLSにしたり、認証を介したりすることでデータの安全性を担保することができるでしょう。

項目 ローカル クラウド
セキュリティリスク

クラウドにデータを保存する場合、利用時にはインターネットが必要になります。

スマートフォンやタブレットであればインターネットに繋がった状態であるのが当たり前になっていますが、移動中や僻地などインターネット状態が悪い時には利用しづらくなるかも知れません。ローカルにあるデータを使うだけであれば、そうした心配は不要でしょう。

対策として、クラウド上のデータを利用する際にもデータをローカルにキャッシュするのがお勧めです。オフラインやネットワーク状態が悪い環境ではキャッシュを優先して利用するようにします。

データをアップロードする際にも、キャッシュを残してからアップロードすることで、ネットワーク状態が悪くてアップロードに失敗した際にも、後でネットワークが回復した際に再開できる仕組みが作れます。

項目 ローカル クラウド
セキュリティリスク
オフライン時の利用

ストレージ容量という観点ではどうでしょうか。

ローカルの場合、スマートフォンのストレージ容量に左右されます。これは皆さんの作るアプリだけでなく、他のアプリによっても影響を受けます。

特に写真や音楽をたくさん保存しているデバイスでは、あまり余裕がないかも知れません。クラウドにデータを保存する場合、そうした影響は小さくなるでしょう。

項目 ローカル クラウド
セキュリティリスク
オフライン時の利用
ストレージ

アプリを削除した場合、ローカルに残したデータは削除されてしまいます。もう一度インストールし直すと、これまでに保存したデータはなくなってしまいます。

クラウドの場合、通常は認証を行います。その結果、アプリを再インストールしたとしても同じ認証を使うことでデータを復旧可能です。

項目 ローカル クラウド
セキュリティリスク
オフライン時の利用
ストレージ
データ復旧 ×

アプリによってデータを他のユーザと共有したいと考えるかも知れません。チャットやランキング、ソーシャルアプリなどでは必須の機能です。

ローカルにデータがある場合には難しいでしょう。クラウドのデータであれば、許可したデータだけ共有すれば済みます。データ共有はクラウドにデータを保存するニーズの一つでしょう。

項目 ローカル クラウド
セキュリティリスク
オフライン時の利用
ストレージ
データ復旧 ×
データ共有 ×

アプリを運用している場面を考慮すると、アプリが動かなくなった、エラーが出るといった場合にデータの状態が原因であることがよくあります。

ユーザが入力したデータが誤ったものであり、それが原因でエラーになってしまうケースです。そうした時、データがクラウドにあるとサポートしやすくなります。ローカルにあるデータはユーザ自身しか見えず(とはいえ、生データを見られる訳ではありません)、遠隔からではサポートが困難です。

項目 ローカル クラウド
セキュリティリスク
オフライン時の利用
ストレージ
データ復旧 ×
データ共有 ×
サポート

データの種類による保存先の考え方

次にデータの種類を念頭に保存先を考えていきます。ここではローカルでのデータ保存を対象にしています。

パスワードやセキュアなデータ

万一にも漏洩させたくないセキュアなデータは、暗号化して保存しておくのがいいでしょう。例えばTouch IDやFace IDを使う方法が挙げられます。ここで保存されるデータはあまり長大ではないテキストデータを対象としています。

sjhoeksma/cordova-plugin-keychain-touch-id: Touch ID plugin with saving password in keychain for IOS and android

MonacaのBusiness/エンタープライズプランでは、セキュアストレージプラグインが利用できます。これを使えば、データをセキュアに保存できます。

セキュア ストレージ プラグイン | Monaca Docs

テキストデータ

特にセキュリティ上のリスクはないテキストデータであれば localStorage で保存することもできます。これはHTML5 APIで提供される同期的ストレージです。

Window.localStorage - Web API | MDN

さらに短いテキストであれば Cookie を使うこともできます。ただし有効期限があるので、localStorage の方がお勧めです。

HTTP Cookie - HTTP | MDN

ファイル

写真やテキストファイルといったデータであれば、ファイル操作プラグインが利用できます。アプリ内であったり、AndroidであればSDカードなどのデータにアクセスできる機能です。

ファイル操作 プラグイン | Monaca Docs

構造化されたデータ

商品一覧、お知らせ一覧など構造化されたデータは一般的にはデータベースに保存されます。

ほんの小さなファイルであればJSONファイルとして保存しておくこともできます。もう少し大きなデータベースであれば、SQLite Storageプラグインが使えるでしょう。こちらは一般的なSQLが使えますので、より簡単にデータ管理ができます。

Cordova Sqlite Storage プラグイン | Monaca Docs

HTML5 APIとしてはIndexedDBやWebSQLがあります(WebSQLは非推奨になっています)。

IndexedDB API - Web API | MDN

データベースの利用方法 | Monaca Docs

クラウドへの保存

クラウド(インターネット上)への保存については、自前でサーバを立てる他、クラウドサービスやmBaaSを使うという選択肢もあります。

これらのサービスを比較する際にはあなたに最適なmBaaSはどれ?AWS Mobile HUB / Firebase / ニフクラ mobile backend 三社を比較検証!を参考にしてください。

この他、アプリやiOS/Androidでストレージ機能も提供しています。これらを使うことで、アプリ内のローカルに保存しているようで、実体はクラウドに保存されるといった形にもできます。こうしたサービスを使うのは、個人のデータをローカルとクラウドに保存する目的になります。不特定多数が使うストレージとしての提供は推奨されないでしょう。

まとめ

ハイブリッドアプリの適切なデータ保存先、方法についてはデータの特性や、実現したい機能によって異なります。今回書いたような基準によって最適な方法を選んでください。