IronPython 2.0では内部構造の総入れ替えが行われていることは分かった。またそれが、DLRという言語エンジンの上に構築されていることも分かった。では、具体的にどんなことが可能になっているのだろうか?

その一端を、Silverlight 1.1αを使って検証してみよう。早速、Silverlight 1.1 Alpha for WindowsMicrosoft .NET Framework 3.0 再頒布可能パッケージのインストールを行ってほしい。

また、後述するC#コンパイラ(csc.exe)を利用するには、「Microsoft .NET Framework 2.0 SDK 日本語版(x86)」、「Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components」のどちらかをあらかじめ導入しておく必要がある。

SilverlightとDLRの初歩

ここでは、Silverlightを動かす簡単な画面を作成する。画面作成には、Expression Blend 2 May Preview(英語版)をインストールして使うと良い。

以下の画面は、Expression Blend 2上で、新規にSilverlight Application(JavaScript)プロジェクトを作成し、単純なテキストボックスを貼り付けた様子である。

Silverlight Application(JavaScript)プロジェクトを作成し、単純なテキストボックスを貼り付けた様子

これを保存すると、以下のファイル群が作成される。

生成されるファイル群

このテキストボックスをクリックするたびに、メッセージを変化させるプログラムをIronPythonで作成してみよう。

まず、Scene.xamlを以下のように修正する(太字の修正部分に注目)。

修正前


<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="640" Height="480"
    Background="White"
    >
    <TextBlock Width="320" Height="408" Canvas.Left="152" Canvas.Top="24" Text="TextBlock" TextWrapping="Wrap"/>
</Canvas>

修正後


<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="640" Height="480"
    Background="White"
    >
    <x:Code Source="Default.xaml.py" Type="text/ironpython" />
    <TextBlock Width="320" Height="408" Canvas.Left="152" Canvas.Top="24" Text="TextBlock" TextWrapping="Wrap" x:Name="text1" MouseLeftButtonDown="OnClick"/>
</Canvas>

次に、Default.xaml.pyという名前のIronPythonプログラムを記述する。


from datetime import *

def OnClick(sender, e):
    text1.Text = "%s\n%s: %s" % (text1.Text, datetime.now().strftime("%H:%M:%S"), "Hello MYCOM")

上記のプログラムを実行した例を、以下に示す。

テキストボックスをクリックするたびに、メッセージが変化する

先のプログラムの動作を簡単に解説する。

  • Scene.xamlがロードされる時、タグ内に記述された、Default.xaml.pyがIronPythonの制御プログラムとして読み込まれる
  • Scene.xamlのテキストボックス(text1という名前)の上でマウスを左クリックすると、IronPythonで記述されたOnClick関数が呼ばれる
  • OnClick関数内で、テキストボックスの値(text1.Text)を操作し、”Hello MYCOM”とクリックした時間を出力する

ここまでの流れを見ると、WebブラウザおよびJavaScriptで記述するクライアントスクリプトのソースコードとそう大して変わらないことが分かる(HTMLがXAMLになり、JavaScriptがIronPythonになったと思えばよい)。