トップ «前の日記(2012-01-10) 最新 次の日記(2012-02-15)» 編集

Route 477



2012-02-03

[ruby] rvmからrbenvに乗り換えた

RubyのインストールはWindowsならASRやRubyInstaller、Macならport/brew install、Linuxならaptitude install等が定番であるが、 Ruby1.9.2と1.9.3を両方インストールしておきたいなどの特殊な用途向けに、rvmやrbenvというツールがある。

機能の違い

rvmはいろいろ機能が多い。gemsetといって、使うRubyGemsのセットを動的に変更できるとか。このためにrvmを使う人もいたが、現在はBundlerがあるから有難みが薄い。

rbenvはシンプル志向。rbenv本体にはRubyのビルド機能すらなくて、別途ruby-buildというツールを利用している。

端的な例を挙げると、rvmはプロジェクトごとのRubyバージョンを管理するのに.rvmrcというファイルを使うのだけど、これは任意のシェルコマンドが書けて、そのためいちいち 「この.rvmrcを信頼しますか?[y/n]」みたいなのをやらないといけない。

rbenvの場合は.rbenv-versionにバージョン番号を書くだけなので、「信頼」とかする必要がない。rvmの方が強力ではあるんだけど、ほとんどの人はバージョン番号だけ切り替えられればそれで十分だろう。

乗り換えた主な理由

気分転換。

いまrvmで何か困ってるのでなければ移行する必要はない(機能的に上位互換だし)。 新しく入れるとしたら、まあ、どっちでもいい。今はrvmの方が情報が多いけど、これからrbenvの情報も増えていくと思う。

rbenvで気をつけないといけないこと

rbenv rehash

railsとか、コマンドが付いてくるタイプのgemをインストールしたとき、rbenv rehashを実行する必要があります。これは~/.rbenv/shims/以下のファイルを更新します。

「gem i rbenv-rehash」しておくと、これを自動でやってくれるようです(各Rubyごとに入れておく必要があります)。

bundleしたのにrailsコマンドがnot foundなんだけど?

FAQ

Bundlerはexecutableを作らないので、bundle exec railsするか、またはgem installで改めて入れ直さないといけないらしい。

というわけで

$ gem i railties   # railsコマンドはrails gemに入ってるのではないという罠
$ rbenv rehash   # rbenv-rehahsを入れていない場合のみ
$ rehash            # /usr/binとかに他のrailsコマンドが存在する場合のみ
$ rails -v

でOK。

移行手順

まずrvmをアンインストールする。~/.rvmを全削除する(あるいはリネーム)。.zshrc、.bashrc等を開いてrvm関係の行を削除またはコメントアウトする。

screenを閉じる(ここ重要)!環境変数GEM_HOMEが残ったまま作業を進めると、rbenvのRubyでgem installしたのになぜか~/.rvm/以下にgemが入るというカオス状態になる。

念のため echo $GEM_HOME とかして何も表示されないのを確認すると良い。

あとの手順は

$ brew install rbenv
$ brew install ruby-build
$ echo 'eval "$(rbenv init -)"' >> .zshenv
$ brew install readline  #irbで日本語使うのに必要
$ brew link readline
$ CONFIGURE_OPTS="--with-readline-dir=/usr/local" rbenv install 1.9.2-p290

「rbenv init」は、.zshrcではなく.zshenvに書く。