約束の地

キャロ組

rbenv の global と local の違い

rbenv

rbenvRubyのバージョンを行き来するのにとても便利ですが、globallocalや、はたまたrbenvが使わないユーザの場合でどのように挙動が違うのかを記します。

前提条件

$ rbenv versionsを実行した際に、以下のようにsystem2.3.12.4.02.4.1がインストールされているとします。

$ rbenv versions
* system (set by /home/taro/.rbenv/version)
  2.3.1
  2.4.0
  2.4.1

global と local の違い

結論

  • globalで指定されたバージョンは、そのユーザが$ rubyを実行する際のバージョン
  • localで指定されたバージョンは、そのユーザが特定のディレクトリ配下で$ rubyを実行する際のバージョン

つまり、localglobalを上書きします。

具体例

rbenvが設定されているユーザであるtaroでログインしているとします。

global とは

ユーザがtaroですので、どこのディレクトリでも*1$ ruby -vをすると$ rbenv versionsで指定されたバージョンが表示されます。

この際のバージョンの指定を行うのがglobalです。

local とは

特定のディレクトリ配下で特定のバージョンのRubyを使いたい場合は、そのディレクトリをカレントディレクトリとして、$ rbenv localでバージョンを指定します*2

このlocalのバージョンはglobalを上書きします。加えて、localでバージョンを指定したディレクトリ配下にサブディレクトリを作り、その中で$ rbenv localすると、そのサブディレクトリ配下のバージョンはさらに上書きされます。

つまり

globalというのは「それを実行したユーザが$ rubyを実行するときのバージョン」であって、マシンにログインした人全てがそのバージョンになるわけではありません*3

systemというバージョンは

$ rbenv versionsを実行した際に現れるsystemというバージョンはいったい何のバージョンなのでしょうか。

これは、/usr/bin/rubyのバージョンです。つまり、rbenvsystemというバージョンを指定した場合は/usr/bin/rubyが使われるということです。

そしてこの/usr/bin/rubyは、rbenvの環境が導入されていない人が使うバージョンでもあるということになります。

*1:ホームディレクトリ配下でなくても

*2:バージョン番号を記した .ruby-version というファイルが作られます

*3:最初これで混乱していました

Powered by はてなブログ