Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Ruby | rbenv | 仕組み

概要

rbenvの仕組みについて

shims

unixのコマンドは$PATHを左から順に探します。
rbenvインストール前のパスは下記のようになっています。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

この場合、例えばrubyコマンドは
/usr/local/sbin
/usr/local/bin

/bin
のような順で探されます。

rbenvはPATHの先頭にshimsを追加することで動作します。

%rbenv_home%/shims

を追加します。

その結果は下記のようになります。

%rbenv_home%/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

これによりuser/local/bin等より前に%rbenv_home%/shimsでrubyの各コマンドを
発見することになります。

gemで新しいコマンドが増えた場合は、shimsの内容を最新化するために
rbenv rehashを実行する必要がある。

Ruby versionの決定順序

下記の順序で決定される

1.RBENV_VERSION環境変数の内容。

この内容はrbenv shellコマンドで設定出来ます。

$ echo $RBENV_VERSION

# rbenvのglobalの設定を2.0.0p247にしてあります
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

# RBENV_VERSIONのバージョンをsystemに設定
$ rbenv shell system
$ echo $RBENV_VERSION
system
$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
$ rbenv versions
* system (set by RBENV_VERSION environment variable)
  2.0.0-p247

# RBENV_VERSIONのバージョンをクリア
$ rbenv shell --unset
$ echo $RBENV_VERSION

$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
2.実行中のscrpitファイルから探した「.ruby-version」ファイルの内容。

詳細は3とまとめて説明。

3.現在の作業ディレクトリから探した「.ruby_version」ファイルの内容。

このファイルの内容はrbenv localで設定出来ます。

例)
rbenv globalの設定内容が2.0.0p247の状態とします。

$ echo $RBENV_VERSION

# rbenvのglobalの設定を2.0.0p247にしてあります
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

# rbenv localを実行して.ruby-versionの内容をsystemに変更します
$ rbenv local system
$ cat .ruby-version
system
$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
4.「%rbenv_home%/version」の内容。

このファイルの内容はrbenv globalで設定出来ます。

Rubyのインストールパス

各バージョンごとのRubyは下記の用にインストールされます。

%rbenv_home%/versions/1.8.7-p371/
%rbenv_home%/versions/1.9.3-p327/
%rbenv_home%/versions/2.0.0-p427/