どのように動作するか

rbenvは高階層の処理で、PATHに注入された楔(shim)となる実行ファイルを使用して、Rubyコマンドを奪い取り、 アプリケーション固有のRubyのバージョンを決定し、適切なRuby一式に沿ったコマンドを渡します。

PATHの理解

rubyまたはrakeのようなコマンドを実行する際に、 OSはその名前の実行可能ファイルを見つけるためにディレクトリの一覧を通して検索を行います。 このディレクトリの一覧は、PATHと呼ばれる環境変数に定義され、 一覧の各ディレクトリはコロン(:)で区切られています。

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

PATHのディレクトリは左から右へ検索され、 一覧の中で最初にマッチした実行可能なファイルが、他のものより優先されます。 この例であれば、/usr/local/binが最初に検索され、次に/usr/bin、その次に/binと続きます。

楔(Shim)の理解

rbenvはPATHの最初に、楔となるディレクトリを挿入することによって動作します。

~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin

再ハッシュ(rehashing - 作りなおす)と呼ばれるプロセスを通して、 rbenvはディレクトリ内のRuby-irbgemrakerailsruby等の、 各インストール済みのバージョンを跨いで、Rubyコマンドにマッチする楔を維持します。

楔はrbenvに沿ってコマンドを渡すだけの軽量な実行ファイルです。 rbenvがインストールされているとrakeの実行の際に、OSは次のように動作します。

  • rakeという実行可能ファイルを探すために、PATHが検索されます。
  • PATHで最初に見つかるrakeという名前のrbenvの楔を見つけます。
  • rakeという名前の楔を実行します。 これは、rbenvによって渡されるコマンドです。

Rubyバージョンの選択

楔を実行する際に、rbenvは使用するRubyのバージョンを、下記の情報源をこの順番で読み取ることで決定します。

  1. 指定されていれば、RBENV_VERSION環境変数が使用されます。 rbenv shellコマンドを使用して、現在のシェルのセッションに、 この環境変数を設定することが可能です。
  2. 実行したスクリプトと、そのファイルからファイルシステムのルートに至るまでの各親ディレクトリが検索されることによって、 最初に発見される.ruby-versionファイルが使用されます。
  3. 現在のワーキングディレクトリと、そこからファイルシステムのルートに至るまでの各親ディレクトリが検索されることによって、 最初に発見される.ruby-versionファイルが使用されます。 rbenv localコマンドを使用することで、 現在のワーキングディレクリ内の.ruby-versionを編集することが可能です。
  4. グローバルの~/.rbenv/versionファイルが使用されます。 rbenv globalコマンドを使用して、 このファイルを編集することが可能です。 もしグローバルのバージョンファイルが存在しなければ、 rbenvはあなたが"system"のRubyを、 すなわちPATHにrbenvが無い場合に実行されるバージョンを使用することを望んでいるとみなします。

Rubyのインストール先の特定

rbenvはアプリケーションに指定されているRubyのバージョンを特定すると、 それに対応するRubyインストールに沿ってコマンドを渡します。

各バージョンのRubyは、~/.rbenv/versions下の自身のディレクトリ内にインストールされます。 例えば、下記のように各バージョンのRubyをインストールすることが可能です。

  • ~/.rbenv/versions/1.8.7-p371/
  • ~/.rbenv/versions/1.9.3-p327/
  • ~/.rbenv/versions/jruby-1.7.1/

rbenv用のバージョン名は、単純に~/.rbenv/versions内のディレクトリの名前になります。

 Back to top

© 2010 - 2017 STUDIO KINGDOM