rbenv
rbenv
はRuby
のバージョンを行き来するのにとても便利ですが、global
やlocal
や、はたまたrbenv
が使わないユーザの場合でどのように挙動が違うのかを記します。
前提条件
$ rbenv versions
を実行した際に、以下のようにsystem
と2.3.1
と2.4.0
と2.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
を実行する際のバージョン
つまり、local
はglobal
を上書きします。
具体例
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
のバージョンです。つまり、rbenv
でsystem
というバージョンを指定した場合は、/usr/bin/ruby
に存在する Ruby
が使われるということです。
そしてこの/usr/bin/ruby
は、rbenv
の環境が導入されていないあらゆる人が使うバージョンであるということになります*4。
発展
gem のインストールの際に、Gemfile
を用いずに $ gem install HOGEHOGE
でインストールした場合には、rbenv で指定されている Ruby のバージョンに紐付いて gem がインストールされます。
つまり、rbenv
で 2.4.0
が指定されている場合に $ gem install whenever
を実行すると、rbenv
が 2.4.0
を指している環境下でのみ $ whenever
が実行できます(見つかります)。
上記の場合に rbenv
で 2.4.0
以外のバージョンが指定されているときには、$ whenever
を実行してもコマンドが見つからずに実行が失敗します。