実証実験
「ソフトウェア+サービス」開発

Windows Azureクラウド・サービス+.NETクライアントの例

デジタルアドバンテージ 一色 政彦
2009/02/04
2010/01/21 更新

 「マイクロソフトが本気モードで進めるクラウド戦略」で、ソフトウェア+サービス(以降、S+S)という、従来型コンピューティングの良さと、クラウド・コンピューティングの良さをうまく両立させるアプローチを紹介した。

 今回は、そのS+SをWindows Azureを使って実現した例を紹介し、そこから得られた「Windows Azureクラウド・サービス開発のポイント」を簡単に説明する。

 「アプリケーション」は「アプリ」と短く表記する。

Windows Azureで実現する「ソフトウェア+サービス」

 今回は、Windows Azure上に実装済みの(筆者が開発した)Webアプリを題材にし、これをWindows Azure+Microsoft WordというS+Sの形態で実現してみる。

移行前:既存のWebアプリ(Windows Azureクラウド・サービス)

 S+Sに移行するサンプルのWebアプリは、任意のテキストを「マイクロソフトの日本語スタイル・ガイド」(=日本語文章の記述方法の規約)に適合させるASP.NET Webアプリで、筆者はこれを「DocBeautifier Webアプリ」と呼んでいる。これは、次の画面のように、上側のテキストボックスにテキストを入力して[変換]ボタンをクリックすると、それを変換して、その結果を下側のテキストボックスに表示してくれる。

S+Sに移行する前の「DocBeautifier Webアプリ」
テキストボックスに入力できる最大文字数は32767文字までなので、注意してほしい。

 変換内容が若干分かりにくいが、例えば1行目には以下のような違いがある。

  • 変換後は、英単語と日本語の間にスペースが入っている
      (例:「Azure開発」 → 「Azure 開発」)

  • 変換後は、全角のカッコ( )が半角のカッコ( )に変わっている
      (例:「(前編)」 → 「(前編)」)

 このような文書スタイルの変換を行うのが、このWebアプリの目的である。

* ただし、(現バージョンでは)「マイクロソフトの日本語スタイル・ガイド」の中でも基本的なスタイル・ルールのみを適用できる。なお、「マイクロソフトの日本語スタイル・ガイド」の詳細については、「マイクロソフト ランゲージ ポータル」の一番下にある「マイクロソフト 日本語スタイル ガイド」というリンク先の.chmドキュメントを参照してほしい。

 この「DocBeautifier Webアプリ」は現在、Windows Azure上に配置されており、次のリンク先から誰でも利用できる。

  • 本サンプルは公開を終了しました。代替のサービスをこちらから利用できます。
  • Insider.NET DocBeautifier(ドキュメント美化) Webアプリ

 このようにWebアプリをWindows Azureに配置すれば、例えばサービスの利用者が激増したときには(仮想マシンのインスタンス数を調整するなどして)スムーズにスケールアウトしてパフォーマンスを改善できるという利点がある(このようなことは、通常のWebホスティング・サービスでは行いにくい)。

 このWebアプリをS+Sに移行してみた。

移行後:Windows Azureクラウド・サービス+.NETクライアント

 具体的には、先ほどのWebアプリのビジネス・ロジック部分を、WCF(Windows Communication Foundation)によりSOAP形式のWebサービスとして公開し、そのサービス・クライアントとしてMicrosoft Word 2007/2003アドインを開発した。つまり、

  • ソフトウェア:Microsoft Word 2007/2003とアドイン
        +
  • サービス:DocBeautifier WCFサービス(SOAP形式のWebサービス)

を実現したわけである。

 このS+Sアプリは、Microsoft Word 2007/2003から以下のようにして利用できる。

(1)任意のWordドキュメントを開き、リボンの[アドイン]タブを開いて[@IT/Insider.NET]グループの[DocBeautifier ドキュメント美化]ボタンをクリックする(Word 2007の場合。Word 2003はリボンではなくツールバーとなる)。

S+Sに移行した後の「DocBeautifier Wordアドイン」の利用手順(1)
[DocBeautifier ドキュメント美化]ボタンをクリック。

(2)これにより、次のようなダイアログが表示されるので、[はい]ボタンをクリックすると、ファイル(の変更内容)が保存されてから変換処理が実行開始される。[いいえ]ボタンをクリックした場合は保存せずに実行開始される。[キャンセル]ボタンをクリックした場合は、処理は実行されない。ここでは[いいえ]をクリックしたとしよう。

S+Sに移行した後の「DocBeautifier Wordアドイン」の利用手順(2)
[いいえ]ボタンをクリックして、ファイル(の変更内容)を保存せずに変換処理を実行開始する。

(3)処理実行中はWordがいったん最小化される(この状態のときに、表示して編集しようとしても、編集できない。途中で処理をキャンセルすることもできない)。処理が完了すると、Wordが元の大きさの表示に戻される。次の画面は、処理が完了したWordドキュメントの例である。

S+Sに移行した後の「DocBeautifier Wordアドイン」の利用手順(3)
変換処理が完了したWordドキュメントの例。

 この画面の例のように、本アドインでは自動的に[変更履歴の記録]がオンになったうえで変更が加えられるため、どこがどう変わったのかが一目瞭然(りょうぜん)で分かる。また、Shift-JIS文字コードでテキストを保存しようとした場合に、保存できない可能性のあるUnicode文字にはコメント(この例では「★Unicode文字が含まれています★」)が挿入される。なお、これらのコメントの削除や、変更の確定、[変更履歴の記録]のオフなどは、リボンの[校閲]タブの[コメント]グループや、[変更箇所]グループ、[変更履歴]グループから行える(Word 2007の場合。Word 2003は[チェック/コメント]ツールバーから行える)。

 以上のように、WebアプリをS+S化することで、よりリッチなエクスペリエンスを提供できる。このWordアドインをインストールするためのセットアップ・プログラムは、次のリンク先から誰でもインストールして利用できる。

  • 本サンプルは公開を終了しました。
  • Insider.NET DocBeautifier(ドキュメント美化) Word 2007アドイン
  • Insider.NET DocBeautifier(ドキュメント美化) Word 2003アドイン

 Word 2007アドインは、VSTO(Visual Studio Tools for Office)によるClickOnce配置を利用しているが、インターネット経由で配布する場合、デジタル証明書が信頼されていないとインストールが強制的に中断されてしまうため、インストールを開始すると最初にデジタル証明書がインストールされるようにしている。

【コラム】Wordアドイン利用時の文字数制限について

 このWordアドインはWindows Azure上のWCFサービスを利用するが、送信できる文字数の上限が(WCFのデフォルトの上限値の)8192文字となっている(これはWeb.configファイルの設定で変更可能だがいまのところ、巨大なデータを大量に送付されたケースを対策していないので、デフォルトの制限のままにしている)。従って、この文字数を超えるドキュメントで変換処理を実行しようとすると、次の画面のようなエラーが表示されるので注意してほしい(※バグではない)。

文字数が制限を超えた場合のエラー表示

 以降では、以上の開発経験から得られた「Windows Azureクラウド・サービス開発のポイント」を説明していこう。

Windows Azureクラウド・サービス開発のポイント

ポイント1. クラウド・サービスではなく、Webアプリとして開発する

 現時点のWindows Azure開発環境(CTP版)は、通常のASP.NET開発と比べると、特にデバッグの開始時などに非常に時間がかかり、効率が悪い。さらに、まだCTP版ということもあり、おかしな挙動をするところがある(例えば2008年10月CTP版では、WCFサービスの[サービス参照の追加]で生成されるクラス内容で、生成されたURIなどが間違っていたりしていて、うまくWCFサービスのクライアントを実装できなかった)。

 筆者はこれらにストレスを感じていたので、クラウド・サービスとして開発するのではなく、ASP.NET Webアプリとして開発するようにしている。どういうことかというと、「ASP.NET Webアプリ」のフォルダ(の中身)と「Webロールのクラウド・サービス」*1のフォルダを共有している(つまり、フォルダとその中のファイル群の実体は1つである)。具体的には、次の画面が分かりやすいだろう。

*1 詳しくは「特集:Windows Azure開発入門」を参照してほしい。

「ASP.NET Webアプリ」と「Webロールのクラウド・サービス」間でのフォルダ共有

 「ASP.NET Webアプリ」と「Webロールのクラウド・サービス」の[ソリューション エクスプローラ]を並べたものだが、赤い枠で囲んでいる部分が共有しているフォルダ(に含まれるファイル群)だ。左側の「ASP.NET Webアプリ」の中身とまったく同じファイル群が、右側の「Webロールのクラウド・サービス」の「DocBeautifier」フォルダにもある。

 まずは左側の「ASP.NET Webアプリ」で完成するまで迅速に開発し、デバッグや検証も完了した後で、最終的なWindows Azure環境での動作チェックのみを右側の「Webロールのクラウド・サービス」で行っている。筆者の場合、これまで開発した中で、「ASP.NET Webアプリ」では動作するが、それが「Webロールのクラウド・サービス」では動作しないということは一度もなかった。

 ただし、この手法の注意点として、「Windows Azure実証実験:Webアプリケーションをクラウドの中に移行した例」で説明したように、データ・アクセス部分やメンバシップ・フレームワークを利用するコードは通常のASP.NETアプリとクラウド・サービスで異なるので、何らかの対策が必要になる。

 その対策案の1つは、条件付きコンパイル定数を使って、通常のASP.NETアプリの場合と、クラウド・サービスの場合で、実行コードを切り替えるようにすることである(条件付きコンパイル定数については「.NET TIPS:独自のビルド構成により実行コードを切り替えるには?」を参照されたい)。このようにして、通常のASP.NETアプリで動作するデータ・アクセス・コードと、Windows Azureで動作するデータ・アクセス・コードの両方を1つのソース・ファイルに書いておく。

 そうしておけば、通常のWebサーバ用とWindows Azure用のどちらにでもすぐに切り替えられるため、Windows AzureからほかのWebサーバへ移行する必要性が発生した場合や、Windows Azureへ移行するかどうかを(開発時に)決定できない状況の場合などに対応しやすい。

ポイント2. Windows Azureストレージの開発ではツールを活用する

 今回はWindows Azureストレージは使っていないが、Windows Azureストレージを活用したクラウド・サービスを書くうえで「知らないと損」なツールがあるので、紹介しておきたい。以下の2つのツール(SpaceBlockとAzure Storage Viewer)である。

・SpaceBlock

 SpaceBlockは、Windows AzureストレージのBlobを管理(閲覧/編集/削除)できるWindowsクライアント・ツールで、Windows Azure環境のストレージだけでなく、ローカル環境のストレージも扱える。

 次の画面はSpaceBlockで、ローカル環境のフォルダを一括してWindows AzureストレージのBlobに転送しているところ。[Transfer]ボタンをクリックすると実際に転送が開始される。

SpaceBlockの実行例
[スタート]メニューから[すべてのプログラム]−[sergeim]−[CodePlex.SpaceBlock]を実行すると、このプログラムが起動する。

 なお、Windows Azureストレージには、

  • Blob(バイナリ・データ用)
  • Queue(キュー・データ用)
  • Table(非リレーショナルの構造化データ用)

の3種類があるが、SpaceBlockは(残念ながら)このうちBlobにしか対応していない。

 SpaceBlockは次のリンク先からClickOnceでインストールできる(随時更新されている)。

・Azure Storage Viewer

 Azure Storage ViewerはBlob、Queue、Tableを管理(閲覧/削除)できるWindowsクライアント・ツールだが、(残念ながら)いまのところ編集ができない。

 次の画面はAzure Storage Viewerで、Tableストレージ内の「Photos」テーブルを表示しているところ。

Azure Storage Viewerの実行例
[スタート]メニューから[すべてのプログラム]−[sergeim]−[Azure storage simple viewer]を実行すると、このプログラムが起動する。

 Azure Storage Viewerは次のリンク先からClickOnceでインストールできる。

ポイント3. ClickOnce配置には、Windows AzureストレージのBlobを活用する

 筆者がWindows Azure上でClickOnce配置を試したところ、ClickOnce配下の「Application Files」のような空白文字を含んだ名前でエラーになるなどしてうまくいかなかった。そこでWindows Azureへの配置(=Windows Azureクラウド・サービス・パッケージ(.cspkgファイル)に含めて展開すること)はあきらめ、Windows AzureストレージのBlobに配置するようにしてみると、これがうまくいった(実際にはこのように配置しているサイトを発見していたのでそれを参考にした)。

 ClickOnceのフォルダ(=ファイル群)をWindows AzureストレージのBlobに転送するには、先ほど紹介したSpaceBlockが便利だ。ただし、転送しただけでは匿名ユーザーがそのフォルダにアクセスすることはできない。アクセスできるようにするには、ClickOnceのフォルダに対して「Public Access」(公開アクセス)を許可しなければならない。

 これには次の画面のように、SpaceBlockで該当フォルダを右クリックし、表示されるコンテキスト・メニューから[Edit Azure Container Access]を選択すると、[Set Access for Container '<フォルダ名>']ダイアログが表示されるので、[Allow Public Access]チェックボックスにチェックを入れて[Save]ボタンをクリックすればよい。

SpaceBlockを利用したClickOnce配置の設定

 以上でサーバ側の準備は整った。あとは、該当フォルダの中にある「setup.exe」ファイルなどを右クリックして、表示されるコンテキスト・メニューから[Generate Uri]を選択すると、そのファイルにアクセスできるURLを取得できる。

 ちなみにClickOnce配置では、デジタル証明書をあらかじめクライアント環境にインストールしなければならない場合もあるだろうが、デジタル証明書のセットアップ(.msiファイル)を作成して、それを必須コンポーネント(=ブートストラッパ)に利用すればよい。この手法は、本稿のWordアドインのインストールでも採用している。

 必須コンポーネントの作り方については、「ClickOnceの真実 第5回 実行環境を確実に整える必須コンポーネントの開発」を参照してほしい(記事はVisual Studio 2005をベースに書かれているが、Visual Studio 2008を利用している場合、.msiファイルを必須コンポーネントにするツール「Bootstrapper Manifest Generator」はこちらのものを利用してほしい)。

 マイクロソフトの提供するWindows Azureクラウド環境には、既存の.NET開発環境や、そこでの開発資産をシームレスに生かせる利点があることを本稿で理解していただけただろうか。これは今回の「ポイント1. クラウド・サービスではなく、Webアプリとして開発する」のようなことが行えることからも明らかだ。このため、特にASP.NETアプリをWebホスティング・サービスで利用している場合には、その代替としてWindows Azureの採用は一考に値するだろう。

 また、本稿のように「ソフトウェア+サービス」という形でWindows Azureクラウド環境の恩恵に浴することも可能だ。こういった活用方法もぜひ考えてみてほしい。

 Windows Azureは2009年中ごろに、その利用料金やSLA(サービス・レベル・アグリーメント:品質保証契約)が発表され、日本での商用展開は2010年の前半あたりで開始される予定だ。そのころに照準を合わせてWindows Azureの活用を考えておくとよいだろう。End of Article


更新履歴
【2010/01/21】 サンプル・アプリケーションの公開を終了しました。


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

.NET未来展望台

未来展望台コーナースポンサーからのお知らせ


- PR -
- PR -
ソリューションFLASH

「ITmedia マーケティング」新着記事

SEOは総合格闘技である――「SEOおたく」が語る普遍のマインド
SEOの最新情報を発信する「SEOおたく」の中の人として知られる著者が、SEO担当者が持つべ...

HubSpot CMSにWebサイトの「定石」を実装 WACUL×100のパッケージ第1弾を提供開始
WACULと100は共同で、Webサイトの「定石」をHubSpotで実装する「Webサイト構築パッケージ...

電通調査で「料理は面倒」が6割超 なぜそうなった?
電通の国内電通グループ横断プロジェクト「電通 食生活ラボ」は、「食生活に関する生活者...