chruby と ruby-install で複数バージョンの Ruby を切り替えて使う (Ubuntu 編)

2013/10/18

1年半ほど前に書いた「Ruby on Rails 3.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました」という記事では、rbenvruby-build を利用して Ruby をインストールすることをお勧めしたのですが、最近 chrubyruby-install という選択肢も有力となってきて、実際の使い心地も悪くないので、簡単に利用方法を説明したいと思います。

すでに、Mac OS X 向けの日本語の紹介記事が存在するので、とりあえず今回は Ubuntu 編です。

この記事は2013年10月18日に書かれたものです。2014年6月22日に、バージョン番号などを更新しました。

2015年3月9日現在、この記事に書いてある手順では、最新の Ruby 2.2 をインストールできません。
http://www.oiax.jp/rails/zakkan/install-2-2-0-with-ruby-install.html をご覧ください。

chruby のインストール

まず、https://github.com/postmodern/chruby/releases を見て、最新のバージョン番号を調べます。現在(2014年6月22日)では、v0.3.8 が最新です。

続いて、ターミナルを開き、以下のコマンドを順に実行します:

$ mkdir -p ~/src
$ cd ~/src
$ wget -O chruby-0.3.8.tar.gz https://github.com/postmodern/chruby/archive/v0.3.8.tar.gz
$ tar -xzvf chruby-0.3.8.tar.gz
$ cd chruby-0.3.8/
$ sudo make install
$ echo 'source /usr/local/share/chruby/chruby.sh' >> ~/.bashrc
$ echo 'source /usr/local/share/chruby/auto.sh' >> ~/.bashrc
$ exec $SHELL -l

0.3.8 の部分は最新のバージョン番号で置き換えてください。また、Zsh をお使いの方は ~/.bashrc~/.zshrc で読み替えてください。

ruby-install のインストール

先ほどと同様に、https://github.com/postmodern/ruby-install/releases を見て、最新のバージョン番号を調べます。現在(2014年6月22日)では、v0.4.3 が最新です。

ターミナルを開き、以下のコマンドを順に実行します:

$ cd ~/src
$ wget -O ruby-install-0.4.3.tar.gz https://github.com/postmodern/ruby-install/archive/v0.4.3.tar.gz
$ tar -xzvf ruby-install-0.4.3.tar.gz
$ cd ruby-install-0.4.3/
$ sudo make install

0.4.3 の部分は最新のバージョン番号で置き換えてください。

Ruby のインストール

ruby-install コマンドを実行すると、インストール可能な Ruby のバージョン一覧が表示されます:

$ ruby-install
Known ruby versions:
  ruby:
    1:      1.9.3-p545
    1.9:    1.9.3-p545
    1.9.3:  1.9.3-p545
    2.0:    2.0.0-p451
    2.0.0:  2.0.0-p451
    2:      2.1.2
    2.1:    2.1.2
    stable: 2.1.2
  jruby:
    1.7:    1.7.12
    stable: 1.7.12
  rbx:
    2.1:    2.1.1
    2.2:    2.2.6
    stable: 2.2.6
  maglev:
    1.0:    1.0.0
    1.1:    1.1RC1
    stable: 1.0.0
  mruby:
    1.0:    1.0.0
    stable: 1.0.0

Ruby の安定版(stable)をインストールしたいのであれば、次のコマンドを実行します:

$ ruby-install ruby

次のように特定のバージョンを指定することもできます:

$ ruby-install ruby 1.9.3-p545

デフォルトのインストールディレクトリは /opt/rubies です。他のディレクトリ、例えば ~/.rubies にインストールしたい場合は、-i オプションでディレクトリを指定します:

$ ruby-install -i ~/.rubies/ruby-2.0.0-p451 ruby

Ruby の切り替え

rbenv では rbenv global 2.0.0-p451 というコマンドにより、デフォルトで使用する Ruby のバージョンを指定できましたが、chruby にはそういう機能はありません。chruby の作者は意図的にその仕様を排除しています。デフォルトの Ruby は、/usr/bin/usr/local/bin にインストールされている「システムの Ruby」のままです。

Ruby の切り替え方法は2種類あります。1つは chruby 2.1.2 のようにコマンドで切り替える方法、もう1つはディレクトリに .ruby-version という隠しファイルを作って、そこにバージョン番号を書いておくという方法です。後者の方法を採用した場合、その隠しファイルが存在するディレクトリおよびそのサブディレクトリでのみ、そこに書かれたバージョン番号の Ruby が使用されます。

例えば、~/work/projects/legacy というディレクトリ以下では Ruby 1.9.3-p545 を使用したい場合、次のコマンドを実行します:

$ cd ~/work/projects/legacy
$ echo '1.9.3-p545' > .ruby-version

chruby の長所

もっとも目を引く長所は、新しい gem パッケージのインストールによってコマンドがインストールされた時(例えば RSpec の場合)、何もしなくてもそのままそのコマンドを実行できるということです。rbenv の場合は rbenv rehash コマンドを実行する必要があります。

しかし、私にとってより重要なことは chruby の仕組みが rbenv のそれよりもシンプルであることです。rbenv の場合は、~/.rbenv ディレクトリの下に謎の(と、私には思える)ファイルが数多く作られますが、chruby の場合は、/opt/rubies ディレクトリおよび ~/.rubies ディレクトリにインストールされた Ruby をそのまま実行しています。

裏側で何が行われているのかが分かりやすい、というのは大きな魅力です。

[更新] .ruby-version ファイルに書き込む内容を ruby-1.8.7 から 1.8.7-p371 のように訂正しました。また「Ruby 1.8.7を使用したい場合」を「Ruby 1.8.7-p371を使用したい場合」と変更しました。(2013-10-21)

[更新] chrubyruby-install および ruby のバージョン番号を適宜変更しました。(2014-06-22)