IronRuby0.9をためしてみた

※(8/8)いろいろ事実誤認があったので訂正しています。

(批判とかではなく単なる報告なので、どうか誤解なきよう……)

IronRuby0.9が出た件。

http://blog.jimmy.schementi.com/2009/08/ironruby-09-released.html


0.4や0.5のときにちょっとためしてそれっきりだったけど、Win32OLEが動くと聞いてちょっと食指が動く。


で、ためしてみた。しかしかゆいところが未実装、というのが少なからずあり。

やってみたこと

System.Data.SqlClientが使えた

mscorlib、System.Data、System.Data.SqlClientをrequireするだけ。

あとはSqlConnection - SqlCommand - SqlDataAdapter - DataSetという超基本コンボ。

やはり生で使うと面倒くさい。これならWin32OLE+ADOでいいんじゃないか。あるいはActiveRecord

でも動くことに意義がある。

System.Data.OracleClientが使えなかった使えた

System.Data.OracleClientをrequireしても「ファイルがない」と言われる。OledbClientも不可。なんじゃろ。

→require 'System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' と書けばよい。

System.Data.OleDbはSystem.DataをIncludeすれば使える。ていうかOleDbClientなんてないよ! アホか俺!


System.Dataが一発でrequireできるのは、lib/IronRuby/System.Data.rbというショートカットが作られているためだった。

httpでダウンロードできた

open-uriで1行コード。

open("url"){|f| f.line {|line| puts line}}

普通に動く。

文字コードが変換できない

utf-8のwebページを出力すると化けるので、変換しようと思ったらKConvが動かない。

irb(main):002:0> require 'kconv'
=> true
irb(main):003:0> 'あいうえお'.tosjis
NoMethodError: undefined method `nkf' for NKF:Module

なぜかと思ったらNKFがスタブだった。定数しか定義されていない。


実装した、みたいなMLの投稿も見かけたが、「プラットフォーム依存になるけどどうする?」と但し書きがあった。

http://rubyforge.org/pipermail/ironruby-core/2008-May/001834.html

Iconvも期待通りに動かない。

irb(main):006:0* require 'iconv'
=> true
irb(main):007:0> Iconv.iconv('SHIFT_JIS', 'UTF-8', 'あいうえお')
=> nil

文字コード周りはまだまだ、ということか。フィードバックはどうすればいいんだろう。

System.Text.Encodingを使えと? あるいはUTF-8で通すか?


→ildasmでIronRuby.Libraries.dllをのぞいてみたら、一応Iconvクラスの中にEncoder/Decoderを使った処理が入っているようだった。じゃあ動きそうなものだが……

gemがうまく動かない。

igem(IronRuby版gem)でもろもろインストールしてみた。前のリリースではgemそのものも普通rubyから持ってくる必要があったが、今回は同梱。

で、activerecordの導入中にriのインストールがこける。

Installing ri documentation for activerecord-2.1.1...
ERROR:  While executing gem ... (NoMethodError)
   undefined method `<<' for nil:NilClass

install successfulとはいうものの、igem listしてもlocal gemsが認識されない。

IronRuby側のgemフォルダをGEM_PATHを設定してみるが、だめ。

ふつうrubyのほうを設定する(つまりgemをrubyと共有)すると、igemでもリストされるようになった。


ただiirbからrequireすると「ファイルが見つからない」といわれる。

irb(main):001:0> require 'activerecord'
LoadError: no such file to load -- activerecord
       from :0:in `require'
       from (irb):1
       from :0:in `eval'

何がいけないんだ…

ExcelをWin32OLEで操作できた

るびまのサンプルが動いた。

http://jp.rubyist.net/magazine/?0004-Win32OLE


ただole_method_helpやole_obj_helpは未実装でした。irbでちくちくやるのには向かない。