Silverlightというと,どうしてもユーザインターフェース部分の技術にばかり目がいきがちですが,RIA(Rich Internet Applications)登場の背景(※1)を考えれば,「アプリケーションの配布」も押さえておきたい重要な要素です。
- ※1:RIA登場の背景
- 2000年代前半,クライアントサーバ型の業務アプリケーションは同時接続数問題とクライアントへの配布問題を抱え,Webアプリケーションへと移行する動きが活発化しました。Webアプリケーション化したことで,配布の手間がなくなり管理コストは大きく下がりましたが,エンドユーザからはアプリケーションの操作性に関する不満の声が上がりました。2000年代中盤になると,Ajax(Asynchronous JavaScript+XML)を活用し,飛躍的に操作性を高めた業務アプリケーションも登場するようになりますが,開発効率やその後の保守性といった面で課題が残りました。
このような流れから,クライアントサーバ型アプリケーションの高い操作性とWebアプリケーションの配布のしやすさとが両立するアプリケーション形態として,RIA(Rich Internet Applications)が注目されるようになりました。
本稿では,Silverlight業務アプリケーションの配布における重要なポイントを,アプリケーションの提供側と利用者側の両方の視点を踏まえ,解説します。
Silverlightランタイムのインストール
そもそもクライアントにアプリケーションをインストールするという概念が存在しないのが,HTMLベースのWebアプリケーションです。Silverlightでも,アプリケーションそのもののインストールは不要ですが,アプリケーションの実行基盤であるSilverlightランタイムはインストールが必要となる場合があるため,まずここを押さえておかねばなりません。
Silverlightランタイムの普及率
エンドユーザのPCにすでにSilverlightランタイムがインストールされていれば,インストール作業は不要です。Rich Internet Application Statisticsというサイトで公開されている,日本国内のSilverlightランタイム普及率を見てみると,下のグラフのようになっています。
なお,いまのところ OSにSilverlightランタイムはプリインストールされていませんが,PCメーカーが出荷時にプリインストールしているPCはいくつか存在します。
Silverlightランタイムのサイレントインストール
1台でもSilverlightランタイムがインストールされていない環境があれば,インストール作業は避けて通れません。とくに,ハードウェアと一緒にアプリケーションをエンドユーザへ納品するようなケースでは,一度に何十台,何百台といったPCへのインストールが発生します。Silverlightランタイムは,WSUSやActive Directoryのグループポリシーなどを使って,複数台のPCに対してサイレントインストールさせることが可能です。これらのSilverlightランタイムの展開方法については,下記の「Silverlight デプロイメントガイド」に詳細な内容が記載されていますので,こちらを確認しておくとよいでしょう。
Silverlightランタイムのサイズ
一方,Silverlightランタイムのインストールにエンドユーザの介在が発生する場合,ダウンロード時間とインストール時間に直接的な影響を及ぼすSilverlightランタイムのインストーラサイズは,重要な要素です。Silverlightは,最初のバージョンである1.0の時点からこの点を重要視しており,最新のバージョン4でもそのサイズは5MB台に抑えられています。
なお,実際のインストールにかかる時間は環境によって異なりますが,筆者の手元にある4年前のPCですら16秒程でインストールが完了しました。この結果から,多くのPCにおいて20秒以内でのインストール完了が期待できます。
Silverlightアプリケーションのサイズ
Silverlightランタイムのダウンロードは初めの1回だけで済みますが,アプリケーションのダウンロードは基本的に毎回発生します。そして,アプリケーションのダウンロード時間は,エンドユーザにとってはアプリケーションの起動時間そのものとなるため,Silverlightにおいてアプリケーションのサイズはとても重要な要素となります。
Silverlightアプリケーションにおいて,アプリケーションのサイズ肥大化の要因となる要素はいくつか存在しますが,最も大きな割合を占めるのはアプリケーションで使用している外部ライブラリの存在です。
アプリケーションサイズ肥大化の大きな要因
先の項目で,Silverlightは,ランタイムのインストーラサイズをできる限り小さくすることに努めていることを紹介しました。このため,Silverlightでは,標準クラスライブラリであってもその一部はSilverlightランタイムに含まれていません。それらは外部ライブラリとして扱われ,アプリケーションの一部としてXAPファイル(※2)という形式にパッケージ化されます。
たとえば,業務アプリケーションでよく使われるデータグリッドは,「System.Windows.Controls.Data.dll」というアセンブリ内に含まれており,Silverlightランタイムには含まれていません。そのため,データグリッドを使用するアプリケーションでは,必ず「System.Windows.Controls.Data.dll」がXAPファイルに含まれることになります。
以下の図は,同じデータをリストボックスに表示した場合とタブコントロール上のデータグリッドに表示した場合に,アプリケーション(XAPファイル)のサイズがどのくらい違うかを表したものですが,この程度の小さなサンプルでも倍くらいのサイズに肥大化してしまうことを確認できます。
外部ライブラリのパッケージ化を工夫することによるXAPファイルのサイズ削減方法は,大きく分けて3つの方法が存在します。
- アプリケーションライブラリキャッシュを使用する
- アセンブリをオンデマンドで読み込む
- ツールによる最適化でアセンブリサイズを小さくする
- ※2:XAPファイル
- Silverlightでは,アプリケーション本体のDLLファイル(アセンブリ)や画像などのリソース,外部ライブラリなど,アプリケーションで必要となるファイルすべてがZIP圧縮され,XAPファイルという1つのファイルにパッケージ化されます。Silverlightアプリケーションのサイズは,イコール,XAPファイルのサイズであると言えます。

