2021-07-10

ちゃんと理解するrbenv : (2) 基本的な使い方

はじめに

本記事は、「ちゃんと理解するrbenv」の第2回です。
前回の記事

今回はrbenvの基本的な使い方について整理します。
前回の記事でrbenvのイメージがぼんやりと構築されたかと思うので、今回は実際に使ってみる中でそのイメージを具体化していくことを目指します。

想定環境

筆者のマシンの都合上、以下の環境を前提とします。

  • macOS
  • zsh

rbenvのインストールと初期設定

macOSの場合は Homebrew というパッケージマネージャを使うのが楽です。
Homebrewがまだ手元に無い場合は次のワンコマンドでインストールできます。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrewのインストールが完了したら、続けて次のコマンドでrbenvをインストールします。

brew install rbenv

たったのこれだけでrbenvのインストールは完了です。とても簡単ですね。

それでは次にシェルの初期設定を行うため、次のコマンドを実行します。

rbenv init

zshを使っている場合は、次のような出力結果が得られたと思います。

# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"

この出力結果が、初期設定としてやることを示しています。
つまり eval "$(rbenv init -)" という行を ~/.zshrc に追記する、ということです。これにより、ターミナルを起動したときにrbenvが自動で読み込まれるようになります。
vimなどお好みのエディタで ~/.zshrc を開いて(あるいは新規作成して)書き込みます。

$ vim ~/.zshrc

// 以下の1行を追記する
eval "$(rbenv init -)"

以上で初期セットアップは完了です。

※ ここに書いた手順は全て rbenvのREADME に書かれています

rbenvでRubyをインストールする

それでは早速rbenvを使っていきます。

何はともあれRubyのインストールをしたいですね。ですが、そもそもどのバージョンのRubyをインストールできるかを確認しないとはじめられません。そのためには rbenv install --list コマンドを実行します。

$ rbenv install --list
2.6.7
2.7.3
3.0.1
jruby-9.2.18.0
mruby-3.0.0
rbx-5.0
truffleruby-21.1.0
truffleruby+graalvm-21.1.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.

記事作成時点の環境だと上のような結果になりました。2.6.7、2.7.3、3.0.1、他にもJRubyやmrubyといった別のRuby実装がインストール可能であることを示しています。

注意点として、--list オプションでは各Ruby実装の最新安定版しか表示されません。より網羅的にインストールできるバージョンを確認したい場合は rbenv install --list-all コマンドを実行します。

$ rbenv install --list-all
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
1.8.6
1.8.6-p36
1.8.6-p110
1.8.6-p111
1.8.6-p114
...
...
... 省略

長すぎるので省略しましたが、多くの出力結果が得られたと思います。これが、rbenvでインストールできるRuby(またはRuby実装)の全リストです。

それでは今度こそRubyのインストールです。ここでは記事作成時点の最新安定版である 3.0.1 をインストールします。
そのためには rbenv install コマンドに続けて先ほど rbenv install --list(-all) で確認したときに1行として表示されていた値を渡してあげればOKです。すなわち...

rbenv install 3.0.1

と、なります。
これ以上無いくらいにシンプルなコマンドなのでかんたんに覚えられます。これだけでRuby 3.0.1のインストールが完了します。

また、前の記事でも触れましたがrbenvは複数のバージョンのRubyをインストールできるため、続けて rbenv install 2.7.3 のようなコマンドを実行したとすると 2.7.3 と 3.0.1 の2つがインストールされた状態になります。

インストールしたRubyのバージョンを確認をする

インストールしたRubyのバージョンを一覧で確認するには rbenv versions というコマンドを実行します。

$ rbenv versions
* system (set by /Users/mogulla3/.rbenv/version)
  3.0.1

自分の環境では上のような結果になりました。systemというrbenvの管理外でインストールされたRubyと3.0.1が存在していることがこの結果からわかります。

もし、3.0.1の他にも別のバージョンのRubyをインストールしていた場合は次のような結果になります。

$ rbenv versions
* system (set by /Users/mogulla3/.rbenv/version)
  2.6.7
  2.7.3
  3.0.1

現在有効なRubyのバージョンを確認をする

rbenvを使うと複数バージョンのRubyが存在する状態になり、かつそのバージョンを切り替えることが可能になるため、現在どのバージョンのRubyが有効なのかを知りたくなるときがあります。

これにはいくつか方法があるのですが rbenv version コマンドを使うことで確認できます。

$ rbenv version
system (set by /Users/mogulla3/.rbenv/version)

上の結果は、system というrbenv管理外のRubyが現在有効な状態であることを示しています。

また rbenv versions (複数形であることに注意) を実行したときに、アスタリスク * が左端に表示されているバージョンも同じく現在有効なバージョンのRubyを示しています。

Rubyのバージョンの切り替えをする

rbenvのREADMEには次のような一文があります。

rbenv is concerned solely with switching Ruby versions.

Rubyのバージョンの切り替えこそがrbenvの核、もはや全てと言っても過言ではなさそうです。それくらい重要な機能なので、ここはちゃんと理解する価値がありそうですね。

グローバルなRubyバージョンの設定

グローバルなRubyバージョンとは、言い換えると何も指定しなかったときにデフォルトで選択されるバージョンのことです。
自分が主に使いたいバージョンをグローバルに指定しておくのが良いかなと思います。筆者の場合はその時点の最新安定版Rubyをグローバルに設定しています(記事作成時点だと3.0.1)。

グローバルなバージョンを設定するには rbenv global コマンドに続けてバージョンを指定すればOKです。3.0.1をグローバルにしたい場合は..

rbenv global 3.0.1

となります。
このコマンドを実行した後、現在有効なRubyのバージョンを確認する rbenv version コマンドを実行すると次のような結果になります。

$ rbenv version
3.0.1 (set by /Users/mogulla3/.rbenv/version)

ちなみに ruby -v でも確認できます

$ ruby -v
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19]

ディレクトリ単位のRubyバージョンの設定

ディレクトリ単位でRubyバージョンを設定し、そのディレクトリ配下にいる場合は指定したバージョンのRubyに切り替えることができます。おそらくこの機能がrbenvで最もよく使われる機能です。

ディレクトリ単位というのは、実質「アプリケーション単位」と置き換えて考えても差し支えないでしょう。この機能を使うことでアプリケーションで使いたいバージョンを明示できるようになります。

これには、設定したいアプリケーションのディレクトリに移動したのちに rbenv local コマンドに続けてバージョンを指定すればOKです。
例として myapp というアプリケーションのディレクトリがあり、そこでRuby 2.7.3を指定したい場合は..

cd myapp
rbenv local 2.7.3

となります。 ここで、myapp以下で rbenv version を実行すると次のように切り替わっていることが確認できます。

// myapp以下にいるものとする

$ rbenv version
2.7.3 (set by /Users/mogulla3/myapp/.ruby-version)

逆に、myapp より上のディレクトリに移動した場合は、グローバルに設定したバージョンに切り替わります。

$ cd ..
$ rbenv version
3.0.1 (set by /Users/mogulla3/.rbenv/version)

また、myapp 以下であれば更に深いディレクトリにいたとしても指定したバージョンに切り替わります。
以下は myapp の下に dir1 というディレクトリを新規で作成し、dir1 に移動した上でバージョンを確認した場合の結果です。

// myapp以下にいるものとする

$ mkdir dir1
$ cd dir1
$ rbenv version
2.7.3 (set by /Users/mogulla3/myapp/.ruby-version)

シェル単位のRubyバージョンの設定

シェル単位でRubyのバージョンを切り替えることもできます。
シェル単位なので、一度バージョンを切り替えた後にターミナルを開き直すなどして新しいシェルのセッションを立ち上げるとリセットされる、という動きをします。

あまり頻繁に使わないとおもいますが、一時的に特定のバージョンのRubyで動かしたい、というようなケースでは役に立つと思います。

これには rbenv shell コマンドに続けてバージョンを指定すればOKです。例えば、2.6.6に切り替えたい場合は..

rbenv shell 2.6.6

となります。
rbenv version で確認すると切り替わっていることが確認できます。

$ rbenv version
2.6.6 (set by RBENV_VERSION environment variable)

ターミナルを立ち上げ直したときに、元のグローバルのバージョン(ディレクトリによってはローカルなバージョン)に戻ることもぜひ確認してみてください。

まとめ

本記事ではrbenvの基本的な使い方について整理しました。

  • rbenvのインストールと初期設定
    • Homebrewを使ってrbenvのインストールをした
    • rbenv init の指示に従ってrbenvの初期設定をした
  • Rubyのインストール
    • rbenv install --listrbenv install --list-all でインストールできるバージョンの一覧を確認した
    • rbenv install <VERSION> でrubyをインストールした
    • rbenv version で現在有効なバージョンのRubyの確認をした
  • Rubyのバージョンの切り替え
    • rbenv global <VERSION> でグローバルなバージョンのRubyを設定した
    • rbenv local <VERSION> でディレクトリ単位でバージョンを切り替えた
    • rbenv shell <VERSION> でシェル単位でバージョンを切り替えた

ここまでできるようになると業務でもほぼ問題なく使えると思います。しかし..この記事はそこからさらに理解を深めることを目指します。

次の記事ではrbenvのバージョン切り替えの仕組みについて解説・整理します。