はじめに

タイトル通りです。Rubyをrbenvで最新版にバージョンアップする方法を調べたのでまとめます。

Ruby2.0は、1.9系に比べてrequireする速度が2.5倍!ときいたので、是非移行したくなりました!(・∀・)

rbenvのインストール

rbenvとは

rbenvとは、Rubyの版数を管理するためのツール。これを使ってRubyのバージョンアップをします。Rubyの版数管理だと、rvmもあるけれども、rbenvは後発のツールで、Rubyのみに特化した、シンプルなツールらしい。

sstephenson/rbenv ・ GitHub

rbenvのインストール

rbenvはgithubで公開されているツールなので、gitを使って取得します。

# ホームディレクトリに移動
cd 
# githubから rbenv取得。~/.rvenvに置きます。
git clone git://github.com/sstephenson/rbenv.git .rbenv

rbenvの設定

rbenvにパスを通すために、ログインシェルにパスを追記します。自分の場合は、.zshrcに以下を追記した。

# .rvenvディレクトリがあるときだけ設定を追加
if [ -d ${HOME}/.rbenv  ] ; then
    PATH=${HOME}/.rbenv/bin:${PATH}
    export PATH
    eval "$(rbenv init -)"
fi

source .zshrcで読み込み。

ちなみに、この設定をいれたら、.zshrcの読み込みが遅くなった気がするので、普段はこの記述はコメントアウトしておくことにしました。

rbenv-buildとrvenv-gemsetのインストール

rbenvだけだと、Rubyをビルドすることができないため、rbenv-buildもインストールします。

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
# rbenv-build
git clone git://github.com/sstephenson/ruby-build.git

rbenvで最新版Ruby2.0をインストールしてみる

まずは、利用できるバージョンを確認する。

% ~/.rbenv/plugins/ruby-build/bin/ruby-build --definitions
2.0.0-dev
2.0.0-p0
2.0.0-p195

最新安定版である Ruby 2.0.0-p195を入れます。Cygwinでコンパイルをすると、想像を絶するほどの時間がかかった。-vをつけると、コンパイルの様子が出力される。

% rbenv install 2.0.0-p195 -v

と、ここでエラーした。。。。(´・ω・`)

compiling process.c
In file included from ./include/ruby/ruby.h:1567:0,
                 from process.c:14:
./include/ruby/intern.h:293:72: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:293:72: warning: its scope is only this definition or declaration, which is probably not what you want
In file included from ./include/ruby/ruby.h:1567:0,
                 from process.c:14:
./include/ruby/intern.h:412:1: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:413:79: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:414:32: warning: 'struct timeval' declared inside parameter list
process.c: In function 'rb_f_sleep':
process.c:4105:2: error: type of formal parameter 1 is incomplete
Makefile:325: recipe for target `process.o' failed
make: *** [process.o] Error 1

回避方法を参考して、ソースをダウンロードしたところで一旦 Ctrl+Zで止めて、/tmp配下にあるrubyソースの中の、include/ruby/intern.hに,「#include <sys/time.h>」を追記する。Windows 7,8での不具合っぽい。

Rubyのスナップショットをビルド―2.1.0dev & 2.0.0対応― - わさっき

気を取り直して、再度コンパイルをかけると、opensslのなにかでハング!

止まった。。。(´・ω・`)。。。困った。。。(´・ω・`)

make[1]: ディレクトリ `/tmp/ruby-build.20130602153618.8580/ruby-2.0.0-p195' から出ます
configuring io/nonblock
configuring io/wait
configuring json
configuring json/generator
configuring json/parser
configuring mathn/complex
configuring mathn/rational
configuring nkf
configuring objspace
configuring openssl

これも、ググったら回避方法が載っていた。./cofigureにオプションを設定すればよいようだ。

CONFIGURE_OPTS=-"-with-opt-dir=/usr/local" rbenv install 2.0.0-p195 -v

これでOK.こんなに苦戦するとは。。。最後に、おまじないを叩いて終了。

% rbenv rehash

2.0.0に切り替える。

# インストールされているRubyのバージョンを確認
% rbenv versions
* system
  2.0.0-p195 (set by /home/TSUNEMICHI/.rbenv/version)
# 2.0をいつものバージョンにする
% rbenv global 2.0.0-p195

おわりに

rbenvは、いろんなRuby版数を簡単に切り替える機能もあります。なので、試しにRubyを最新版にあげてみて、動かなかったら古い版数に戻したり、特定のディレクトリ配下だけを古い版数で動かしたり、なんていう設定も可能です。

体感的には、2.0にしても速度が向上したようには感じされなかった。(むしろ・・・おそorz)CygwinでRubyが異常に遅いことは有名らしい。Linuxではそんなことはないらしい。(3倍速?)Cygwin上にRubyを動作させることがはかないあやまちのような気がした。

環境

  • Cygwin 1.7
  • Ruby 1.9.3 -> 2.01

参考記事