Ruby1.9
2009年03月07日
短いですが報告だけ。
今日、私が管理しているTwitter botをすべてRuby1.9上で動作するように動作確認・プログラム修正を行った。
変更点は予想以上に少なかった。問題になった点は以下の通りであった。
(1) String#lengthの挙動の違い(Ruby1.8だとバイト数、Ruby1.9だと文字数が返る。)
(2)yaml.rbでYAMLファイルを読み込んだ際に、文字列のエンコーディングが常に「US-ASCII」になること(@sunohara_yoheiのプログラムにおいて、YAMLファイルに格納されていた文字列を、エンコーディングがUTF-8の正規表現リテラルにマッチさせたため、例外が発生していた。)
(3) parsedate.rbの廃止(time.rbで代替して対応した。)
【追記】(2009.3.9)
(2)を削除した(問題は別のことが原因だった模様)。外部ファイルから読み込んだ文字列は「Encoding.default_external 」のエンコーディングになるとのことだった。(参照:IO のエンコーディングとエンコーディングの変換)
今日、私が管理しているTwitter botをすべてRuby1.9上で動作するように動作確認・プログラム修正を行った。
変更点は予想以上に少なかった。問題になった点は以下の通りであった。
(1) String#lengthの挙動の違い(Ruby1.8だとバイト数、Ruby1.9だと文字数が返る。)
(2)
(3) parsedate.rbの廃止(time.rbで代替して対応した。)
【追記】(2009.3.9)
(2)を削除した(問題は別のことが原因だった模様)。外部ファイルから読み込んだ文字列は「Encoding.default_external 」のエンコーディングになるとのことだった。(参照:IO のエンコーディングとエンコーディングの変換)
2008年06月16日
先程Twitterの@Misho氏がこのようなことを話していた。
- Misho:Ruby1.9を導入することになったんだけど,1.8と共存させてやることはできないものか…… [http://twitter.com/Misho/statuses/835827504]
- Misho:とおもったけどmakeはめんどいな……。おとなしく上書きなどしてしまおう。さようなら1.8。 [http://twitter.com/Misho/statuses/835832235]
- _tad_:@Misho --program-suffixでいいんじゃないでしょか
http://twitter.com/_tad_/statuses/835833554] - iratqq:@Misho ./configure --prefix=foo&&make&&make installするだけだと思いますよん。これでもめんどいですかね。 [http://twitter.com/iratqq/statuses/835833885]
- Misho:@iratqq う,うぃんどうずなんです…… [http://twitter.com/Misho/statuses/835834553]
- Misho:@_tad_ うぃ… [http://twitter.com/Misho/statuses/835834643]
- iratqq:@Misho mingwとかとか。 [http://twitter.com/iratqq/statuses/835834831]
- h_hiro:@Misho @iratqq (1)Ruby1.8はC:\rubyに入れる (2)Ruby1.9はC:\ruby1.9に入れる (3)パスの設定は従来通り (4)C:\ruby\binにruby1.9.batを作る [http://twitter.com/h_hiro/statuses/835836452]
- iratqq:@h_hiro windows版はprefixいじらなくていいのですかね。ライブラリも自動で探してくれるなら、すごい。それとも環境変数RUBYLIBも必要? [http://twitter.com/iratqq/statuses/835837825]
- h_hiro:@iratqq すみません、当方でも試してはいないのです。環境変数の設定は必要かもしれませんね。 [http://twitter.com/h_hiro/statuses/835839038]
少し試してみた結果、「ruby」コマンドでRuby1.8を、「ruby1.9」コマンドでRuby1.9を使えるようになったので方法をまとめておく。
※Windows XP Home (SP2)にて試しました。
[準備]
すでにRuby1.8を「C:\ruby」にインストールしており、Ruby1.9はまだインストールしていないと仮定する。また、環境変数PATHに「C:\ruby\bin」が含まれており、コマンドライン上で「ruby」と入力するとRuby1.8が立ち上がる状態になっているとする(この準備を一番楽に行うには、One-Click Ruby Installerが便利であろう)。[インストール]
- Ruby1.9のWindows版をダウンロードし展開する。ここでは「C:\ruby1.9」に展開したと仮定する。
- 「C:\ruby\bin\ruby1.9.bat」を以下の内容で作成する。
@echo off set __CALLER_PATH__=%CD% cd C:\ruby1.9\bin ruby %* cd %__CALLER_PATH__%
- コマンドラインから「ruby1.9」と入力するとRuby1.9が立ち上がる。
実験。Ruby1.9で新設されたメソッド(Enumerable#max_by)と、Ruby1.9で導入されたライブラリ(ripper)を使ってみる。
C:\Documents and Settings\hiro>ruby
p [1, 3, 6].max_by{ |x| -x }
^Z
-:1: undefined method `max_by' for [1, 3, 6]:Array
(NoMethodError)
C:\Documents and Settings\hiro>ruby1.9
p [1, 3, 6].max_by{ |x| -x }
^Z
1
C:\Documents and Settings\hiro>ruby
require "ripper"
^Z
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_req
uire.rb:27:in `gem_original_require': no such file
to load -- ripper (LoadError)
from c:/ruby/lib/ruby/site_ruby/1.8/rubyge
ms/custom_require.rb:27:in `require'
from -:1
C:\Documents and Settings\hiro>ruby1.9
require "ripper"
^Z
ちゃんとRuby1.8とRuby1.9が使い分けられている。
他のコマンドも同様にバッチファイルを作れば、Ruby1.8と1.9を使い分けることが出来る。
(補足)
上記のTwitterログにおけるiratqq氏の発言「それとも環境変数RUBYLIBも必要?」については、特に設定しないで動きました。
※2009.8.4 若干修正(リンク先修正など)