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なんだけど?
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に書く。