IronRuby上のRSpecで日本語が文字化け
IronRuby 1.0.0.0 とRSpec 1.3.0の組み合わせでテスト記述にShift_JISを使うと文字化けします。
具体的には
describe Array, "emptyの場合" do before do @empty_array = [] end it "emptyであること" do @empty_array.should be_empty end it "sizeが0であること" do @empty_array.size.should == 0 end after do @empty_array = nil end end
このような記述で実行すると
>spec array_spec.rb -fs
Array emptyツの場合
- emptyツでつ�ツるこツづ
- sizeツつェ0ツでつ�ツるこツづ
Finished in 0.074 seconds
2 examples, 0 failures
この様に怪しい文字化けが起こりました。
オプションを-fhtmlにして出力したHTMLファイルでも同様の文字化けが発生します。
かなりがっかりしていたのですがテスト記述ファイル文字コードをUTF-8にすると文字化けが起こらないことがわかりました。
極めて怪しい不具合で気になりますがとりあえずは文字コードをUTF-8を使用する運用で使えなくはなさそうです。
コンソールやテキストファイルなどでShift_JISの方が都合がよいという場合にはnkfなどを使えば良いと思います。
例えば文字コードがShift_JISで保存されている上記のテスト記述の場合にnkfを使って
>nkf "-SwO" array_spec.rb array_utf8_spec.rb & spec array_utf8_spec.rb -fs | nkf "-Ws" & del array_utf8_spec.rb
Array emptyの場合
- emptyであること
- sizeが0であること
Finished in 0.073 seconds
2 examples, 0 failures
このようにして文字化けさせずにコンソールに表示させることができます。
上記は対比のために実行コマンドを強引に一行で書きましたが以下の様な3つのステップで実行しています。
1.Shift_JISのarray_spec.rbファイルをUTF-8のarray_utf8_spec.rbに変換
> nkf "-SwO" array_spec.rb array_utf8_spec.rb
2.UTF-8のarray_utf8_spec.rbを使用してRSpecテストを実行してその出力をShift_JISに変換して表示
> spec array_utf8_spec.rb -fs | nkf "-Ws"
3.実行のために作成したUTF-8のarray_utf8_spec.rbを削除
> del array_utf8_spec.rb
この様な処理を行うバッチファイルを作成すると良いでしょう。(時間があればサンプルを書いて公開したいと思います)
なおwindows版のnkfは「nkf.exe nkf32.dll Windows用の詳細情報 : Vector ソフトを探す!」からダウンロードできます。
RSpecが使えなければIronRubyに失望するところでしたが、なんとかRSpecが使えそうなこととやはりRubyと.NETで相互運用ができるのは私にとっては大きな魅力でありかろうじて絶望はまぬがれました。
実は他にも
などの点で問題にぶつかっています。
これらは言語的な問題ではありませんが、例えば
などの互換性で問題になっています。
この様な状況から感じることはIronRubyはまだ当面は.NETのライブラリを中心に使うような用途向きで、Rubyのライブラリやリソースを駆使する場合には注意が必要だということだと思います。
なおこれらの問題についてもある程度調査と対処ができていますのでまたの別の機会にでも報告したいと思います。