Silverlight 2の登場以来、C#やVisual Basicを使ってプログラムできるということが大々的に宣伝されるようになり忘れがちですが、SilverlightはWebブラウザに搭載されているJavaScriptからも制御可能です。最初にSilverlight 1.0が登場した当時は共通言語ランタイムが含まれていなかったため、SilverlightのプログラミングにはJavaScriptが使われていました。積極的なアナウンスは行われていませんが、Silverlight 2でもJavaScript APIは少なからず拡張されています。

しかし、JavaScriptによるSilverlightアプリケーション開発は、C#やVisual Basicによる開発とは大きく異なります。

マネージコードによるSilverlightアプリケーションは、Visual Studioなどを使ってプログラムをコンパイルしなければなりません。Visual StudioはSilverlight用のプロジェクトをビルドすると、マネージコードを含むDLLファイルやマニフェスト、その他のリソースなどをXAPファイルにパッケージ化します。XAPファイルの実体はZIP形式のアーカイブなので、拡張子をZIPに変更するだけでファイルを取り出せます。現在では、多くのSilverlightアプリケーションがマネージコードで作られており、Microsoftもマネージコードによる開発スタイルを推奨しています。

図01 生成されたXAPファイルに含まれているDLLとマニフェスト

一方、JavaScriptによるSilverlightアプリケーションは、外観を宣言するXAMLとHTMLページに含まれているJavaScriptによって制御されます。コンパイラなどは不要で、一般的なJavaScriptを使ったアプリケーション開発と同じように、テキストエディタだけでプログラムを編集できます。多くのWindows開発者にとってVisual Studioで開発できるマネージコードの方が生産性が高く便利ですが、マネージコードと比較してJavaScriptの利点もあります。

  • 既存のJavaScriptで書かれたプログラムとの相互運用が容易。
  • コンパイル(開発ツール)が不要。
  • テキストエディタで簡単に作成・編集できる。
  • JavaScriptとXAMLを1つのHTMLファイル内に記述できる。
  • Webデザイナの多くはJavaScriptを経験している。

マネージコードによる開発には原則としてMicrosoftがサポートしている開発ツールが必要になりますが、JavaScriptの場合はテキストエディタだけで開発できます。テキストエディタでファイルを編集するだけで、即席でSilverlightアプリケーション開発を体験できるのは大きなメリットでしょう。

既存のシステムがAjaxベースのWebアプリケーションであれば、サーバーとの通信やデータ変換を行うコードはそのままで、結果の表示部分(プレゼンテーション)だけをSilverlightに置き換えるだけで移行できるなど、JavaScriptで記述された過去の資産を有効活用できるのも重要です。

また、scriptタグにXAMLコードを記述するインラインXAMLと呼ばれる手法を用いれば、JavaScriptとXAMLの両方を同じHTMLページに含められます。これによってスタンドアロンな1つのHTMLファイルだけでSilverlightアプリケーションを配置できます。シンプルで軽量なプログラムに適しているでしょう。

一方で、無視できないデメリットも存在します。

  • マネージコード用の豊富なクラスライブラリが利用できない。
  • 統合開発環境の支援なしではデバッグが困難。
  • ソースコードが公開されてしまう。
  • プログラムのパフォーマンスが、ブラウザのJavaScriptエンジンに依存する。

Silverlight 2以降に追加されたマネージコード用のクラスライブラリをJavaScriptから直接利用することはできません。生産性を重視する業務アプリケーションであれば、圧倒的にマネージコードが有利となります。

マネージコードはSilverlightに搭載されているランタイムによって実行されますが、JavaScriptはブラウザのスクリプトエンジンによって実行されるため、特に古いブラウザで実行されるとパフォーマンスが大幅に低下するでしょう。

JavaScriptはテキストエディタで記述され、コンパイルされることなくそのままクライアントに配信されます。よって、Ajaxアプリケーションと同様にソースコードが全て公開になるというのも特徴です。マネージコードでもDLLファイルを逆アセンブルできますが、高水準言語に比べれば中間言語を読み解くのは困難です。ゲームなど広くWebで配信するSilverlightアプリケーションの場合、画像などの必要なリソースをパッケージ化して配信できるマネージコードのほうが適しています。

図02 Silverlightランタイムと.NET Frameworkの関係

マネージコードによる開発は高性能なプログラミング言語を利用でき、機能も豊富ですが、内部構造やアプリケーションの起動プロセスが複雑になっています。.NET Frameworkの専門的な知識無しに全体を把握するのは難しいでしょう。一方、XAML+JavaScriptは非常にシンプルな構造なので、特別なツールを使わなくても管理が容易です。

マネージコードとJavaScript、それぞれの特徴をよく理解した上でSilverlightアプリケーションの開発スタイルを検討してください。マネージコードとJavaScript は互いに呼び出しあってデータを交換することも可能なので、これらの関係は排他的なものではありません。混在させて利用することも可能です。大規模なアプリケーションの開発にはマネージコードを採用し、ベクタグラフィックスの描画程度が目的であればXAML+JavaScriptを採用するなど、規模によって適切な開発スタイルを選べます。

著者プロフィール:赤坂玲音

フリーランスのテクニカルライタ兼アプリケーション開発者。主にクライアント技術、プレゼンテーション技術が専門。2005年から現在まで「Microsoft MVP Visual C++」受賞。技術解説書を中心に著書多数。近著に『Silverlight入門』(翔泳社)などがある。