1. Qiita
  2. 投稿
  3. Ruby

rbenvでRubyのバージョンを指定する方法

  • 215
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

rvmからrbenvに切り替えてみたのでrbenvがどういう方法でRubyバージョンを指定したり、状況によって切り替えることができるのか確認してみた。基本 https://github.com/sstephenson/rbenv/ の要約および動作確認、バージョンは0.4.0。

shims

~/.rbenv/shimsにあるスクリプトが使うコマンド(irb, gem, rake, rails, rubyなど)を振り分けてくれる。shimsが振り分けた先を知るにはrbenv whichを使う。

$ rbenv which ruby
~/.rbenv/versions/1.9.3-p392/bin/ruby

bundleなどgemでインストールして新しいコマンドが増える場合は~/.rbenv/shimsに振り分けるスクリプトを置かないといけないのでrbenv rehashを唱える必要がある。

RBENV_VERSION

ドキュメントによると RBENV_VERSION 環境変数が使うバージョンを決める。従ってコマンドラインからだと以下で切り替えられる。

$ export RBENV_VERSION=1.9.3-p392
$ ruby -v
ruby 1.9.3p392 ...

global/local/shell

実際のところRBENV_VERSIONは直接意識しなくてもいいようになっている。

使うデフォルトのバージョンを固定したい場合は global を使う。すると ~/.rbenv/version に使うバージョンが書き込まれる。

$ rbenv global 1.9.3-p392

プロジェクトで特定のバージョンを使いたいときは、 local を使う。すると、カレントディレクトリの .ruby-version に使うバージョンが書き込まれる。

$ rbenv local 1.8.7-p371

コマンドラインから一時的に切り替えたい場合は shell を使う。すると、環境変数 RBENV_VERSION に設定される。

$ rbenv shell 2.0.0-p0

localおよびshellに指定したバージョンは--unsetオプションにより取り消せる(globalは取り消せなかった、後述のsystemに戻すことで代用できる)。なおlocalの場合は .ruby-version ファイルが削除される。

$ rbenv local --unset
$ rbenv shell --unset

念のため実験したところ優先順位はちゃんとshell > local > globalの順で適応された。つまりは 環境変数 RBENV_VERSION > カレントディレクトリの .ruby-version > ~/.rbenv/version の順に優先されることになる。

system

ディストリビューションなどで例えば/usr/bin/rubyにRubyがインストールされていることがある。こういったRubyは system というキーワードで指定することができる。

$ rbenv shell system
$ rbenv local system
$ rbenv global system

rbenv global --unsetの代わりとしてrbenv global systemが利用できる。

古い.rbenv-version

互換性のために.rbenv-versionから.ruby-versionを使うようになっている。

  • .rbenv-versionと.ruby-versionの両方が存在する場合
    • .ruby-versionが優先される
    • rbenv local使った場合は.ruby-versionのみ更新される
    • rbenv local --unset使った場合は.ruby-versionも.rbenv-versoinも削除される
  • .rbenv-versionだけがある場合
    • rbenv localを実行すると.rbenv-versionが削除され.ruby-versionが作成される。
    • rbenv local --unset使った場合は.rbenv-versoinが削除される。