はじめに
タイトル通りです。Rubyをrbenvで最新版にバージョンアップする方法を調べたのでまとめます。
Ruby2.0は、1.9系に比べてrequireする速度が2.5倍!ときいたので、是非移行したくなりました!(・∀・)
rbenvのインストール
rbenvとは
rbenvとは、Rubyの版数を管理するためのツール。これを使ってRubyのバージョンアップをします。Rubyの版数管理だと、rvmもあるけれども、rbenvは後発のツールで、Rubyのみに特化した、シンプルなツールらしい。
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