注意
この記事は2008年6月18日に公開し,2008年9月9日に更新しました。この記事のコードはSilverlight Beta 2をもとにしています。そのため,2008年秋にリリース予定の正式版では,そのままのコードでは動作しない可能性があります。

 今回から3回にわたって,米MicrosoftのRIA(Rich Internet Applications)プラットフォームSilverlightの次期版「Silverlight 2」のプログラミングを解説していきます。今回は,Silverlight 1.0(以下,Silverlight 1)から大幅な機能拡張が施されるSilverlight 2の特徴と,シンプルなSilverlightアプリケーションの作成方法を紹介します*1。次回は,DOM*2とのやり取りやWebサービスの利用など,よりWebアプリケーションらしい機能を使ったプログラミングを紹介します。

 Silverlightの実行環境はWebブラウザのプラグインであり,マルチプラットフォーム,マルチブラウザで動作します。Silverlightは米Adobe SystemsのFlashなどと並んで,アニメーションや動画を駆使したリッチなビジュアルが注目されていますが,Webクライアント(あるいはWebブラウザ)をアプリケーション・プラットフォームにするテクノロジとしての側面も重要です。

 もともとWebブラウザは,HTMLで記述されたページを描画するためのアプリケーションでしたが,普及に伴って機能が大幅に拡張されました。プラグインによってアニメーションや動画の再生などが可能になり,HTML文書をプログラムで制御するDOMへの対応とスクリプト言語処理系の搭載により,高度なインタラクティブ性(双方向性)を備えるクライアントを作ることもできるようになりました。

 しかし,クライアントサイドで高度なアプリケーションを実行するプラットフォームとしては,Webブラウザはまだまだ非力でした。Webブラウザ・ベースのオフィス・アプリケーション(ワープロや表計算など)もありますが,機能や使い勝手が十分でなく,少数派にとどまっています。大多数のWebアプリケーションは,ほとんどの処理をサーバーサイドで実行し,Webブラウザは主に描画を受け持つ「サービス(あるいはサーバー)主導型」です。

 Silverlightによって,高度かつ堅固なアプリケーションをマルチブラウザ,マルチプラットフォームにわたるクライアント環境で実行することが可能になります*3。ブラウザ・アプリケーション用の堅固なフレームワークを .NET Frameworkが提供します。しかも,それはMac(Macintosh)上でも動作します。

 クライアントに堅固なプラットフォームがあることは非常に大きな意味を持ちます。クライアントサイドのアプリケーションでより高度な処理を高速に実行できるので,見た目やインタラクティブ性の改善だけでなく,より高いレベルでサーバーサイドのサービスを利用するような,「クライアント主導型」のアプリケーションを実現できます。これはMicrosoftが提唱するサービス戦略「ソフトウエア+サービス(S+S)」の一つの形態でもあります。

Silverlight 2の実像

 Silverlight 2の大きな特徴の一つは,.NET Frameworkの中核にあるCLR(Common Language Runtime)を搭載したことです。CLRの搭載により,C#,Visual Basic(VB)など .NET Framework向けの言語や,PythonやRubyといった動的言語でWebクライアントのプログラムを書けるようになります*4

 Webクライアントのプログラミング言語としては,これまでJavaScriptが主に使われてきました。AJAX(Asynchronous JavaScript+XML)はJavaScriptをベースにしたテクニックですし,Silverlight 1の開発言語もJavaScriptでした。しかし,JavaScriptには,開発や保守が難しいという問題があります。

 一方,.NET Framework(と,その上で動くマネージド・コード)は,すでにWebサーバー・アプリケーションやWindowsアプリケーションのプラットフォームとして広く使われており,C#やVBの開発効率の高さ,保守のしやすさは実証されています。Microsoftはプログラマ向けにVisual Studio 2008,デザイナ向けにExpression Studioというツールを提供しており,開発を支援する環境も整っています。

 CLRの搭載は,すでにSilverlight 1.1 Alphaで実現されていましたが*5,2008年3月に公開された最初のベータ版Silverlight 2 Beta 1で,その上に搭載されるクラスライブラリなど,アプリケーション・プラットフォームとしての姿が明らかになりました。Silverlight 2の主な特徴を見ていきましょう。

アプリケーション配置方法の変更

 Silverlight 2では「xap(「ザップ」と読みます)ファイル」が配置されます。xapファイルの実体はZIP形式の圧縮アーカイブ・ファイルであり,拡張子をzipに変更すればZIPアーカイブとして開いて内容を見ることができます。xapファイルに入っているのはXAML*6とDLL(Dynamic Link Library)です。ただしxapファイル内のXAMLは単にエントリーDLLを示すものです。Silverlight 2ではWPF(Windows Presentation Foundation)と同じように,ユーザー・インタフェース(UI)定義などを記述したアプリケーション本体のXAMLを,マネージド・コードとともにコンパイルし,一つのDLLを生成します。

アーキテクチャの大幅な拡充

 Silverlight 2にCLRが搭載されることは前回解説しましたが,その上で動作する様々なクラスライブラリも追加されます。図1にSilverlight 2のアーキテクチャを示します。一つひとつを紹介することはできませんが,LINQやXLINQ*7,WPF,DLR(Dynamic Language Runtime),基本クラスライブラリ(BCL)など,高機能なアプリケーションを構築するための様々な機能が追加されていることがおわかりいただけるでしょう。

図1●Silverlight 2のアーキテクチャ。Silverlight 1と比べ,機能が大幅に拡張されている
図1●Silverlight 2のアーキテクチャ。Silverlight 1と比べ,機能が大幅に拡張されている
[画像のクリックで拡大表示]

ユーザー・コントロールのサポート拡大

 アーキテクチャの拡充に伴って,サポートするコントロールも増えます(表1)。Silverlight 1ではCanvasコントロールしかサポートしませんでしたが,Siliverlight 2ではユーザー・コントロールやレイアウト・コンテナが,WPFと同等(またはそれ以上)にサポートされています。表1にある「エクステンション」はSilverlight 2ランタイムには含まれていないが,アプリケーションと一緒に(xapファイルに含めるなどして)配置できるコントロールです。この中で特筆すべきは,データの入力と編集ができるDataGridコントロールでしょう,これはフルセットの .NET Frameworkでもサポートされていません。DataGridのサンプルは次回ご覧に入れます。

表1●Silverlight 2がサポートするユーザー・コントロール
[画像のクリックで拡大表示]
表1●Silverlight 2がサポートするユーザー・コントロール

HTML/JavaScriptとの連携

 Silverlightはブラウザのプラグインであり,ブラウザを通してユーザーやサーバーとやり取りします。実行や描画がSilverlight内で完結することもあれば,HTMLやJavaScriptでそれ以外の処理を行うこともあります。Silverlight 2には,Silverlightアプリケーションからブラウザにアクセスするためのクラスを含むSystem.Windows.Browser名前空間が用意されています。この中のHtmlElementクラスやHtmlDocumentクラスを使ってブラウザのDOMを制御したり,ScriptObjectクラスを使ってブラウザのJavaScriptを呼び出すことができます。逆に,マネージド・コードのメソッドに「[ScriptableMember]」という属性を付けると,ブラウザのJavaScriptエンジンからそのメソッドを呼び出せるようになります。

様々なシナリオでのサービス連携

 Silverlightでは,ネットワーク経由で様々なサーバーのサービスを利用できます。最もよく使われるWebサービスAPIでは,REST/POX/JSONの形式でリクエストをサーバーに送り,非同期や同期で応答をコールバックとして受け取ります。またSOAP(Simple Object Access Protocol)やSilverlight専用の独自のバックエンド・サービスであれば,Visual Studio 2008で「サービス参照」を追加することでプロキシ・コードが自動生成されます*8。また,RSSのようなXML形式のデータであれば,専用のDownloaderクラスとXMLReaderクラスを使って容易に各項目を取得できます。

 ネットワーク・サービス利用時によく問題になるのが「クロスドメイン」の問題です。これは,ユーザーがアクセスしてプログラムをダウンロードしたドメインと異なるドメインのサービスを利用することが,ブラウザのセキュリティ・ポリシーに反するため,そのサービスにアクセスできないという問題です。Silverlight 2ではXML形式のポリシー・ファイルを使ってこの問題を解決します。リスト1はポリシー・ファイルの一例です。このSilverlight用のポリシー・ファイル以外にも,Flash用のポリシー・ファイルのサブセットを利用することもできます。

リスト1●ポリシー・ファイルの例
リスト1●ポリシー・ファイルの例

DRM対応の高品位メディア・サポート

 HD(High Definition)動画のような高品位なメディアの再生は,Silverlight 1のときからの得意技です。Silverlight 2では,メディア再生のパフォーマンス・チューニングが行われたほか,DRM(デジタル著作権管理)機能を利用できるようになります。Silverlight 2のDRMは「PlayReady」と呼ばれるWindows Media DRM 10と互換の新しいDRMです。

テキストとグラフィックスの強化

 Silverlight 1は,英語以外の言語を表示するにはそのフォントを組み込む(あるいはダウンロードする)必要があり,日本語の表示に制限がありました。Silverlight 2では,フォントをダウンロードすることなくクライアントのシステム・フォントを利用できるようになりました*9

 誰でも使いやすいようにするアクセシビリティ関連の機能も強化されます。例えば,完全なキーボードによる操作がサポートされ,XAMLでアクセシビリティ情報の装飾を追加でき,カスタム・コントロールにもアクセシビリティを追加できます。スクリーン・リーダー(読み上げソフト)のサポートも改善され,UIAutomationクラスからアクセシビリティ・ツリーにアクセスできます。ただしスクリーン・リーダーのサポートはWindowsだけです。これはMacとMozillaのAPIでアクセシビリティがサポートされていないためです。

 Silverlight 2での画像表示には「Deep Zoom」と呼ぶテクノロジを利用できます。Deep Zoomは,巨大な画像を高速に表示し,インタラクティブに操作するテクノロジで,以前はSeadragonテクノロジと呼ばれていました。Microsoftが2006年2月に買収した米Seadragon Softwareで開発されたものです。図2のように,元の画像から段階的に粗い画像(疎画像)を生成して,仮想的な四角錐(ピラミッド)を構築し,LOD(詳細レベル:Level Of Detail)に応じて必要な解像度の画像をロードします。3Dグラフィックスに慣れた人には「ソフトウエア・ミップマッピング」と言えばわかりやすいかもしれません。Deep Zoomに対応したフォーマットの画像はExpressionで作成でき,Silverlightから容易に活用できるようになります。Deep Zoomの使用例については次々回にお見せします。

図2●様々な大きさの画像を取り出せるDeep Zoom
図2●様々な大きさの画像を取り出せるDeep Zoom

隔離されたストレージとローカル・ファイル入出力

 Silverlight 2ではアプリケーションから隔離されたストレージ(isolated storage)が利用できます。これはブラウザのサンドボックス・セキュリティの下で利用できる安全なストレージです。Silverlight アプリケーションはこのストレージに対して,安全に複数ファイルの書き込みと読み出しができます。

 また,ユーザーによる読み取りファイル名の指定を可能にするOpenFileDialogがサポートされます。このダイアログでは通常の「開く」ダイアログと同じようにファイル名が表示され,ユーザーは一つあるいは複数のファイルを選択して,アプリケーションに読み取らせることができます。