使ってみよう! Live Framework

第12回 Resource Script(1)

この記事を読むのに必要な時間:およそ 5 分

Resource Script

今回からはResource Scriptについてです。Live Frameworkはリソース指向のプログラミングモデルを提供しており,すべてのものをリソースとして扱います。これまで本連載ではMesh Objectなどのリソースが登場しました。今回のResource Scriptもそれらと同等なリソースのひとつです。特徴はその名の通りスクリプトとして実行が可能なことがいえるでしょう。Resource Scriptを使用すると複数のリソース操作と,それぞれの操作の順次処理や分岐処理などの制御構造をひとつのリソースとして表すことが可能です。またそれだけでなくリソースの追加や更新などをトリガーとしたバッチ処理も可能です。今回はResource Scriptの文法の種類と実行までを紹介します。

Live Frameworkのリソースモデル図1を見てみましょう。これまで本連載ではMesh以下のリソースを扱っていました。ProfilesやContactsは連載の内容として直接は扱っていませんが,ユーザー情報に関する部分はここに含まれています。Scriptsはそれらと同階層に位置づけられたリソースのひとつです。ただし単独で使うということは基本的になく,ほかのリソースを操作しますので今回もMesh以下のリソースが出てきます。リソースの操作は,一般的にCRUDと呼ばれる生成(Create),読み取り(Read),更新(Update),削除(Delete)の4種類です。これに加えてデータ同期の操作があります。

図1 リソースモデル

図1 リソースモデル

※MeshはリソースのひとつではなくMesh階層下にMesh Objectなどのリソース群があります。

使用する3つの利点

Resource Scriptは,ほかのリソースに対する操作の集合と考えることができます。これはResource Scriptを使用しなくても,プログラミング言語で同等のリソース操作を行えばResource Scriptを作成する必要はないとも言えます。では,Resource Scriptを使用する利点は何があるのでしょうか。

処理の抽象化

まず操作の集合による利点です。Live Frameworkを利用しLiveサービス上の各リソースへアクセスする際,Live Operating EnvironmentとHTTPによる通信を行います。このとき行う操作単位は,リソースの作成・読み取り・更新など基本的なものに限られています。例えばMeshサービス上にファイルをコピーする場合,ファイルが既に存在しているかの確認(読み取り),存在している場合は削除,そしてファイルの作成というように複数の操作が必要です。Resource Scriptを用いると意味のある処理をひとつのリソースとして表現が可能です。

パフォーマンス改善

上記のように通常は多くのHTTPアクセスがアプリケーションとLive Operating Environmentとの間で必要になります。Resource Scriptの処理内容はサーバーサイドでの実行が可能で,このときアプリケーションとLive Operating Environment間のHTTPアクセスは1回に集約されます。このように複数のHTTPアクセスをまとめ,アプリケーションの動作改善にも使用できます。

アプリケーションの拡張

Resource Scriptは,リソースが作成・更新・削除される前または後をトリガーとして実行することが可能です。これは既にあるアプリケーションのロジックの変更や拡張として使用できることを意味します。トリガーによる実行もResource Scriptの大きな特徴のひとつです。

文法

Resource Scriptは,順次処理や条件分岐,繰り返処理などを記述可能でプログラミング言語の性質を持っています。Live Frameworkのリソース操作向けの言語であり,このような特定分野用に設計された言語をドメイン固有言語と呼びます。Resource Scriptもそのひとつです。言語となるとその文法も存在します。ここではResource Scriptの文法の内容をみてみましょう。

文法は,次の3種類を記述するものに大きく分けることができます。

  • 制御構造
  • リソース操作
  • データフロー

そして,Resource Scriptのプログラム文法はStatementという記述単位で構成されています。Statementの組み合わせをStatement DOMと呼び,これをコンパイルすることで実行可能なResource Scriptを得ます図2)。

図2 Statement DOMとResource Script

図2 Statement DOMとResource Script

コンパイルできる点もこれまで登場したLive Frameworkのリソースと大きく異なりますね。まずは,Statementを確認しておきましょう。

Statementは,Live Framework SDKにある.NET FrameworkまたはSilverlight用のライブラリではMicrosoft.LiveFX.ResourceModel.Scripting.Statementクラスとして用意されています。Resource ScriptやStatement自体は特定のプログラミング言語に依存するものではありませんが,本連載ではLive Framework SDKの.NET Framework用ライブラリのクラスとC#のコードをまじえて紹介します。

リソース操作

最初にリソース操作についてです。本記事ではリソース操作という言葉を使用しましたが,Live Frameworkの文書ではWeb Operation StatementとSynchronization Statementsと分類されています。それぞれWeb上のリソース編集のためのAtom出版プロトコルと,AtomまたはRSSを使用したデータ同期に関する仕様のFeedSyncの内容を反映したものです。

Web Operation StatementおよびSynchronization Statementsは,Statementクラスの静的メソッドを呼び出して生成することができます。たとえばリソースを作成する場合は,Statement. CreateResource<TResource>メソッドを使用します。

以下にC#のコードを示します。Mesh Objectを作成するStatementオブジェクト(CreateResourceStatementオブジェクト)を生成しています。

var statement = Statement.CreateResource<MeshObjectResource>(
                    "createMeshObjectStatement",
                    new Uri("https://user-ctp.windows.net/V0.1/Mesh/MeshObjects"),
                    new MeshObjectResource("My Mesh Object"));

引数など詳しい内容について今回は言及していません。実際に試してみたい方はVisual C#のコンソールアプリケーションプロジェクトを作成しコードを記述してみてください。Live Framework SDKの.NET Kitライブラリに加え,System.ServiceModelとSystemServiceModel.Webの参照も追加してください。

CreateResourceStatement以外にも次のクラスなどが用意されています。

  • CreateMediaResourceStatement
  • ReadResourceStatement
  • ReadMediaResourceStatement
  • ReadResourceCollectionStatement
  • UpdateResourceStatement
  • DeleteResourceStatement

Create,Read,Update,Deleteなど名前からどのような操作かわかりますね。これらの操作は実際にStatementが実行される際,Live Operating Environmentに対してのHTTP POST,GET,PUT,DELETEメソッドに置き換えられます。

データ同期に関するStatementは,SynchronizeResourceCollectionStatementが用意されています。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp

コメント

コメントの記入