本格派エンジニアの工具箱

第18回 Silverlight業務アプリケーションの配布で押さえておきたいポイント

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

アプリケーションライブラリキャッシュを使用する

Silverlightでは,外部ライブラリのアセンブリをパッケージ化せずにXAPファイルの外に出し,Webブラウザにキャッシュさせるといった設定が「アプリケーションライブラリキャッシュ」という名称で用意されています。この方法を使用した場合,エンドユーザが初めてアプリケーションを利用する際には,外部ライブラリを含むアプリケーションに必要なすべてのファイルがダウンロードされますが,その際に外部ライブラリはWebブラウザにキャッシュされるため,2回目以降はアプリケーション本体のアセンブリのみがダウンロードされます。具体的な設定方法は,以下のページに記載されています。

この方法は,ライブラリの更新頻度がアプリケーションの更新頻度よりも低い場合に有効です。ただし,ブラウザ外実行ではこの方法を使用することができないため,注意が必要です。

アセンブリをオンデマンドで読み込む

アプリケーションの起動時には最小限の外部ライブラリだけを読み込むようにしておき,必要になった際に都度外部ライブラリを動的に読み込むようにすることで,アプリケーションの起動時間を短くすることができます。具体的な方法は,以下のページに記載されています。

この方法は,Silverlightの機能として用意されているわけではないため,必要になったタイミングで外部ライブラリのアセンブリをダウンロードし,それをもとに処理を行うといった部分をある程度作り込む必要があります。また,そのような動作に合わせてアプリケーション全体の構成をうまく調整する必要があるため,採用のハードルは比較的高いと言えます。

ツールによる最適化でアセンブリサイズを小さくする

外部ライブラリはアセンブリといった単位で分けられていますが,実際にはそのアセンブリに含まれているすべてのクラスを使用しているわけではありません。たとえば,先の図2の例ではデータグリッドとタブコントロールを使用したことで「System.Windows.Controls.Data.dll」「System.Windows.Controls.dll」という2つのアセンブリがXAPファイルに追加されています。しかしながら,⁠System.Windows.Controls.Data.dll」ではDataPagerクラス,⁠System.Windows.Controls.dll」ではDatePickerクラスなど,これらのアセンブリにはアプリケーションで使用されていない多くのクラスが存在しています。

これら使用されていないクラスをXAPファイルから削除し,Silverlightアプリケーションを最適化するのが,XapOptimizerというツールです。XAPファイル内のアセンブリを解析し,使われていないクラスやXAMLリソースを削除することで,アプリケーションサイズを小さくします。また,クラス名を,意味を持たない文字列に置き換える難読化機能も備えており,リバースエンジニアリングを困難にすることも可能です。XapOptimizerは,アプリケーションのスリム化と知的財産権の保護を一度に実現します。

XapOptimizer 1.0J
http://www.grapecity.com/tools/jp/?g/xapoptimizer/

先のデータグリッドとタブコントロールを使用したアプリケーションをXapOptimizerで解析すると,下の図のように「System.Windows.Controls.dll」ではCalenderやChildWindowといった多数のクラスが使用されていないことを確認することができます。

図3 XapOptimizerによるアプリケーションの解析結果 ※灰色の文字で書かれたクラスが使用されていないクラス

図3 XapOptimizerによるアプリケーションの解析結果 ※灰色の文字で書かれたクラスが使用されていないクラス

これらの使用されていないクラスをXAPファイルから除外することで,613KBあったXAPファイルは下の図のように469KBにスリム化されます。

図4 XapOptimizerを使って最適化を行った結果

図4 XapOptimizerを使って最適化を行った結果

XapOptimizerを試してみる

XapOptimzerはデモアプリケーションが用意されています。デモアプリケーションでは5MB以上のXAPファイルを最適化できないなどいくつかの制限がありますが,実際に試すことが可能です。ぜひ,お手持ちのサンプルアプリケーションなどを使って試してみてください。

XapOptimizerデモアプリケーション
http://www.grapecity.com/tools/jp/?g/xapoptimizer/demo/

図5 XapOptimizerデモアプリケーション

図5 XapOptimizerデモアプリケーション

著者プロフィール

八巻雄哉(やまきゆうや)

グレープシティ株式会社 テクニカルエバンジェリスト