rails to Niigata
WindowsでCucumberのフィーチャやRSpecのスペックを日本語で表示する
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)は内部でリダイレクトを行っているため、うまく行きませんでした。
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もリリースされていません。大丈夫なのでしょうか?
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 —時を超えた創造の原則」の著者の江渡さんのサイン会があり、しっかりサインをもらってきましたが、これから読むので感想はまた後日。
Four Days on Rails 2.3をアップしました
2008年5月に公開した Four Days on Rails 2.0をRuby on Rails 2.3にあわせて見直したものをアップしました。
http://rails.to/pages/4-days-on-rails-2.3
Oracleかあ!
米オラクルがサンを買収へ 7300億円で
http://www.asahi.com/business/update/0420/TKY200904200329.html
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です。
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的には」大変な事だったようです。
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化も考えているとのこと。
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で提供。すばらしい。絵文字変換機能まで。
RubyKaigi 2008 The Day Two - PM 1
山本陽平さんによるRESTの話。
山本さん的にもっとも重要視するのが、アドレス可能性と接続性だそうデス。
リソース設計重要。ステートレスにこだわりすぎる必要はない。だそうで。
CTCの高井さんと大場さんがスーツで登場。
CTCのRuby関係売上は4.3億程度だそうです。
エンタープライズとは何か?業務!
SI会社にRubyを遣わせるためには、「開発者が楽しい」「生産性が高い」ではだめで、「新規顧客・案件の獲得」が武器に。
教育体制、SLCP2007開発標準(ISO/IEC 12207)、保守・運用フェーズサポート。
見積りはFC法で実績収集。Javaより3割から5割効率的。
Java開発者には3日のトレーニング。コードレビューがうまく行く秘訣。
検証センターで実証済み。
役員をパトロンに。
Powered by Typo – Thème Frédéric de Villamil | Photo Glenn