今更だけどrvmからrbenvに乗り換えるときの個人用メモ

ruby-2.0.0-devを使いたいのにrvmが対応してない。
というだけの理由で、rbenvに乗り換えることにしました。
rvmも便利だったのですが、cdコマンドを書き換えたりと
結構ブラックなこともやっていたので、いい機会かなと。
なんだか長くなっちゃったので省略されました。

rvmとrbenvの違い

  • rvmはビルドからgemsetまで面倒を見てくれる
  • でも結構多方面に影響するので怖い部分もある
  • rbenv「ビルドツールなんてありません」
  • rbenv「でも ruby-build っていうのがあるからそれ使ってもいいよ」
  • rbenv「gemはbundleで各自管理してください」

rbenvさんは結構放任主義みたいです。
※とっても語弊があるので詳細についてはGoogle先生にお尋ねください。

まずはrvmをアンインストール

する前に注意事項。
端末はひとつだけ開いた状態で作業すること。
そして言うまでもなくgemはすべて消し飛びます。
※私はこの大前提を忘れて混乱しました。
シェル:

$ rvm seppuku

切腹って。
いざ消そうとするときに限ってそういう……。
まぁいいや、とにかくこれで ~/.rvm が存在していないことを確認し、
それから .zshrc なりに書き加えた各種rvm用の関数などを手作業で削除。
これでおしまいです。
アンインストールが終わったら端末を再起動すること。
※私はこの大前提を(ry

rbenvのインストール

続いてこちらがrbenvになります。
が、Ubuntu12.10にはパッケージがあったのでそちらを使用。
シェル:

$ sudo apt-get install rbenv

今のところこれで問題なしです。

それから(私はzshを使っているので) ~/.zshenv に下記を追加。
~/.zshenv:

eval "$(rbenv init - zsh)"

bashを使っている方は zsh の部分を削り取れば行けるはずです。多分。

ruby-buildのインストール

ビルドツールとして ruby-build を使おうと思います。

こちらもUbuntuのパッケージにあったのですが、
rbenvのプラグインとして使ったほうが何かと都合が良さそうでした。*1

というわけでシェル:

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

これでいつでもパッケージリストを更新できるのでお手軽です。
さらに、環境変数で MAKEOPTS もしくは MAKE_OPTS を設定しておくと、
値を make コマンドの引数に渡してくれます。

例えば ~/.zshenv なんかに:

export MAKEOPTS="-j5"

とか書いておくと、CPUコアがたくさんある人は幸せになれます。

Ruby1.9.3-p327とRuby-2.0.0-devのインストール

前置きが長くなりましたがいよいよインストール。
シェル:

$ rbenv install -l                   # インストールできる処理系・バージョン一覧(ruby-buildに依存)
$ rbenv install 1.9.3-p327 --verbose # rvm と同じ感覚でインストールできる
$ rbenv install 2.0.0-dev  --verbose
$ rbenv global 1.9.3-p327            # 全体で使うruby処理系を指定
$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

"ruby -v" の出力が違うよーっていう人は端末を再起動したらいいと思います。

gemの設定

rvmと違ってrbenvの場合、新しいgemをインストールするたびに

$ rbenv rehash

しなければならないという、自由への代償的なものがあります。
さすがに面倒くさいので何とかしたい。

というわけでこんな便利ツールが。
gemをインストール/アンインストールするたびに rbenv rehash を実行してくれる
痒いところに手が届く感じのgemです。
ついでに bundle もインストールしましょう。

シェル:

$ gem i rbenv-rehash
$ gem i bundle
$ bundle

これで bundle が実行できれば大丈夫です。多分。

その他

$ rbenv shell VERSION

とかやった時は手動で

$ rbenv rehash

しなきゃいけない……っぽい?

*1:パッケージリストがruby-buildで管理されているので。