"ubygems"って? CygwinのRubyが動かない
少し前に、Railsで遊ぼうと思ったときに色々とインストールしたりしたのですが、忙しくなってしまい途中で放置していました。
久しぶりに使い捨てスクリプトをRubyで書いたので動かしてみたら、何か変なエラーがでました。
$ wruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] $ ruby -v ruby 1.8.4 (2005-12-24) [i386-cygwin] $ ruby test.rb ruby: no such file to load -- ubygems (LoadError)
Rubygemsのインストールに失敗したのかもと思ったのですが、よく見ると"ubygems"となっています。この時点では、設定関連の不整合があるのかもしれない*1と考えていましたが、私はRubyの実行時オプションをほとんど知らなかったので、具体的な原因はすぐには見当がつきませんでした。
調べてみた結果、直接の原因はWindowsの環境変数に"RUBYOPT=-rubygems"が設定されていたことでした。まとめると、
- Win版Rubyインストーラ(One-Click Ruby Installer?)を入れたあとでCygwin版Rubyを使うと再現
- Win版インストーラは、インストールの際に環境変数に"RUBYOPT=-rubygems"を設定するらしい
- Rubyの実行時オプションには"-rLIBRARY"があり、"ruby -rrubygems"はコードの"require 'rubygems'"と同じ効果がある
- Win版Rubyには恐らく"-rrubygems"と等価(?)の"-rubygems"オプションがあるが、Cygwin版には無いかバージョンが古い
- CygwinではWindowsの環境変数をインポートするので"RUBYOPT"が参照されてしまう
ということのようです。CygwinのRubyを使う時には、"RUBYOPT"から"-rubygems"を消してしまえば大丈夫です。
$ echo $RUBYOPT -rubygems $ export RUBYOPT= $ echo $RUBYOPT $ ruby test.rb good day. $
CygwinにもRubygemsが入っていれば問題ないのかも知れませんが、確認していません。そもそも、CygwinからでもWin版を実行できるので、Win版で事足りるなら上記の対応は不要です。