いたさんのブログ

rails to Niigata

Ruby

WindowsでCucumberのフィーチャやRSpecのスペックを日本語で表示する

Ruby on RailsアプリケーションをBDDで開発する際の標準となった感のあるCucumberとRSpecですが、フィーチャやスペックを日本語で記述することになります。
Mac OS XやLinuxでは全く問題にならないのですが、Windowsの場合、UTF-8の出力をコンソールに表示する事が問題となります。
NetBeansを使えば、出力ウィンドウでUTF-8を表示可能ですが、特定のフィーチャを指定して実行する機能などがないため、実用てきではありません。

コードページ変更による方法


コマンドプロンプトのコードページを65001(UTF-8)にする方法もあるようですが、日本語表示フォントの設定がうまく行かなかったり、コマンド入力が正しく実行されなかったりして、手元の環境では使用できませんでした。

何度か試しているうちに気がついたのが、設定の順序です。次の方法だとうまく行くようです。

  1. 日本語フォントを明示的に設定する
  2. コードページを変更する

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)は内部でリダイレクトを行っているため、うまく行きませんでした。

Published on 08/09/2009 at 14:43 under . タグ , , , , , ,

JRubyチームがSun(Oracle)を離れたこと

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もリリースされていません。大丈夫なのでしょうか?

Published on 07/28/2009 at 16:39 under . タグ ,

RubyKaigi 2009 最終日

最終日は日曜にも関わらず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会議は昨年に続いてパスしましたが、聞きたかったな。

Published on 07/20/2009 at 03:01 under . タグ

RubyKaigi 2009 2日目

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 —時を超えた創造の原則」の著者の江渡さんのサイン会があり、しっかりサインをもらってきましたが、これから読むので感想はまた後日。

Published on 07/18/2009 at 15:40 under . タグ , , , , , , ,

RubyKaigi 2009に出席します

明日7月17日から開かれるRubyKaigi 2009に出席します。

ところで、会議用に個人の名刺を印刷しようと思ったら、プリンタが故障していました。

グスン。

Published on 07/16/2009 at 15:44 under .

Oracleかあ!

米オラクルがサンを買収へ 7300億円で
http://www.asahi.com/business/update/0420/TKY200904200329.html

Published on 04/20/2009 at 14:35 under . タグ ,

Windowsでruby-pgをコンパイルする

PostgreSQL用のRubyアダプタは、Rubyで書かれたpostgres-prと、Cで書かれたライブラリがありますが、Cで書かれた方は、名前がpostgres、ruby-postgres、ruby-pg、pgところころかわった上、Windows用のバイナリが提供されなくなったため、Windowsでは使いにくくRailsではMySQLが好まれる一因になっているような気がします。

一時はpgのメンテナがWindowsでコンパイルできる人を募集するなどしていたようですが、最近ではバイナリパッケージは出ていないものの、Windowsでのコンパイル方法がフォーラムで紹介されるなど、状況が改善されてきています。

http://www.microsoft.com/japan/msdn/vstudio/express/

私もいろいろ試してみたところ、最新版では通常のgemでもコンパイル導入ができるようなので、紹介しておきます。

1. PostgreSQLのインストール

最新版の8.3.5-1をインストールします。インストールオプションで開発用のモジュール(インクルードファイルとライブラリ)を追加しておきます。

2. Visual C++ 2008 Express Editionのインストール

下記のページから、Visual C++ 2008 Express Editionをダウンロードし、インストールします。
http://www.microsoft.com/japan/msdn/vstudio/express/

3. Rubyのconfig.hの修正

Ruby 1.8.6のヘッダファイルconfig.hには、Visual C++のバージョンを6.0に限定する下記のディレクティブが含まれているため、これをコメントアウトします。


/*
#if _MSC_VER != 1200
#error MSC version unmatch
#endif
*/

4. gemのインストール


環境変数を利用するため、Windowでスタート>すべてのプログラム>Microsoft Visual C++ 2008 Express Edition>Visual Studio Tools>Visual Studio コマンド プロンプトを起動します。
このコマンドプロンプトからgemをインストールします。

>gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.7.9.2008.10.13
1 gem installed
Installing ri documentation for pg-0.7.9.2008.10.13...
Installing RDoc documentation for pg-0.7.9.2008.10.13...

のようにインストールできればOKです。

Published on 11/28/2008 at 13:12 under . タグ , , , ,

IronRuby初のバイナリリリース

Microsoftがオープンソースプロジェクトとして開発しているIronRubyが初のバイナリをリリースしました。

http://rubyforge.org/projects/ironruby

まだ、アルファ版ということですし、C版のRubyや、JRubyなどに比較しても「何倍も遅い」状態ですが、標準ライブラリを添付したバイナリリリースの登場は、大きなマイルストーンだったと思います。

開発者のJohn Lam氏がブログ("IronRuby at OSCON":http://www.iunknown.com/2008/07/ironruby-at-oscon.html )で紹介していますが、OSCONで発表された中には、オープンソースのリポジトリサービスとして急速に普及しているGithubで、Microsoft以外の開発者がコントリビュートするためのプロジェクトを立ち上げていくということです。第1弾は、SilverlightをRailsアプリケーションに組み込むためのPluginだそうです。

さらに、Microsoftにとって画期的なのは、IronRubyの開発中に行った、RubySpecのコードの修正版を、RubySpecプロジェクトにコントリビュートするということです。Microsoftが自社以外のオープンソースプロジェクトにコードを提供するということは、「Microsoft的には」大変な事だったようです。

Published on 07/26/2008 at 03:32 under . タグ , ,

RubyKaigi 2008 The Day Two - PM 3

TuneCoreのAlex Kaneさんの事例紹介。

主にインディーズのメディアファイルの配信(iTunes, Amazon MP3 etcへの)ビジネスなのだそうです。

1日に100のアルバムをリリースしているそうです。

フロント(アーティスト側)は通常のアカウンティングサイト。ただし、大きなファイルのアップロードは、mongrelではなくてmerbを使っているとのこと。

配布エンジンはほとんどRuby。ただしエンコード変換は外部、XMLのValidateはJavaだそうです。

メッセージキューをYAML形式で実装しAmazonのサービスを利用。

Amazon EC2を使って配信サーバーを動的に管理している。700のサーバーを起動するのに5分。ストレージはAmazon S3。

前田修吾さんの話。「Rails症候群」

  • protectedの多用(誤用)
  • 既存クラスの再定義をしたがる
  • Rubyが何だか知らない
  • 文字列とシンボルの区別がつかない
  • !の誤用

でも、Rubyのせいかも?

  • protectedは不要?
  • selector namespace/classbox

多様性を保証するためにも言語仕様を。

RubySpecはいいけど、政府調達には…ISO化も考えているとのこと。

Published on 06/22/2008 at 08:00 under . タグ ,

RubyKaigi 2008 The Day Two - PM 2

iKnowの開発者Zev Blutさんによる事例報告。

2週間のリリースサイクル。短い。

失敗談:ActiveRecord count/size/lengthの違い

失敗談:OpenIDの認証が遅くなった

失敗談:ファイルシステムext3の限界でキャッシュができない

継続インテグレーションツールKwalaのおまけつき。

食べログの京和さんの事例。

Windows/ASPからRailsへの移行だったのだそうデス。

メモリ喰い対策。

データベースの負荷分散。MMCはダメ。ActsAsReadonlyableで。

クエリーはテーブルを件数、ID、属性の3段階に分けてチューニング。

routeは書いていないがそれほど特別な事はしていない。大規模でも大丈夫。

jpmobileのしだらさん。

携帯向けアプリを作る上での数々の機能を、携帯キャリア・機種によらずAPIで提供。すばらしい。絵文字変換機能まで。

Published on 06/22/2008 at 06:40 under . タグ , ,

Powered by Typo – Thème Frédéric de Villamil | Photo Glenn