木曜日, 9月 03, 2009

OS X で IronRuby その1

ひさしぶりのブログ。再開の第1号は開発ネタで。

OS X で IronRuby を動かして遊んでみようと、ちょっくら試行錯誤してみました。

まずは Mono の入手から。知らない間に 2.4 になってる。
ダウンロードページから、OS X Intel 用 Mono 2.4.2.3 Framework の dmg を落としてきて、インストールした後、動作確認。

$ vim hello.cs
  1 using System;
  2
  3 public class Program
  4 {
  5         static public void Main()
  6         {
  7             Console.WriteLine("hogehoge");
  8         }
  9 }
$ mcs hello.cs
$ mono hello.exe
hogehoge

ファイル名と出力が一致していないのはおいといて、
当然動くのを確認して、次は System.Windows.Forms の動作確認。

$ vim form.cs
  1 using System;
  2 using System.Windows.Forms;
  3
  4 public class Program
  5 {
  6     static public void Main()
  7     {
  8             Application.Run(new Hello());
  9     }
 10 }
 11
 12 public class Hello : Form
 13 {
 14         public Hello()
 15         {
 16                 Text = "Hello World";
 17         }
 18 }

$ mcs form.cs
form.cs(2,14): error CS0234: The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference?
Compilation failed: 1 error(s), 0 warnings

shell returned 1

何にも考えずに実行したら怒られた・・・。

Mono Basics - Mono によると、
mcs hello.cs -pkg:dotnet ( .NET 1.1 アセンブリの場合)
gmcs hello.cs -pkg:dotnet (.NET 2.0 アセンブリの場合)
って書いてあるのに、実行してみると・・・

Package dotnet was not found in the pkg-config search path.
Perhaps you should add the directory containing `dotnet.pc'
to the PKG_CONFIG_PATH environment variable
No package 'dotnet' found
error CS8027: Error running pkg-config. Check the above output.

そんなパッケージ知らん、環境変数設定しろやと言われる。

うーん。dmg で導入したのに面倒だなぁ。
ひとまず、参照アセンブリを指定したら、コンパイルはできることがわかった。
$ mcs -r:System.Windows.Forms.dll form.cs
$ mono form.exe


ちょいと時間がかかってから、あっけなく表示された。

先ほどの PKG_CONFIG_PATH 環境変数について、dotnet.pc を含むパスを設定したらいいんちゃう?とあるので、検索。
$ find / -name "dotnet.pc"
/Library/Frameworks/Mono.framework/Versions/2.4.2.3/lib/pkgconfig/dotnet.pc

見つかったので、設定しておく。
$ vim ~/.profile
 export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/2.4.2.3/lib/pkgconfig
$ source ~/.profile

さて、もう一度やりなおし。
$ gmcs form.cs -pkg:dotnet
今度はコンパイルOK。これでアセンブリの指定は必要なくなった。


ということで、本題の IronRuby へ。

Ruby の .NET 実装である IronRuby の最新は、現在 0.9 。ダウンロードページから Zip ファイルを落としてきて展開して、最初のバージョン確認。
$ mono ../ironruby-0.9.0/bin/ir.exe -v
IronRuby 0.9.0.0 on .NET 2.0.0.0

お、とりあえず動いた。

$ mono ../ironruby-0.9.0/bin/ir.exe -e 'puts "hello"'
hello

ま、動くわな。じゃ、そろそろ IronRuby で System.Windows.Forms を動かすかー。
$ vim winform.rb
  1 require 'System'
  2 require 'System.Windows.Forms'
  3
  4 Form = System::Windows::Forms::Form
  5 Application = System::Windows::Forms::Application
  6
  7 class TestForm < Form
  8   def initialize
  9     self.Text = "Hello World Form"
 10   end
 11 end
 12
 13 Application.run TestForm.new

$ mono ../ironruby-0.9.0/bin/ir.exe winform.rb
で動きましたとさ。

・・・ということで、次回はもうちょっと IronRuby と Windows.Forms で遊んでみようかと。

0 件のコメント: