ハイブリッドアプリで使えるデータベースまとめ
ハイブリッドアプリでデータベースを利用したいときのあれこれをまとめました。私の製作環境はMonacaですが、Cordova環境全般に同様です。
使用できるデータベース・ストレージの選択肢が多い事は良い事なのですが、結局どんなアプリにはどのデータベースがいいのか迷ってしまいます。例えば、ゲームスコアのランキングやハイスコア、サービスのユーザー認証、スケジュール管理、シンプルなメモ帳などなど。また、ローカル(オフライン)だけで完結させるのか、サーバーへアクセスさせるのかも重要です。
ざっと思いつくだけでも下記をデータベースとして使えそうです。
- Web Storage
localStorage、sessionStorage - IndexedDB
- WebSQL
- 外部管理サーバーDBアクセス
- mBaaS(外部バックエンドサービス)
Monaca バックエンド、ニフティクラウド、Kii Cloud、Microsoft Azure Mobile Apps、Parseなど
この他にFile APIやApplication Cacheなどもデータの保存・参照先としてありますが、データベースとは直接関係ないので割愛します。
それぞれの軽い説明とメリット・デメリット、どのようなシーンで使えるかを紹介します。なお私の知識が浅い部分も多いので、ここ間違ってるよ!!などあればコメントしていただけると助かります。
Web Storage(localStorage,sessionStorage)
Web StorageとはHTML5で追加された機能です。いわゆるKVS(キーバリューストア)と呼ばれるデータ管理手法で、任意の保存したいデータ(値:value)に対し、対応する一意の標識(key)を設定し、これらをペアでブラウザに保存する方式です。つまりJSONデータのような形式ですね。永続的にデータを保存できるlocalStorageと、アプリの起動の度にデータをクリアするsessionStorageとがあります。
メリット
- SQL構文が分からなくても扱いが簡単で、面倒な初期化処理もない。
- ネットが繋がっていなくても使用できる。
- ほとんどのデバイス・環境で使用できる。
- オリジン単位でデータを管理しているため、他のアプリにデータが漏えいする心配がない。
デメリット
- 容量に制限がある。(5~10MB程度)
- 基本的に機種変更時にデータ引継ぎが出来無い。
- 複雑な処理をしようとすると、冗長で煩雑なコードになる。DBで言うインデックスやトランザクションが使えない。
- 他の端末とのデータ連携が出来ない。(ユーザーランキングなど)
使用シーン
- シンプルなメモ
- シンプルなTODOリスト
- ゲームのハイスコア
- アプリ内の諸々の設定
IndexedDB
WebSQLに代わって策定が進められているデータ管理機能がIndexedDBです。Web Storageと同じくKVS(キーバリューストア)と呼ばれるデータ管理手法で、任意の保存したいデータ(値:value)に対し、対応する一意の標識(key)を設定し、これらをペアでブラウザに永続的に保存する方式です。またインデックス機能やトランザクション機能が使用でき、データベースとして高度な機能を備えています。Web Storageの高機能版ですね。ただ、現状(2016年3月)では使えるデバイス・環境が少ないため実装は現実的ではありません。
メリット
- SQL構文が分からなくても扱える。Web Storageに比べても若干煩雑な程度。
- ネットが繋がっていなくても使用できる。
- 複雑な処理が出来る。インデックスやトランザクションの使用も可能。
- オリジン単位でデータを管理しているため、他のアプリにデータが漏えいする心配がない。
デメリット
- 使用できる環境が少ない。iOS 8以降・Android 4.4以降。
- 基本的に機種変更時にデータ引継ぎが出来無い。
- 他の端末とのデータ連携が出来ない。(ユーザーランキングなど)
使用シーン
- ローカル(オフライン)で完結するデータ全般。(現状ではまだ使わない方が良い)
WebSQL
WebSQLとはブラウザ内に保存できるリレーショナルデータベースです。SQLite 3系をベースとしており、データベースとして様々な機能を提供しています。MySQLなどに近いですが、フロントエンドのJavaScriptから利用できます。ただW3Cでの標準化はされておらず、万が一機能が取り除かれる恐れがあります。(WebKitからWebSQL機能が取り除かれる予定はないとの事ですが)ちなみにスマートフォン環境だとほとんどのデバイスが対応していますが、PCではIE・Edge・Firefoxが対応していないため、Chrome・Safariでの開発が推奨です。
メリット
- ネットが繋がっていなくても使用できる。
- 基本的な SQL 構文を扱えるので複雑なデータや処理に向いている。
- オリジン単位でデータを管理しているため、他のアプリにデータが漏えいする心配がない。
デメリット
- SQL構文の知識が必要。
- 基本的に機種変更時にデータ引継ぎが出来無い。
- 他の端末とのデータ連携が出来ない。(ユーザーランキングなど)
使用シーン
- 売上・在庫管理
- スケジュール・タスク管理
- 複雑なデータ管理全般
外部管理サーバーDBアクセス
自分で運営しているサーバーのデータベース(MySQLやPostgreSQLなど)へアクセスし、データを管理することも出来ます。アプリ内でajax通信をし、サーバー側のPHP等からデータベースへ接続しデータを返します。それぞれの知識が必要なため今回紹介する中だと一番大変かと思います。特にセキュリティ周りを気に付けなければいけないため、個人情報などを扱う場合は自信がない方は控えた方が良いでしょう。
メリット
- 複数端末のデータ連携が出来る。(ユーザーランキングなど)
- データをクラウドとして様々なサービスで使用できる。
- 複雑なデータ・処理の扱いが可能。
- 機種変更時でもユーザー認証が出来ればデータが引き継げる。
- データ容量の制限がない。(サーバーの容量次第)
デメリット
- PHPなどのサーバー側言語やSQLの知識が必要。
- ネット環境が必要で、データを取得するまでに時間がかかる。
- セキュリティ面など気を付ける点が多い。
使用シーン
- Webサービス連携
- 全ユーザースコアランキング
- SNS
- 膨大なデータ管理
mBaaS(外部バックエンドサービス)
最近よく見にするBaas(Backend as a Service)のモバイル版(mobile)のmBaaS、サービスによって機能は様々ですが大変便利です。データストレージだけではなく会員管理やプッシュ通信、SNS連携など様々な機能を簡単に扱うことが出来ます。ただ月のリクエスト数や機能の追加などによって料金がかかる場合があります。また、オープンソースのBaaSもある為、知識があれば前章の自サーバーのデータベースと組み合わせることもできます。
メリット
- 複数端末のデータ連携が出来る。(ユーザーランキングなど)
- データをクラウドとして様々なサービスで使用できる。
- 機種変更時でもユーザー認証が出来ればデータが引き継げる。
- 開発が簡単で様々な機能が利用できる。
デメリット
- 規模によっては料金がかかる。
- ネット環境が必要で、データを取得するまでに時間がかかる。
使用シーン
- Webサービス連携
- 全ユーザースコアランキング
- SNS
- などなど様々なアプリ
まとめ
と言うわけで色々まとめてみました。matorelでも2つのアプリをリリースしていますが、どちらもWebSQLを使っています。ただ片方はハイスコアを登録するだけなのでlocalStorageで十分でした。。。今度直そうかな。
ただアプリを拡張していく段階で色々な機能を持たせたいのでmBaaSも使っていきたいと思います。またネット環境がなくても扱えるようにするためlocalStorageかWebSQLと組み合わせるとより良さそうです。
もし情報が間違っていたらぜひ下のコメント欄よりご指摘ください。