Microsoft Azure Mobile Service でのデータ アクセスの仕組み
こんにちは。
マイクロソフトの渡辺です。
Microsoft Azure モバイルサービスは、モバイル アプリに必要とされるバックエンドサービスを簡単に構築できるように設計されています。データを始め、プッシュ通知や認証等々、アプリのバックエンドバックエンドで必要とされる Microsoft Azure サービスがまとめて提供されています。
「 Microsoft Azure Mobile Services を JavaScript および .NET バックエンドで作成してみる 」にて、モバイル サービスを新規に作成する流れを確認し、「 Microsoft Azure Mobile Services の JavaScript/.NET バックエンド 選択による違い 」では、バックエンドの実装を JavaScript にするか、.NET にするかの違いについて概観を見てきました。
今回からは、モバイルサービスの各機能についての概要をご紹介していきながら、より具体的な実装方法/活用方法についても適宜扱っていきたいと思います。
今回は、モバイルサービスにおけるデータについてです。
モバイルサービスにおけるデータの保存
そもそも、モバイルサービスを通じて保存したり取得したりしているデータは、どこに保存されているのでしょうか?
基本的には、モバイル サービスの新規作成時に指定 ( または新規作成 ) した SQL データベースに保存されています。
念のため、確認してみましょう。JavaScript バックエンドを選択した場合には、ブラウザ上の管理ポータルからテーブルの作成が行えます。試しに SampleItem というテーブルを作成してみます。
"データ" タブより、テーブルの追加をクリックし、テーブル名を入力します。
すると、下図のようにデフォルトのスキーマでテーブルが作成されます。
そして、このテーブルの実体はどこにあるのか?ということなのですが、先に述べたとおりモバイル サービス作成時に関連付けられた SQL データベースにあります。
ダッシュボードタブの右下に、関連付けられているデータベースが表示されていますので、クリックして SQL データベースのページに進みます。
表示されたクイックスタートの中で、”データベースに接続する” の下に、” SQL データベースの設計 ”がありますので、クリックして SQL データベースの Management Portal にログオンします。
すると、先ほどモバイルサービスの管理画面上から作成した SampleItem テーブルが表示されていることが確認できます。
スキーマも同じです。
つまりモバイルサービスは、モバイルサービス専用の何か特殊なデータベースを持っているわけではなく、SQL データベースをより簡単に利用するための窓口を提供しているのです。
記事の冒頭でも述べたとおり、Microsoft Azure モバイル サービスには、アプリのバックエンドバックエンドで必要とされる Microsoft Azure サービスがまとめて提供されています。データに関しても同様で、細かな設定や作業をしなくても、簡単にテーブルが作成できる上に、アプリ側からデータを操作するための SDK も提供されているという形です。
加えて、モバイル アプリで活用頻度が高そうな、データ操作時のオフライン/オンラインハンドリング/同期の仕組みも提供されています。
既定の SQL データベース以外の保存先
既定では、新規にモバイル サービスを作成した際に関連付けた SQL データベースにデータは保存されていきます。そしてさらに、その他の保存先もモバイルサービスでは利用することができます。具体的には、使用している既存の SQL データベースであったり、クラウドではなくオンプレミス環境の SQL データベース、SQL ではなく、MongoDB も、モバイルサービスのデータ保存先として利用することができます。
テーブルの作成方法とロジック実装
先ほどは、JavaScript バックエンドのモバイルサービスにて、新しくテーブルを作成してみました。JavaScript バックエンドの場合は、上述の通りブラウザ上の管理画面からテーブルを作成したり、データ操作に際する処理を行うコードを書いていくことができます。もちろん Visual Studio からも実装できます。
また、これらに加えて、Dynamic Scheme ( 動的スキーマ ) も、JavaScript バックエンドを選択した際に出来ることの1つです。設定は、"構成"タブから行います。
動的スキーマを有効にすると、例えば存在しない列を指定して新しくデータが追加された場合等に、モバイルサービスが自動的にテーブルに列を追加して保存してくれます。逆に無効にすると、既存の列に対応するプロパティを持つデータのみを受け付けます。アプリケーションが稼働状態になったら、動的スキーマを無効にするとよいでしょう。
一方、.NET バックエンドを選択した場合は、ソースコードによってデータベースの設計を定義します ( Entity Framework のコードファースト )。なので、動的スキーマは使えません。そして、JavaScript バックエンドの際は、管理画面から直接コードを書くこともできたテーブル操作のロジック実装は、.NET バックエンドではプロジェクト内の TableController で行います。
今回は、モバイルサービスにおけるデータの扱われ方について概要を確認しました。それぞれの機能や拡張例については、追って適宜解説していきたいと思います。