Windows Azure Storage を利用した Windows Phone アプリケーションの開発~クラウドカバー Episode 66
今回のクラウドカバーは、Windows Phone アプリケーションにおける Windows Azure Storage の活用についてです。
話す内容が多いためか、さくさく進みます!
まずはいつものようにニュースから。
◆ Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency
Windows Azure Storage チームに在籍する Distinguished Engineer な Brad Calder による Windows Azure Storage に関する論文の紹介です。
Windows Azure Storage のアーキテクチャや、設計の背景にある理論的な考え、実運用からのラーニングなどがまとめられています。
Windows Azure Platform が ISO 27001認証を取得しました。これは第3者審査機関(BSI)による電子形式の Certification です。
ISO 27001は、情報資産を保護し、利害関係者の信頼を得るセキュリティ体制の確保を目的とするフレームワークです。ISO 27001 の詳しい内容については BSI の日本語のページを確認ください。
◆ New Webcast Series Explores SQL Azure Data Sync
SQL Azure の Data Sync に関する Webcast のシリーズが開始されました。手始めに3つの Webcast が公開されています。
SQL Azure の Data Sync 技術は、オンプレミスの SQL Server と、クラウドの SQL Azure を同期させるためのテクノロジです。Windows Azure の管理ポータルからさくさくっと設定を行うことで、利用が可能になります。
◆ New Windows Azure Marketplace Data Delivers the Latest Weather and Stock Information
SaaS アプリケーションおよび、価値あるデータを販売する基盤機能と流通機能を提供している Windows Azure の Marketplace において、新しいデータとして、Worldwide Historical Weather Data と The Stock Sonar が追加されました。前者は、Weather Trends International 社の提供で、2000年から現在までの世界各地の気象データがおさめられています。毎月 100件までの問い合わせであれば、クレジットカードなしで利用できますので、まずはお試しください。
また、後者は、上場企業に関する様々な情報源からの評価と、実際の株価の動きを確認することのできるデータです。残念ながらこちらは日本からは利用できないようです(Marketplace では販売を行う地域を指定することが可能です)。
Windows Azure Marketplace に関してはホワイトペーパー:Windows Azure Marketplace もしくは 日本語の Web サイト にてご確認ください。
ということで、本日の本題、Windows Azure Storage を利用した Windows Phone アプリケーションの開発について。
Windows Phone 向けの Windows Azure Toolkit では Windows Phone アプリケーションにおいて Windows Azure の機能を活用するためのコードサンプルが付属しているのですが、その範囲は Windows Azure Storage、SQL Azure、Access Control Service、Push Notification、と広範にわたっており、このうち一つの機能だけ使いたい、という場合にコードを抜き出す必要がありました。
これを最近のリリースから、依存関係をクリアにし、NuGet 対応を行うことで、必要な機能のみ、あるいは必要な機能の組み合わせをシンプルに利用できるようになっています。
今回のクラウドカバーでは、この中で Windows Azure Storage の利用を中心に紹介します。
では、早速デモ開始です。
まずは、Windows Phone 用の Sileverlight アプリケーションのプロジェクトテンプレートを利用し、Windows Phone OS 7.1 (コードネーム “Mango”) をターゲットにしたプロジェクトを作成します。
ここから Windows Azure Storage を使用するアプリケーションを構築しますが、今回利用する NuGet パッケージを利用することで、通常の Windows Azure Storage を利用するアプリケーションと同様の手順で Windows Phone アプリケーションからも Windows Azure Storage を利用することが可能になります。
まずは、Package Manager において、Install-Paclkage Phone.Storage を実行しましょう。
NuGet が利用するパッケージ(Phone.Storage)に関して依存関係等もチェックしながら、必要なクラスや定義ファイルをプロジェクトに組み込んでくれます。
この際に Phone.Storage パッケージを使用するためのドキュメントも一緒についてきますので確認ください。
さて、今回のパッケージを使用するうえで、まず最初に確認するのが StorageInitialiuzer.cs なファイル。作成したプロジェクトの App_Start 名前空間上で、StorageInitializer クラスとしての定義が書かれています。
Windows Azure Storage を利用した開発においては、開発環境(ローカルPC)にある Storage エミュレーター、もしくは Windows Azure にある実際の Storage を切り分けながら使用します。
通常は開発途中においてはエミュレーターを、開発が終盤に来たあたりで(あるいは開発初期に応答時間などのエクスペリエンスを確認する際などに) Windows Azure の Storage を使用することになると思います。
今回の StorageInitializer クラスでは、デフォルトではエミュレーターを使用するコードになっていますが、コメントアウトする形で Windows Azure の Storage を使用するためのコードサンプルも用意されていますので、開発のステージによって切り分けて使用してください。(resolver 部分のコードです)
ただし、この Windows Azure Storage を利用するためのコードサンプルにおいては、直接的に Windows Azure Storage への認証情報をコードに埋め込む必要があります。
Windows Phone アプリケーションを配布する際に、もしこのコードがそのまま配布されると、Windwos Azure Storage への認証情報もアプリケーションユーザーに配布されることになってしまいますので、セキュリティ上好ましい状態ではありません。
この部分に関しては、プロキシーを利用した resolver を準備する(Windows Azure 上に Storage の認証情報を持つプロキシーサービスを用意し、Windows Phone アプリケーションからはそのサービス経由で Windows Azure Storage にアクセスする、といったイメージ。具体的な手順等は後半で出てきます)、といった対応が必要になります。
今回の Phone.Storage パッケージにおいては、このように resolver クラスを介在させることで、エミュレーターを利用する、直接 Windows Azure Storage を利用する、プロキシーサービスを利用して Windows Azure Storage を間接的に利用する、といった切り替えが可能な設計になっています。
さて、Widnows Azure Storage のキューにデータを追加するための、”Add to Queue” ボタンを追加し、ボタンが押された時のロジックを実装しましょう。
Episode 64 では元 Cloud Cover 担当の Ryan に、(スニペットを使わず)「コード書こうぜ」、プレッシャーをかけれらていた Wade ですが、今回もさくっと、コードスニペットでコーディングを進めます :-)
なお、同じコードが、Phone.Storage.Readme.htm の “Queue Sample” にありますので、Phone.Storage パッケージを試したい方は、写経もしくはコピペでお進めください。
また、このコーディング中に Tips として出てきますが、Visual Studio から出されるコードへのアドバイス(using の追加など)は、[Ctrl] + [.] でも出せます。今まで頑張ってマウスを動かしていましたが、こんなショートカットがあったのですね
Windwos Azure Storage のアクセスロジックに関しては、今回導入した Phone.Storage パッケージのおかげで通常の Windows Azure アプリケーション同様に書くことが可能です。
ここで、アプリケーションをデバッグ実行しましょう。
Azure Storage Explorer を使って、エミュレーター(ローカルストレージ)の状態を確認しながら “Add to Queue” ボタンを押すと、データが追加されるのがわかります。
なお、Queue データも確認できて便利な、Wade が使用している Azure Storage Explorer は、Codeplex からダウンロード、インストール可能です(Table と Blob の表示であれば Visual Studio のサーバーエクスプローラーから確認できますので、そちらもご利用ください(Professional Edition 以上での機能になります))。
引き続き、Tabel を利用するためのサンプルを書いていきます。
基本的なアクセスは Queue と同じようなロジックになりますが、Tabel の場合、Partition Key、Row Key をどのようにするか、またどのようなデータ型の項目を含むか等の Entity の定義が必要になります。
これらのコードも、Phone.Storage.Readme.htm に収められていますので、さくっとコピペいただき、[Ctrl] + [.] で using を補完したのち、F5 (デバッグ実行)していただくことで、簡単に試していただくことが可能です。
下記は私の環境で試した結果。
最後は、Blob なサンプル。これもさくっと、動きます。
さて、resolver に話を戻しましょう。
これまではエミュレーター(ローカル PC上の Development Storage)を利用していましたが、これを実際の Windows Azure Storage を利用するように書き換えます。
あらかじめコメントの形で用意されているコードを使って、ストレージの情報を追加で入れていきます。
コードの変更は以上です。これで先ほどのアプリケーションが、実際の Windows Azure Storage へ接続するようになりました。実際に試すと、Windows Azure Storage に用意された Wade の Purgeme なストレージにて、データが追加されているのを確認できます。
ただこの状態ではエンドユーザーが利用する Windows Phone アプリケーション個々に Windows Azure Storage への認証情報が含まれたまま配布されることになります。
そこで、前述したプロキシーモデルを使った resolver のコードに変更していきます。
まずは、プロキシーサービスを立ち上げるために、Windows Azure のプロジェクトとして MVC3 の Web Role を作成します。
次に、Package Manager から作成した Web Role のプロジェクトに、WindowsAzure.Storage パッケージをインストールします。
すると、App_Start フォルダに StorageServices.cs が作成されますので、ここのストレージアカウント情報を Windows Azure Storage に接続する情報に変更します。
これで、プロキシーサービスが完成です(ほんとに簡単です)。
Windows Phone アプリケーションの resolver の設定コードで、このプロキシーサービスを利用するようにコードを変更しましょう(コメントとして用意されているコードを利用するだけです。実際にプロキシーサービスを Windows Azure にデプロイしたのちは、その URL に切り替えてください)。
これだけで、プロキシーサービスを経由した Windows Azure Storage アクセスができるようになりました!
このように、NuGet を活用することで、(様々な仕組みが組み合わさったサンプルのコードを利用するのではなく)プレーンなプロジェクト状態から、必要なコンポーネント(パッケージ)だけを利用してアプリケーションをスピーディに構築することが可能です。
また、Phone.Identity や Phone.Notification パッケージなどと組み合わせることで、より高度なアクセス管理、機能を利用したアプリケーション シナリオも実現可能です。
ぜひ、Windows Azure を活用した Windows Phone アプリケーション開発にトライしてみてください。
では、最後に恒例の Tip of the Week!
Wade のブログより、NuGet の Package Manager を使って Windows Phone 開発用のパッケージ(Phone.Storage)をインストールしようとするとエラーになってしまう件に関する解決法です。これは Package Manager のバージョンを新しいものに更新することで解決します。
ちなみに、Steve からは、いちいちバージョンチェックしなくても、拡張機能マネージャーの「更新プログラム」の項目のチェックでOKなんじゃない?、という新たな Tips が。
Visual Studio のオプション設定で、更新プログラムを自動的にチェックするように設定することも可能です。
ということで、クラウドカバー Episode 66 の紹介でした。
Enjoy!