マルチデバイス + クラウドの実装レベルのアーキテクチャ執筆者: 株式会社アークウェイ プリンシパル コンサルタント 福井 厚 氏 更新日: 2012 年 11 月 20 日 本記事では、マルチデバイス + Azure スターター キット (以下、スターター キット) を例として、「Azure アーキテクチャの視点」の章で取り上げた、「視点 2: マルチデバイス+クラウド」の議論 (PDF: 1.76 MB) を継続する形で、マルチデバイス+クラウドの実装レベルのアーキテクチャの概要について解説します。 【ご注意ください】 本ページおよび各ドキュメントに記載されている会社名および製品名、サービス名、ロゴ等は、執筆時点のものです。
スターター キットとはスターター キットは、Visual Studio 2012 用のプロジェクト テンプレートと、その解説を含む利用ガイドから構成されています。スターター キットのテンプレートを展開すると、Windows 8 の WinRT アプリ用プロジェクト、jQuery Mobile コードを含む ASP.NET MVC4 用プロジェクト、Windows Azure 用プロジェクトを含む Visual Studio ソリューションが生成されます。マルチデバイスに対応した Windows Azure のサービスを実装したい開発者は、スターター キットを利用することで、最初から動作するコードをベースに容易に開発を進めることができるようになっています。このスターター キットは、CSV カウンシルのディスカッションで取り上げた マルチデバイス+クラウドにおける Azure アーキテクチャの一実装例としても開発されました。 スターター キットにはマルチデバイス + クラウドのシナリオにおけるアーキテクチャのポイントとなるいくつかの実装が含まれています。この章では、認証やデータ アクセスなどポイントとなるアーキテクチャの実装について解説を行います。 スターター キットの詳細については、利用ガイドを参照してください。 https://msdn.microsoft.com/ja-jp/jj677081 アーキテクチャの概要「Azure アーキテクチャの視点」の章で取り上げた、「視点2: マルチデバイス + クラウド」の「マルチデバイスに対応するための考慮点」では、設計レベルからの考慮すべきポイントを取り上げました。ここでは、スターター キットの実装を例として取り上げ実装レベルのアーキテクチャの概要とポイントを説明します。 下記の図にあるように、マルチデバイス + クラウドのアーキテクチャではクライアント側でデータ アクセスの要求を発行し、クラウド上のアプリケーションがサービスを公開してリクエストを受け取り、データソースをアクセスして取得したデータをクライアント側に送信します。クライアント側では送信されたデータを利用してクライアントのビューをレンダリングします。 ポイント 1: ユーザー インターフェーススターター キットでは、Windows 8 で動作する WinRT アプリ、Windows Phone、iPad、iPhone Android などのデバイスで動作する HTML + jQuery Mobile アプリケーションのコードが予めテンプレートの中に用意されています。「Azure アーキテクチャの視点」の章の「マルチデバイス対応における指針」のセクションでも述べていますが、Windows Phone などのデバイスに対応するアプリケーションを開発する方法として、デバイス独自のプラットフォーム上で動作するネイティブ アプリケーションを開発する方法 (例えば iPhone の場合はiOS 上で動作するアプリケーションを Objective C で開発するなど) と各デバイスの Web ブラウザー上で動作する HTML + JavaScript をベースにした Web アプリケーションを開発する方法の 2 つの選択肢があります。 スターター キットでは、JavaScript をベースに各種モバイル デバイスに対応していている JavaScript ライブラリである jQuery Mobile を採用しています。jQuery Mobile を採用した理由は以下の通りです。
スターター キットには、Windows 8 上で動作する WinRT アプリも含まれています。こちらは Windows 8 上で動作するネイティブ アプリケーションの例となっています。Windows 8 上で動作するネイティブ アプリケーションの開発方法には、画面レイアウトに XAML を利用し、C# または VB で開発を行うスタイルと、画面レイアウトを HTML/CSS で行い、JavaScript で開発を行うスタイルが選択できます。スターター キットでは、HTML/CSS と JavaScript で開発を行うスタイルを採用しています。その理由は以下の通りです。
Windows 8 上で動作するネイティブ アプリケーションを加えた理由として、Web アプリケーション ベースのマルチデバイス対応アプリケーションとネイティブ アプリケーションの双方を提供する場合のサービスの利用について例示するという目的もあります。次のアーキテクチャ ポイントとしてサービスの公開について解説します。 ポイント 2: サービスの公開マルチデバイス + クラウドのアーキテクチャでは、クラウド上にサービスを公開し、各デバイスから公開されたサービスを共通に利用する形態を取ります。現在では、様々な言語やツールからアクセスしやすいという理由で、多くの Web サービスが REST 形式で公開されています。各デバイスからサービスに対してリクエストを送信し、REST 形式のサービスを提供する側は、送信された URL からリクエストの内容を解釈、実行し、クライアント側の要求に応じてデータを送信します。JavaScript ベースのアプリケーションの場合は、親和性が高いという理由で JSON 形式で送信することが一般的です。 スターター キットでは、.NET Framework が提供する WCF Data Services を利用して REST 形式のサービスを公開しています。また、リレーショナル データベースのアクセスには、ADO.NET Entity Framework を利用しています。スターター キットが、WCF Data Services と ADO.NET Entity Framework を選択した理由は以下の通りです。
より複雑な問い合わせや更新処理に対しても、WCF Data Services にカスタム オペレーションを追加することによって対応することができます。以下にカスタム オペレーションの例を記述します。 //Win8starterkit.svc.cs より抜粋 カスタム オペレーションを追加することによって、より自由度の高いクエリを実装することができます。 クラウドで提供される REST 形式のサービスはクライアント側から JavaScript によって呼び出されます。スターター キットでは、マルチデバイスに対応した jQuery アプリケーションから jQuery.ajax メソッドを利用して非同期にクラウド上の REST サービスを呼び出す実装を行っています。 //index.chtml より抜粋 $.ajax({ 同様に Windows 8 上で動作する WinRT アプリの場合も、WinJS.xhr メソッドを利用して同じサービスを呼び出しています。 //groupedItems.js より抜粋 このように共通のサービスを利用させることで、クラウド側のサービスに対する保守の負担も軽減させることができます。 ポイント 3: 認証「Azure アーキテクチャの視点」の章の「視点 2: マルチデバイス + クラウド」のセクションでも取り上げましたが、マルチデバイス + クラウドでは認証もポイントのひとつとなります。企業内や企業間での利用を想定した場合、多くの場面で認証が必要となります。クラウド側でデータのアクセスを要求してきたクライアントに対して認証を行い、データが不正にアクセスされないことを保証する必要があります。 スターター キットでは、 クラウド サービス ベンダーが企業向けにサービスを公開する場合に最も一般的と考えられるフォーム ベースの認証方式をサポートしています。.NET では、この目的のために ASP.NET メンバーシップの機能が提供されていますので、スターター キットでもこの機能を利用しています。ASP.NET メンバーシップには、アカウントの新規登録やログイン、ログアウト、パスワード変更など豊富な機能が予め提供されています。スターター キットに含まれる jQuery Mobile ベースのマルチデバイス用アプリケーションでは、ASP.NET MVC4 のログイン ページを使用することで ASP.NET メンバーシップの機能をそのまま利用しています。 Windows 8 上で動作する WinRT アプリの場合は WinJS.xhr メソッドから認証用のサービスを呼び出す必要があるため、ASP.NET メンバーシップをサービス経由で利用しています。 //login.js より抜粋 WinJS.xhr({ 認証にはフォーム認証以外にも様々な認証方式があります。アーキテクチャを設計する際は、想定しているサービスの対象者がどのような認証方式を利用可能か、またサービスの提供対象のデバイスがどのような認証方式をサポートしているかによって認証方式を選択する必要があります。「将来の拡張性について」のセクションでは、この点を取り上げて議論します。 ポイント 4: Windows Azure SQL データベースの利用4 番目のアーキテクチャ ポイントは、データソースの選択です。Windows Azure 環境では、Windows Azure SQL データベース、TABLE ストレージ、BLOB ストレージなどのデータソースを選択することができます。スターター キットでは以下の理由から Azure SQL データベースを選択しています。
ビジネス アプリケーションであっても利用目的によっては、TABLE ストレージや BLOB ストレージの利用が有効な場合もあります。この点については、「将来の拡張について」のセクションで取り上げます。 想定シナリオマルチデバイス + クラウド アーキテクチャの背景としてスマート クライアントやタブレットなどリッチなユーザー インターフェースを提供できるデバイスが急速に広まり、企業側も BYOD (Bring Your Own Device) の有効活用に積極的になってきたことが挙げられます。このアーキテクチャの特長として
などを挙げることができます。このような特長を生かす以下のようなシナリオを想定することができます。
ほかにも様々なシナリオに適用できます。 将来の拡張性についてマルチデバイス + クラウドの実装レベルのアーキテクチャについてスターター キットを題材にして解説してきましたが、このセクションではスターター キットの実装には含まれていない機能に対する将来の拡張性について議論します。 スターター キットをベースに開発されたクラウド上のサービスやアプリケーションの利用が拡大、成長するにつれて様々な機能要件、品質要件が発生することは容易に想像できます。例えば以下のような成長の過程と品質要件の増大が予想されます。
このような品質要件に対して Azure が提供する様々なサービスを活用することが可能です。処理能力の追加や負荷分散ではインスタンスのサイズや数の増加を行うことで対応することができます。パフォーマンスの向上ではキャッシュや CDN の利用を検討します。例えば、頻繁に更新することのないマスター データや複雑な計算処理の結果を分散キャッシュに配置したり、画像データや動画データを BLOB ストレージに配置して CDN を有効活用したりすることが可能です。 ライフ ログや大量のシーケンシャルなデータは NoSQL タイプの テーブル ストレージを有効に活用することができます。またクレームベースの認証方式を採用することによって、ADFS を利用したフェデレーションや Google ID、Yahoo ID、Live ID などのオープンな ID を認証に利用することができるようになります。 |
Windows Azure 関連リンク
Windows 8 関連リンク |
ページのトップへ