読者です 読者をやめる 読者になる 読者になる

Windows Azureの機能を活用してWindowsストアアプリを作ってみた

Azure Windows Store App

年末に少し時間があったので、買ったばかりのMiix2でまとめブログでも読もうかと思って、
Windowsストアを探したところ、自分の好みのアプリが見つからなかったのでどうしようかと思っていたのですが、せっかく時間あるので、自分でアプリを作ってみることにしました。


アプリ概要

アプリの全体像のイメージです。
f:id:yomon8:20140104235939p:plain




これを作るにあたって次の点をポイントにしました。

端末側のアプリの処理を軽くする

Windows8のPCなどなら気にならない計算処理も、
タブレットになるとパフォーマンス的に気になり始めることもあります。
Miix2を使っているのですが、どうしてもCPUがボトルネックになります。
サクサク動くアプリが欲しいと思いました。

Windows Azureを活用

ストアアプリを軽量にしたいのなら、
その分サーバ側で処理を行うのが一つの手だと思います。
そこで、今回はWindows Azureの機能を利用することにしました。
仕事上もWindows Azureを調べないといけないことが増えてきているので、
せっかくなら勉強もかねて色々機能使いたいと思いました。
(結果論ですが、今回の機能範囲は無料枠で全て収まりました。)

時間使わない

年始になれば色々と忙しくなるのはわかっていたので、
年末の31日だけで開発の大枠はけりつけたいと思いました。
そのため、サービスやモジュールを繋げ合わせることに焦点を合わせて、
細かいチューニングやコーディングは極力省きました。


開発ダイジェスト

ここからは開発のダイジェストを書きます。

利用ツール・サービス

ツール・サービス 用途
Visual Studio Express 2013 for Windows Windowsストアアプリの開発に使います(for Desktopとは違います)
Visual Studio Express 2013 for Web WEBサイト開発のために利用します
Windows Azure WEBサイト ASP.NETをホストしてくれるサービスです Link
Windows Azure SQLデータベース 簡単に言えばクラウド版のSQL Serverです Link
Windows Azure モバイルサービス モバイルアプリ向けの便利サービス群です Link
はてなブックマークAPI 詳しくはこちら




SQLデータベース

まずはここから必要なテーブルを作りました。
Windows AzureSQLデータベースサービスは20MBまで無料で使えます。
今回の機能程度なら余裕で収まりました。

SQLデータベース用の管理画面が用意されていて、
クエリの発行や、GUIによるテーブルの操作などのDB操作が
一通りWebブラウザからできるようになっています。
f:id:yomon8:20140104152045p:plain




Entity Frameworkを使ってサクッとWebAPIを開発

次にAzureのWEBサイト上にSQLデータベースのデータを利用するためのWebAPIを作成しました。


WebAPI作ったこと無くても基本的なWebAPIなら、
Entity Frameworkを利用すれば簡単に作ることができます。
こちらの動画でわかりやすく説明されています。

VS100-007 ASP.NET Web API で作る RESTful HTTP サービ ...
この動画はコードファーストで説明していますが、
今回は先にDB作ってしまっていたのでDBファーストで行っています。



Visual Studioで「新しい項目の追加」から「データ」>「ADO.NET Entity Data Model」を選択します。
そうするとSQLデータベース上に作ったDBを基にModelのコードを生成できます。
f:id:yomon8:20140104213107p:plain

【関連リンク】
第4回 データベースからのEntity Data Model生成 − @IT

  
 


作成したプロジェクトは、Visual Studio 2013 for WebにWindows Azure SDKをインストールすることで、
Azure上のWEBサイトに直接デプロイできるようになります。

【関連リンク】
Download Windows Azure SDKs and Tools | Windows Azure
Get started with Windows Azure for .NET


Windows Azureモバイルサービスを使ってデータの定期メンテナンス

この仕組みでは以下の3つのタスクを定期処理として実行しようと考えました。

  1. RSSフィードをデータベースへ収集
  2. 既存フィードに対するはてなブックマーク数の更新
  3. 古いフィードの削除

Entity Frameworkを利用するとデフォルトで、
GET、GET(ID指定)、PUT、POST、DELETEのメソッドに対応したWebAPIが生成されます。
今回は、この中のPOSTの処理にトークンを渡すことで超簡易認証をして、
POST処理の中で上記の処理をこなす形で、
定期処理を実行できるようにコーディングしました。

このPOST処理を定期的(10分や15分単位)で呼び出したいので、
ここでWindows Azureモバイルサービスの登場です。

モバイルサービスのスケジューラーを作成します。
まだプレビュー版ですが、一つまでは無料で使えます。
f:id:yomon8:20140104232726p:plain

下の画面では10分毎のスケジュールでスクリプトを実行するように設定しています。
他にも「一度だけ実行する」でいつでも即時実行することもできるのでとても便利です。
f:id:yomon8:20140104232734p:plain

スクリプトはJavaScriptで書きます。
今回の場合はPOST処理に簡易認証用のトークンをJSON形式で受け取るよう、
ASP.NET側でコーディングしているので、以下のように定期処理を実行しています。

function MaintService() {
    
    console.info("Executing job: start");
    
    var req = require('request');
    req.post({
        headers: { 'Content-Type': 'application/json' },
        url: "https://<POST API URL>",
        body: JSON.stringify({ "TOKEN" })
    },    
    function(error, result, body) {
       //エラーハンドリング
    });
}


Console出力は以下のようにログから確認できます。
f:id:yomon8:20140104232737p:plain


DBへのRSSフィードの収集

ほとんどのまとめサイトはRDFという形式でデータを公開しています。
dotNetRDFというモジュールをNuGetから取得することで、
C#から簡単にこのRDF形式のデータを扱うことが可能です。

【関連リンク】
dotNetRDF - Semantic Web/RDF Library for C#/.Net
dotNetRDFを使ったC#サンプルプログラム作ってみた - YOMON8.NET


  


Windowsストアアプリの設定情報もWebAPI経由で取得

Windowsストアアプリは一度ストアに出すと少しの設定調整でも、
再度審査・認定プロセスを流し、ユーザにアプリを再度更新してもらう必要があります。
Windows8.1からアプリの自動更新が可能になっていますが、
設定調整がユーザへ届くまでのタイムラグが悩みの種になることもあります。

そこで今回は、設定情報を上記の仕組みでSQLデータベースに格納して、
WebAPIを通してアプリ側で利用する仕組みにすることで、
即時に設定変更を反映できるようになりました。
こんなこともEntity Frameworkを使えば簡単に実装できます。

ちなみに、今回はアプリの提出が三が日だったにも関わらず、
すぐに審査・認定してもらえました。



できたWindowsストアアプリ

当初の目的通り、手持ちのMiix2向けのアプリができました。
Azure側で計算させているのでフィードの更新もサクサク動きます。
今回は自分個人の好みのUIにしたこともあり、使いやすく満足してます。


f:id:yomon8:20140103094937p:plain
Windowsストアリンク
Webサイトリンク