Ruby on RailsアプリケーションをBDDで開発する際の標準となった感のあるCucumberとRSpecですが、フィーチャやスペックを日本語で記述することになります。
Mac OS XやLinuxでは全く問題にならないのですが、Windowsの場合、UTF-8の出力をコンソールに表示する事が問題となります。
NetBeansを使えば、出力ウィンドウでUTF-8を表示可能ですが、特定のフィーチャを指定して実行する機能などがないため、実用てきではありません。
コードページ変更による方法
コマンドプロンプトのコードページを65001(UTF-8)にする方法もあるようですが、日本語表示フォントの設定がうまく行かなかったり、コマンド入力が正しく実行されなかったりして、手元の環境では使用できませんでした。
何度か試しているうちに気がついたのが、設定の順序です。次の方法だとうまく行くようです。
- 日本語フォントを明示的に設定する
- コードページを変更する
1は、コマンドプロンプトのウィンドウの左上をクリックして、「プロパティ」を選択し、「フォント」の設定を「MSゴシック」に変更します。
2は、コマンドプロンプトでchcp 65001と入力して、65001(UTF-8)に変更します。
win32consoleをハックする方法
Windows上で、RSpecや Cucumberのカラー出力をしようとするとwin32consoleをインストールするようにアドバイスされます。
このモジュール自体は、日本語に対応している訳ではなさそうですが、Win32::Console::ANSI::IO#_convをハックする事で、出力文字をShift-JISに強制変更させます。
require "Win32/Console"
require "kconv"
....
module Win32
module Console
module ANSI
class IO < IO
....
def _conv(s)
if @concealed
s.gsub!( /\S/,' ')
elsif @conv
if EncodeOk
from_to(s, cpANSI, cpOEM)
elsif @@cp == 'cp932cp932'
s = s.tosjis
elsif @@cp == 'cp1252cp850' # WinLatin1 --> DOSLatin1
....
end
end
end
end
ただし、この方法はコンソールに出力する場合のみコード変換を行うため、リダイレクトを行う場合にはうまく行きません。ZenTestのautotest(RSpecの場合のautospec)は内部でリダイレクトを行っているため、うまく行きませんでした。
Ruby on RailsアプリケーションをBDDで開発する際の標準となった感のあるCucumberとRSpecですが、フィーチャやスペックを日本語で記述することになります。
Mac OS XやLinuxでは全く問題にならないのですが、Windowsの場合、UTF-8の出力をコンソールに表示する事が問題となります。
NetBeansを使えば、出力ウィンドウでUTF-8を表示可能ですが、特定のフィーチャを指定して実行する機能などがないため、実用てきではありません。
コードページ変更による方法
コマンドプロンプトのコードページを65001(UTF-8)にする方法もあるようですが、日本語表示フォントの設定がうまく行かなかったり、コマンド入力が正しく実行されなかったりして、手元の環境では使用できませんでした。
何度か試しているうちに気がついたのが、設定の順序です。次の方法だとうまく行くようです。
- 日本語フォントを明示的に設定する
- コードページを変更する
1は、コマンドプロンプトのウィンドウの左上をクリックして、「プロパティ」を選択し、「フォント」の設定を「MSゴシック」に変更します。
2は、コマンドプロンプトでchcp 65001と入力して、65001(UTF-8)に変更します。
win32consoleをハックする方法
Windows上で、RSpecや Cucumberのカラー出力をしようとするとwin32consoleをインストールするようにアドバイスされます。
このモジュール自体は、日本語に対応している訳ではなさそうですが、Win32::Console::ANSI::IO#_convをハックする事で、出力文字をShift-JISに強制変更させます。
require "Win32/Console"
require "kconv"
....
module Win32
module Console
module ANSI
class IO < IO
....
def _conv(s)
if @concealed
s.gsub!( /\S/,' ')
elsif @conv
if EncodeOk
from_to(s, cpANSI, cpOEM)
elsif @@cp == 'cp932cp932'
s = s.tosjis
elsif @@cp == 'cp1252cp850' # WinLatin1 --> DOSLatin1
....
end
end
end
end
ただし、この方法はコンソールに出力する場合のみコード変換を行うため、リダイレクトを行う場合にはうまく行きません。ZenTestのautotest(RSpecの場合のautospec)は内部でリダイレクトを行っているため、うまく行きませんでした。
Sun MicrosystemsでJRubyのフルタイムの開発者として活動してた、Charles Nutter, Thomas Eneboそして、Nick Siegerの3人がSunをやめて、Ruby on Railsのホスティングを主たる業務としているEngine Yardに移るとのニュースが出ていました。
Sun’s JRuby team jumps ship to Engine Yard
OracleがSunの吸収を決めてから、JRubyについてどうするのかのはっきりした態度を示さないので、しびれを切らして見切ったようです。
おりしも、Charles Nutterが、自身のブログの中で、RubyにはJRubyが必要だ、エンタープライズの人は誰もCRubyを業務で走らせようとは思わない、といつになくMatz Rubyに対して攻撃的だったので、これは何かあるなと思っていたところでした。
JRuby’s Importance to Ruby, and eRubyCon 2009
今後はJRuby 1.4のリリースに専念するそうですが、今のテーマは、Java市民としてのJRubyだそうで、なんとHibernateがJRubyで使えるなど、JavaのフレームワークとJRubyの融合を主眼においているようです。
ところで、こうなると気になるのがMicrosoftのIronRubyチームの動向です。不景気のリストラで、ほかのDLRを使う言語とチームが合体したというニュースはだいぶ前に目にしましたが、予定されていたOSCONが終わっても当初アナウンスの1.0はおろかセッションタイトルの0.9もリリースされていません。大丈夫なのでしょうか?
Sun MicrosystemsでJRubyのフルタイムの開発者として活動してた、Charles Nutter, Thomas Eneboそして、Nick Siegerの3人がSunをやめて、Ruby on Railsのホスティングを主たる業務としているEngine Yardに移るとのニュースが出ていました。
Sun’s JRuby team jumps ship to Engine Yard
OracleがSunの吸収を決めてから、JRubyについてどうするのかのはっきりした態度を示さないので、しびれを切らして見切ったようです。
おりしも、Charles Nutterが、自身のブログの中で、RubyにはJRubyが必要だ、エンタープライズの人は誰もCRubyを業務で走らせようとは思わない、といつになくMatz Rubyに対して攻撃的だったので、これは何かあるなと思っていたところでした。
JRuby’s Importance to Ruby, and eRubyCon 2009
今後はJRuby 1.4のリリースに専念するそうですが、今のテーマは、Java市民としてのJRubyだそうで、なんとHibernateがJRubyで使えるなど、JavaのフレームワークとJRubyの融合を主眼においているようです。
ところで、こうなると気になるのがMicrosoftのIronRubyチームの動向です。不景気のリストラで、ほかのDLRを使う言語とチームが合体したというニュースはだいぶ前に目にしましたが、予定されていたOSCONが終わっても当初アナウンスの1.0はおろかセッションタイトルの0.9もリリースされていません。大丈夫なのでしょうか?
最終日は日曜にも関わらず9時半からのセッションでしたが、午前中は元気に中会議室のセッションに参加。
田中さんのSocketの改良の話は、私にはちょっとテクニカルすぎましたが、おかげでNFSをマルチホームで使った際に発生した障害の原因らしきものに気がつきました。ありがとうございます。
artonさんのセッションは、なかなかためになる小技が聞けて収穫でした。
ごとけんさんの、いつものシリーズも、肩に力が入らないセッションで、ちょっとした作業をRubyで自動化する姿勢は見習いたいものです。あと出力をcvsではなくタブ区切りにする工夫もなるほどと思いました。
西山さんのrubygemsの落とし穴については、知っている事も多かったのですが、行儀の悪いgemをsudoでインストールすると怖いという話は正直びっくりでした。Debian系に関しては、私はrubygemsのdpkgは使わず、手動でインストールするのがよいと思っていますが。
午後のセッションは、James Edward Gray II (JEG2)さんのネットワーク監視の話とAaron PattersonさんのXMLの話を聞きました。
JEG2さんのScoutについては、名前だけは知っていたのですが、興味深い取り組みだと思いました。普通、長時間常駐が必要なアプリをなかなかRubyで書こうとは思わないものですが、プロセス監視を別の軽量なプロセスで行うという発想は面白いですね。
「ひげの山男」ことAaronさんのセッションは、現場にいた人でないと解らないかもしれませんが、爆笑の連続でした。その中でも、ちゃんと技術的なメッセージが伝わっていたのはすごいです。
最後の技術セッションは桑田さんのErubisのセッションを聞きました。Erubisも使った事がないので、使ってみようと思ったのですが、最後にどんでん返しで、これからはTenjinですと言われたのはびっくり。Sinatraの人からも名前が出ていたし、調べてみなければ。
締めのキーノートは、高橋会長でした。いつも通り?の和服で登場し、ちょっと緊張気味にRubyと日本Rubyの会の課題について語ってくれました。
時間がなかったのでReject会議は昨年に続いてパスしましたが、聞きたかったな。
RubyKaigi 2009の2日目は大変面白い一日でした。
午前中は、Sequel, Sinatra, Ramazeの3つの「軽量」ライブラリの話を聞きました。確かに、用途を既存のあるいはシンプルに考えたRubyコードに「HTTPを喋らせる」という発想は面白いですね。特に配布も簡単なVegasはとても面白く思いました。早速"Gembox":http://code.quirkey.com/gembox/ もインストールしてみました。あと、Sequelについては、まさにSQL使いのためのORMですね。1日目に高井さんの「エンタープライズRails」の話を聞いていたので、説得力倍増です。
午後からは、コミュニティアピールに続いてまつもとさんのキーノートです。いつもながらのトークは楽しかったです。そして、LT。昨日のLTもなかなかでしたが、今日のLTも力作ぞろいで、LTこそRubyコミュニティのパワーですね。
最後の駒は、1階の特別会議室でのテクニカルな?セッションシリーズに出席しました。
「Rubyのゴッドファーザー(名付け親)」である石塚さんが、楽天の増田さんと一緒にやっているFairyと分散オブジェクトのDeepConnectの話をした後、「分散オブジェクトと言えばこの人」の咳さんの登場です。さすが咳さん、ほとんど冗談でプレゼンをしているようでいて、技術的には核心を突いた見識がすばらしいところですね。
その後、Rubyのテストメンテナの遠藤さんが、プロジェクトのカバレージの変動をモニタリングするツールの説明をしてくれました。そして、カバレージを落とすMさんの話も。これも大変面白かったのですが、時間が余ったからと行って披露してくれたハッキングの数々にはみんなあっけにとられていましたね。
そして、これが一番RubyKaigiらしいと思ったのが、NariさんのGCの話と、その後の質疑応答でした。質問にたった、RHGの青木さんやYARVの笹田さんが、「GCは良くわからないのですが」と前置きをつけて質問したのにはみんな爆笑。
そうそう。昼休みには、話題の「パターン、Wiki —時を超えた創造の原則」の著者の江渡さんのサイン会があり、しっかりサインをもらってきましたが、これから読むので感想はまた後日。
RubyKaigi 2009の2日目は大変面白い一日でした。
午前中は、Sequel, Sinatra, Ramazeの3つの「軽量」ライブラリの話を聞きました。確かに、用途を既存のあるいはシンプルに考えたRubyコードに「HTTPを喋らせる」という発想は面白いですね。特に配布も簡単なVegasはとても面白く思いました。早速"Gembox":http://code.quirkey.com/gembox/ もインストールしてみました。あと、Sequelについては、まさにSQL使いのためのORMですね。1日目に高井さんの「エンタープライズRails」の話を聞いていたので、説得力倍増です。
午後からは、コミュニティアピールに続いてまつもとさんのキーノートです。いつもながらのトークは楽しかったです。そして、LT。昨日のLTもなかなかでしたが、今日のLTも力作ぞろいで、LTこそRubyコミュニティのパワーですね。
最後の駒は、1階の特別会議室でのテクニカルな?セッションシリーズに出席しました。
「Rubyのゴッドファーザー(名付け親)」である石塚さんが、楽天の増田さんと一緒にやっているFairyと分散オブジェクトのDeepConnectの話をした後、「分散オブジェクトと言えばこの人」の咳さんの登場です。さすが咳さん、ほとんど冗談でプレゼンをしているようでいて、技術的には核心を突いた見識がすばらしいところですね。
その後、Rubyのテストメンテナの遠藤さんが、プロジェクトのカバレージの変動をモニタリングするツールの説明をしてくれました。そして、カバレージを落とすMさんの話も。これも大変面白かったのですが、時間が余ったからと行って披露してくれたハッキングの数々にはみんなあっけにとられていましたね。
そして、これが一番RubyKaigiらしいと思ったのが、NariさんのGCの話と、その後の質疑応答でした。質問にたった、RHGの青木さんやYARVの笹田さんが、「GCは良くわからないのですが」と前置きをつけて質問したのにはみんな爆笑。
そうそう。昼休みには、話題の「パターン、Wiki —時を超えた創造の原則」の著者の江渡さんのサイン会があり、しっかりサインをもらってきましたが、これから読むので感想はまた後日。
明日7月17日から開かれるRubyKaigi 2009に出席します。
ところで、会議用に個人の名刺を印刷しようと思ったら、プリンタが故障していました。
グスン。
2008年5月に公開した Four Days on Rails 2.0をRuby on Rails 2.3にあわせて見直したものをアップしました。
http://rails.to/pages/4-days-on-rails-2.3