おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

Rbenv(Rubyインストーラ)の使い方

2023/10/26 追記

Rbenvのインストールに便利なスクリプトインストーラ)ができています。 詳細は次のGitHubレポジトリを参照してください。 この記事にあるような面倒な手続きなしでRbenv自体のインストールができます。 なお、インストール後にRbenvでRubyをインストールしたり起動したりする方法はこのブログ記事を参考にしてください。

追記は以上

RbenvはLinuxMacにおけるrubyインストーラです。 ディストリビューションrubyパッケージが最新でない場合などに使います。 しかし、rbenvでは躓くことが多く、泣かされた人も多いと思います。 しかもドキュメントは英語なので、そこでも苦しんだ人がいるのではないでしょうか。 そこでrbenvを使ったRubyのインストールをまとめてみました。

※ Rubyのロゴはまつもとゆきひろさんの著作物でCreative Commons Attribution-ShareAlike 2.5 Licenseの条項のもと配布されます。

目次

RbenvとRuby-buildを使ったRubyのインストール

rbenvのREADME.MDに従えば、インストールはできるはずなのだが、何故かいつも躓いてしまう。 そこで、その手順を記録して、次回にはスムーズなインストールができるようにしたいと思う。 なお、rbenvはWindowsでは動かない。 ここではUbuntu22.04でのインストールを説明する。

準備

git、makeをインストールする。

$ sudo apt-get install git make

次にブラウザを立ち上げ、rbenvのgithubレポジトリを開く。 表示されたレポジトリの下にREADME.mdが表示されている。 この英語を完全に理解すれば、問題なくインストールできる。 以下はそれをわかりやすく、日本語で記述したものである。

rbenvのダウンロード

インストールの手順は、README.mdのBasic GitHub Checkoutに書かれている。

以下のインストールは、個人フォルダにrbenv、ruby-build、rubyをインストールするもので、それらが起動できるのはインストールしたユーザのみである。

まず、rbenvのレポジトリをローカル(自分が操作しているPCのこと)にコピーする。

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

次の操作はREADME.mdにによれば、rbenvを高速化するためのオプションである。 仮にこの操作が失敗しても、rbenvは正常に動く。

$ cd ~/.rbenv && src/configure && make -C src

つぎに、rbenvをbashのパスに加え、実行可能にする。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

更に、rbenvのセットアップをする。

~/.rbenv/bin/rbenv init

これを実行すると、次のような指示が表示される。

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

eval "$(rbenv init -)"

ここに書かれている指示は「以下を~/.bashrcに付け加えることにより、rbenvを自動的にロードする」ことができるという意味である。 この指示にしたがって、~/.bashrcの最後に「eval "$(rbenv init -)"」を付け加える。 なお、この付け加える前の.bashrcの最後の行は

export PATH="$HOME/.rbenv/bin:$PATH"

になっているはずである。 この行は、一つ前のコマンドで.bashrcに付け加えられたもので、もともとの.bashrcには無かったものである。

ここで、一旦bashを終了して、新たにbashを立ち上げる。 bashは新規に立ち上がるたびに、.bashrcを実行するので、さきほどの.bashrcの書き換えがbash環境変数などに反映される。

ここまでがうまく行っているかどうかをテストする。

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash

このコマンドを実行すると、診断結果が表示される。 そこになにかエラーめいたものがあれば、ここまでの作業で何か問題があったということである。 無事テストを通ったら、次に進む。

ruby-buildのインストール

ruby-buildはrbenvのプラグインとして、rubyのインストールで使われるものである。 まず、ruby-buildのgithubレポジトリを開く。 表示された画面の下方にREADME.mdがある。 この英語の説明が理解できれば、インストールはできるはずだが、ここでもその手順を日本語で解説しよう。

gitレポジトリをクローンする。 Installationの「# As an rbenv plugin」の部分を実行する。

$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
rubyのインストール

ダウンロード可能なrubyのバージョンを調べる。

$ rbenv install -l
2.6.10
2.7.6
3.0.4
3.1.2
jruby-9.3.4.0
mruby-3.0.0
rbx-5.0
truffleruby-22.1.0
truffleruby+graalvm-22.1.0

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

ここでは、現在の最新版のruby 3.1.2をインストールしてみよう。

$rbenv install 3.1.2

他のバージョンをインストールしたければ、「3.1.2」を別のバージョンで置き換えれば良い。

rubyのインストール中に、必要なパッケージがないと表示されることがある。 その際は、そのパッケージのインストール方法も表示される場合が多い。 aptまたはapt-getを使って必要なパッケージをインストールしてから、再びrubyのインストールを行う。 エラーがでなければインストールは完了である。

rubyのバージョンの指定

rbenvでは、rubyの複数のバージョンをインストールできる。 例えば、ruby 3.1.2とruby 2.7.6の2つのバージョンがインストール済であるとする。 rubyを起動するには、端末からrubyと打ち込めばよいが、それだけではどちらのバージョンを起動するかが定まらない。

rbenvでは、フォルダごとにバージョンを指定するコンフィギュレーションファイル「.ruby-version」がある。 これは「.」(ドット)で始まる隠しファイルなので通常は見ることが出来ない。 これを表示するには「Ctrl-H」を押す。 隠しファイルが表示されている状態を元に戻すときも「Ctrl-H」を押せば良い。

そのコンフィギュレーションファイルを指定するコマンドが「rbenv local」である。 あるフォルダをカレントディレクトリにして

$ rbenv local 3.1.2

とすると、そのフォルダで起動するrubyのバージョンは3.1.2になる。

このファイルがない場合は、rubyを起動することができない。

しかし、rbenv globalでバージョンを指定すると、フォルダに「.ruby-version」がないときのデフォルトのバージョンを指定できる。

$ rbenv global 3.1.2
ライブラリ(gem)のインストール

Rubyをインストールすると主なライブラリも同時にインストールされる。 しかし、時にはそれ以外のライブラリを必要とすることもあるだろう。 そのような時には、RubygemsからRubyのライブラリをインストールすることができる。 インストールには「gem」コマンドを用いる。

例えば、diff-lcsというテキストの比較ライブラリをインストールするには次のようにすれば良い。

gem diff-lcs

このライブラリをRubyプログラムの中で使用するにはrequireコマンドを使う

require 'diff/lcs'

diff-lcsはなかなか面白いライブラリなのだが、ここではその説明は省略する。

rbenv rehash とは

rbenvがどのようにrubyやgemのコマンドを捕らえて実行するのか、そのプロセスはUnderstanding Shimsに書かれている。

それを要約すると、

  • bashのパスにはrbenv initによって、「~/.rbenv/shims」が加えられている。
  • rbenv rehashをすると、インストールされているrubyやgemの情報がshimsに反映される。
  • 端末のコマンドがrubyやgemライブラリであれば、shimsの中で対応するコマンドを実行する。

このことから分かることはただインストールしただけではそのコマンドを実行することはできないということである。 Shimに登録する手続きが必要だが、それをするのが「rbenv rehash」である。

$ rbenv rehash

リハッシュは一度すれば良い。 新しいrubyやgemをインストールしたら、すぐにリハッシュしておこう。