Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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が削除される。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away