先日公開されたIronRubyのプレアルファ版をちょっと触ってみようと思います。
とりあえず以下の手順でビルドしてみました。
-
IronRuby-Pre-Alpha1.zipをダウンロードし、展開する。
-
スタートメニューから
Microsoft Visual Studio 2005
→Visual Studio Tools
→Visual Studio 2005 コマンドプロンプト
を開く。
別にこの方法でなくても.NET Framework SDKのbinにパスが通っていたらいいと思います。
-
カレントディレクトリをIronRuby-Pre-Alpha1.zipを展開したフォルダに変更する。
-
build.cmdを実行する。
-
そしたら次のようなファイルができる。
- Microsoft.Scripting.dll
- Microsoft.Scripting.pdb
- Microsoft.Scripting.xml
- rbx.exe
- rbx.pdb
- Ruby.dll
- Ruby.pdb
- RubyTestHost.exe
- RubyTestHost.pdb
生成されたrbx.exeを実行してみると次のような画面になりますよ。
(この実行は普通のコマンドプロンプトでOK)
D:\IronRuby-Pre-Alpha1\Bin\Release>rbx
IronRuby Pre-Alpha (1.0.0.0) on .NET 2.0.50727.832
Copyright (c) Microsoft Corporation. All rights reserved.
>>> puts 'Hello, World'
=> nil
>>>
実は、最初間違ってput 'Hello, World'とかやったんですが、irbのようにNoMethodErrorが出るのではなくて、.NET CLRのSystem.MissingMethodExceptionと共に大量のスタックトレースが吐き出されました(^^;
せっかくなのでWindowsFormを操作してみます。
(荒井省三さんのblogを参考に試してみました。)
>>> require 'System.Windows.Forms'
=> true
>>> f = System::Windows::Forms::Form.new()
=> #<Form:0000002c>
>>> f.ShowDialog()
=> #<DialogResult:0000002d>
>>>
ボタンを配置して、イベントを発生させてみましょう。
IronRuby Pre-Alpha (1.0.0.0) on .NET 2.0.50727.832
Copyright (c) Microsoft Corporation. All rights reserved.
>>> require 'System.Windows.Forms'
=> true
>>> require 'System.Drawing'
=> true
>>> f = System::Windows::Forms::Form.new()
=> #<Form:0000002b>
>>> b = System::Windows::Forms::Button.new()
=> #<Button:0000002c>
>>> b.Location = System::Drawing::Point.new(50,100)
=> nil
>>> b.Text = '日本語'
=> nil
>>> # ref. http://www.hanselman.com/blog/WPFSampleInIronRubyTalkingViaCToWesabe.aspx
=> nil
>>> b.click do|sender, args|
... System::Windows::Forms::MessageBox.Show(sender.Text)
... end
=> nil
>>> f.Controls.Add b
=> nil
>>> f.ShowDialog
=> #<DialogResult:0000002d>
>>>
もちろん上記コードをソースファイルにして読み込ませることもできます。
っつーか出来なかったら終わってますが(^^;
require 'System.Windows.Forms'
require 'System.Drawing'
f = System::Windows::Forms::Form.new()
b = System::Windows::Forms::Button.new()
b.Location = System::Drawing::Point.new(50,100)
b.Text = '日本語'
b.click do|sender, args|
System::Windows::Forms::MessageBox.Show(sender.Text)
end
f.Controls.Add b
f.ShowDialog
D:\IronRuby-Pre-Alpha1\Bin\Release>rbx test.rb
ちなみにコード中、律儀にSystem::Windows::Forms::MessageBox.Show
とかやっていますが、別に几帳面なのではなくこうしないとエラーになるから仕方なくやっているだけです(^^;
まぁ、まだプレアルファ版ということでこの辺の面倒くさいあたりが改善されていくことを祈るばかりですね。