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というショートカットが作られているためだった。
文字コードが変換できない
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でちくちくやるのには向かない。