Ubuntu に RVM をインストールして Ruby のバージョン管理を行う

Ruby には多くの実装があります。 リファレンス実装 (CRuby) としては Ruby 1.8 系 (MRI) と 1.9 系 (YARV) の 2 つが現役で使われていますし、Java で書かれた実装である JRuby .Net で動く IronRuby などの別実装もあります。 最近では Rubinius が注目されているように思います。

このように多くの Ruby 実装があるわけですが、それらをまとめて管理するアプリケーションとして Ruby Version Manager (RVM) があります。 ここでは Ubuntu 10.04 に RVM をインストールして、実際に使う方法を述べます。

解説する内容

Ubuntu 10.04 に RVM をユーザー権限 *1 でインストールし、実際に使うところまで解説します。 詳しい説明は RVM の公式サイト をご覧ください。

ここでは Ubuntu での話を書いていますが、その他の Linux ディストリビューションでも大差ないと思います。

RVM のインストール

まずは RVM のインストールを行います。 下記コマンドを実行するだけで自動的にインターネット上からソースファイルを取ってきて、コンパイル、インストールをしてくれます。 当然ながら curl コマンドがインストールされている必要があります。

$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-latest )

$HOME/.rvm というディレクトリが新たに作られます。 この中に RVM 自体や、RVM によってインストールする Ruby 実装がインストールされます。 上記コマンドで RVM のインストールが完了したら、次にパスを通します。 シェルの環境変数設定ファイル (Ubuntu の場合は ~/.bashrc *2。 多くの Linux ディストリビューションbash では ~/.bash_profile) の最後に次の行を追加します。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

これでインストールは完了です。 ログインしなおせば (またはコマンド source ~/.profile でシェルの環境変数設定ファイルを読み込みなおせば) rvm コマンドが使用できます。

インストールの確認

ちゃんとインストールできたかどうか確認するには、次のコマンドを入力してください。

$ type rvm | head -n1

次のように出力されれば大丈夫です。

rvm is a function

各種 Ruby 実装のインストール

次に、RVM を使って各種 Ruby 実装をインストールします。 ここでは Ruby 1.9.2 (YARV) と Ruby 1.8.7 (MRI) をインストールします。 その他の Ruby 実装のインストール方法は RVM の公式ページに実装一覧があります のでそちらをご覧ください。

依存するパッケージのインストール

Ruby そのものをインストールする前に、依存するパッケージを apt-get でインストールします。 依存するパッケージは、rvm notes コマンドで確認できます。 rvm notes コマンドを使うと、私の環境では以下のコマンドを入力すれば依存するパッケージを全てインストールできると書かれていたので、下記コマンドを実行しました。

$ sudo aptitude install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev

環境によって必要なパッケージは違うと思いますので、各自 rvm notes コマンドを使用して確認してください。

Ruby 1.8.7 のインストール

依存するパッケージのインストールが終わったので、Ruby 1.8.7 をインストールします。

$ rvm install 1.8.7

上記コマンドだけで、ソースファイルの取得からコンパイル、インストールまで行ってくれます。

Ruby 1.9.2 のインストール

次に Ruby 1.9.2 をインストールします。

$ rvm install 1.9.2

こちらもこれだけで終わりです。

切り替え

さて、Ruby の実装をインストールしたので、次に Ruby のバージョンの切り替え方法を述べます。 単に rvm use コマンドの引数として使用するバージョンを渡してやれば、そのバージョンの Ruby が使用できます。

$ rvm use 1.8.7
Using /home/username/.rvm/gems/ruby-1.8.7-p302
$ ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]

$ rvm use 1.9.2
Using /home/username/.rvm/gems/ruby-1.9.2-p0
$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

ruby コマンドだけでなく、gem コマンドや irb コマンドなども指定したバージョンのものに切り替わります。

デフォルトのバージョンの指定をして、その実装に切り替えるには次のようにします。

$ rvm --default use 1.9.2

デフォルトバージョンの指定をすれば、次からは次のようにしてデフォルトバージョンに切り替えられます。

$ rvm use default

また、RVM でインストールした Ruby を使わず、システムにインストールされている Ruby に切り替える場合は次のコマンドを使います。

$ rvm reset

実際に使ってみる

$ rvm use 1.9.2

RVM でインストールした Ruby 1.9.2 に切り替えます。 gem の環境情報を表示してみます。

$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/username/.rvm/gems/ruby-1.9.2-p0
- RUBY EXECUTABLE: /home/username/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
- EXECUTABLE DIRECTORY: /home/username/.rvm/gems/ruby-1.9.2-p0/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
(以下略)

irb ももちろん使えます。

$ irb
ruby-1.9.2-p0 > 1+2
=> 3
ruby-1.9.2-p0 > exit

というわけでここで解説は終了です。

付録 : openssl のエラーが出てしまう場合

システムの openssl を認識せず、RVM でインストールした Ruby 実装で openssl モジュールが使えないことがあります。 (require "openssl" に対して下記エラーが発生する。)

error loading "/.../.../XXX.rb": no such file to load -- openssl. skipping...

この場合は openssl を RVM でインストールし、その openssl を指定して Ruby 実装をインストールしなおすことで問題を回避できます。 (インストールした Ruby 実装を一度アンインストールする必要があります。)

以下の例では、RVM でインストールした Ruby 1.9.2 で openssl が使えなかった場合に、openssl が使えるように Ruby 1.9.2 を再インストールする流れを示しています。

$ rvm package install openssl
$ rvm remove 1.9.2
$ rvm install 1.9.2 --with-openssl-dir=$HOME/.rvm/usr

詳しくは RVM 公式サイトの openssl のページ をご覧ください。

*1:root 権限ではない。 システム全体にインストールする場合はまた少し違う方法でインストールしなければならない。 詳しくは RVM の公式サイトにて。

*2:~/.profile に書くべきかと最初は思ってましたが、~/.profile から ~/.bashrc を読んでいるので ~/.bashrc に書くのが良さそうです