Yuta Watanabe's Blog

開発周りと、その他諸々

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 というテーブルを作成してみます。

"データ" タブより、テーブルの追加をクリックし、テーブル名を入力します。

f:id:yuwata:20140821120739p:plain

f:id:yuwata:20140821120724p:plain

すると、下図のようにデフォルトのスキーマでテーブルが作成されます。

f:id:yuwata:20140821120628p:plain

そして、このテーブルの実体はどこにあるのか?ということなのですが、先に述べたとおりモバイル サービス作成時に関連付けられた SQL データベースにあります。

ダッシュボードタブの右下に、関連付けられているデータベースが表示されていますので、クリックして SQL データベースのページに進みます。

f:id:yuwata:20140821120653p:plain

表示されたクイックスタートの中で、”データベースに接続する” の下に、” SQL データベースの設計 ”がありますので、クリックして SQL データベースの Management Portal にログオンします。

f:id:yuwata:20140821120846p:plain

すると、先ほどモバイルサービスの管理画面上から作成した SampleItem テーブルが表示されていることが確認できます。f:id:yuwata:20140821120756p:plain

スキーマも同じです。

f:id:yuwata:20140821120816p:plain

つまりモバイルサービスは、モバイルサービス専用の何か特殊なデータベースを持っているわけではなく、SQL データベースをより簡単に利用するための窓口を提供しているのです。

記事の冒頭でも述べたとおり、Microsoft Azure モバイル サービスには、アプリのバックエンドバックエンドで必要とされる Microsoft Azure サービスがまとめて提供されています。データに関しても同様で、細かな設定や作業をしなくても、簡単にテーブルが作成できる上に、アプリ側からデータを操作するための SDK も提供されているという形です。

加えて、モバイル アプリで活用頻度が高そうな、データ操作時のオフライン/オンラインハンドリング/同期の仕組みも提供されています。

既定の SQL データベース以外の保存先

既定では、新規にモバイル サービスを作成した際に関連付けた SQL データベースにデータは保存されていきます。そしてさらに、その他の保存先もモバイルサービスでは利用することができます。具体的には、使用している既存の SQL データベースであったり、クラウドではなくオンプレミス環境の SQL データベース、SQL ではなく、MongoDB も、モバイルサービスのデータ保存先として利用することができます。

テーブルの作成方法とロジック実装

先ほどは、JavaScript バックエンドのモバイルサービスにて、新しくテーブルを作成してみました。JavaScript バックエンドの場合は、上述の通りブラウザ上の管理画面からテーブルを作成したり、データ操作に際する処理を行うコードを書いていくことができます。もちろん Visual Studio からも実装できます

また、これらに加えて、Dynamic Scheme ( 動的スキーマ ) も、JavaScript バックエンドを選択した際に出来ることの1つです。設定は、"構成"タブから行います。

f:id:yuwata:20140821120544p:plain

動的スキーマを有効にすると、例えば存在しない列を指定して新しくデータが追加された場合等に、モバイルサービスが自動的にテーブルに列を追加して保存してくれます。逆に無効にすると、既存の列に対応するプロパティを持つデータのみを受け付けます。アプリケーションが稼働状態になったら、動的スキーマを無効にするとよいでしょう。

一方、.NET バックエンドを選択した場合は、ソースコードによってデータベースの設計を定義します ( Entity Framework のコードファースト )。なので、動的スキーマは使えません。そして、JavaScript バックエンドの際は、管理画面から直接コードを書くこともできたテーブル操作のロジック実装は、.NET バックエンドではプロジェクト内の TableController で行います

f:id:yuwata:20140821121213p:plain

今回は、モバイルサービスにおけるデータの扱われ方について概要を確認しました。それぞれの機能や拡張例については、追って適宜解説していきたいと思います。