【ハウツー】

SilverlightでRubyが動く!? Microsoft DLRの威力とは

2 JScript/IronPython/IronRubyのサンプル

    白石俊平  [2007/05/08]

    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、これからも要注目だ。

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン