JavaScript(JScript)版のソース

以下に示すのはJScript版のソースファイルだ。

XAMLソースファイル

<Canvas
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Name="rootCanvas"
  Width="400"
  Height="400">

  <!-- (1) スクリプトソースファイルの読み込み -->
  <x:Code Source="Default.xaml.jsx" Type="text/jscript" />

  <!-- (2) マウスクリックされたら、onClickハンドラを実行する -->
  <TextBlock
    MouseLeftButtonDown="onClick"
    x:Name="greeting">Click Me!</TextBlock>
</Canvas>

ここでのポイントは括弧書きの数字で示した2個所になる。詳細は以下のとおりだ。

(1) <x:Code>タグを用いて、Default.xaml.jsxというJavaScriptソースファイルを読み込む。読み込むスクリプトファイルの種類を指定するためのType属性が非常に重要で、ここではtext/jscriptを使用する必要がある。

(2) <TextBlock>タグのMouseLeftButtonDown属性に「onClick」を指定しており、マウスクリック時の処理を指定している。x:Name属性により、このテキスト要素には「greeting」という名称を指定している。

スクリプトに関してはとても簡単だ。以下にDefault.xaml.jsxファイルの内容を示す。

JavaScript(JScript)ソースファイル

function onClick(sender, e) {
  // greeting要素のTextプロパティに新しい文字列を設定
  greeting.Text = "Hello, JavaScript!"
}

ご覧のとおり、onClickイベントハンドラが1つ書いてあるだけだ。XAML上で、x:Name属性を使用して「greeting」と名付けたテキスト要素のTextプロパティを設定している。

このイベントハンドラの引数は、第一引数「sender」がイベントの送信元、第二引数「e」が発生したイベントを表すオブジェクトだ。

IronPython版のソース

次に、同じサンプルをIronPythonで記述するとどうなるかを紹介しよう。まずはXAMLファイルだ。

XAMLソースファイル

<Canvas
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Name="rootCanvas"
  Width="400"
  Height="400">
  <!-- (1) スクリプトソースファイルの読み込み -->
  <x:Code Source="Default.xaml.py" Type="text/ironpython" />
  <TextBlock
    MouseLeftButtonDown="onClick"
    x:Name="greeting">Click Me!</TextBlock>
</Canvas>

JScript版と異なるのは、読み込むファイルがJavaScriptソースファイルではなくPythonのソースファイルだということだ。

(1)をつけた部分に注目してほしい。Source属性で読み込むファイルの拡張子は「py」であり、Typeには「text/ironpython」を指定している。IronPythonのスクリプトファイルを読み込むには、Type属性に「text/python」か「text/ironpython」を指定する必要がある。

IronPythonのスクリプトファイルを以下に示す。特に注意すべき点はない。

IronPythonのスクリプトファイル

def onClick(sender, e):
    greeting.Text = "Hello, IronPython!"

IronRuby版のソース

最後に、IronRubyで同じサンプルを書くとどうなるかを紹介する。ここで紹介するのは、あくまでMIX07カンファレンスのデモを見た結果からひもといたものであり、現状のSilverlight 1.1では動作させることはできない。

XAMLファイル

<Canvas
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Name="rootCanvas"
  Width="400"
  Height="400">

  <!-- (1) スクリプトソースファイルの読み込み -->
  <x:Code Source="Default.xaml.rb" Type="text/ironruby" />
  <TextBlock
    MouseLeftButtonDown="onClick"
    x:Name="greeting">Click Me!</TextBlock>
</Canvas>

(1) Rubyソースファイルを読み込むには、Type属性に「text/ironruby」か「text/ruby」を指定する必要がある。

Rubyのソースファイルはこうなる。

def onClick(sender, e)
  sender.Text = "Hello, IronRuby!"
end

先ほども説明したとおりこのサンプルは動作させられないのだが、実行しようとした際に現れるエラーメッセージをよく見ると「Ruby.Hosting.RubyLanguageProviderを読み込むことができない」という示唆に富んだメッセージとなっている。つまり、SilverlightはType="text/ironruby"を認識してIronRubyのインタープリタを呼び出そうとしているということで、Silverlight自体にはすでにIronRubyのサポートが組み込まれているということだ。

IronRubyを実行した際に現れるエラーメッセージ

まとめ

以上で、Silverlight 1.1とDLR(Dynamic Language Runtime)の紹介をひとまず終わりにする。実際にスクリプト言語でSilverlightアプリケーションの開発を行ってみると、やはりコンパイルの必要がない分非常にスムーズな開発を行うことができるという手ごたえが得られた。DLRのおかげで、JavaScriptやActionScriptなどのスクリプト言語を扱えるデザイナがSilverlightアプリケーションを手早く作ることも決して不可能ではなくなった。複雑なビジネス処理が必要な業務アプリケーションでも、デザイナとプログラマがきれいに役割分担して並行開発を進めることも夢ではない。理想のRIAプラットフォームにかなり近づきつつあるSilverlight 1.1、これからも要注目だ。