LoginSignup
270
269

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-03-11

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が削除される。
270
269
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
270
269