Ruby Freaks Lounge

第39回RVM(Ruby Version Manager)よる環境構築

はじめに

Rubyの普及にともない、Rubyの生みの親である、まつもとゆきひろ氏がC言語で作成したRubyインタプリタ(CRuby)以外にも、JVMで実行されるJRuby、Objective-Cで実装されMacアプリケーションのプログラミングのできるMacRuby、CRubyベースにメモリ管理に改良を加えているRuby Enterprise Edition等、プログラミング言語Rubyを実行できる環境が増えてきました。またCRubyに関しても、現在最も使われているバージョンである1.8系以外にも、最新の安定版である1.9系も普及期にはいってきました。

今回は、複数のRuby実行環境の管理を簡単にするRVM(Ruby Version Magager)を紹介します。

RVMとは

RVMはUNIX系の環境で、複数のRuby処理系をインストール、共存させることができるツールです。

ひとつの環境に対してRVMを使わずに複数のRubyをインストールする場合、それぞれのRubyでコマンドやインストール方法が違ったりと面倒なことがありました。また、CRubyの1.8系と1.9系を共存させるには、Rubyをコンパイルする際に実行ファイルがrubyでなくruby1.9になるようにプレフィクスを付けたりしたりなど工夫が必要でした。

RVMはbashスクリプトです。RVMを導入することで以下のようなことができます。

  • Rubyのインストール
  • 使用するRuby処理系の切り替え
  • 複数のRubyでスクリプトを一斉に実行
  • gemの管理
  • 違いを意識することなく同一の手順でインストールできる
  • すぐに最新のRubyを入手できる
  • それぞれのRubyをrubyで実行できる

RVMのインストール

RVMをインストールするには、いくつかの方法があります。

  • gemでのインストール
  • githubからのインストール
  • 公式サイトで配布されているtarballからのインストール

今回は、一番簡単にインスールできるgemを使ったインストール方法を紹介します。 その他の方法については、RVMのサイトを参照してください。

gemでインストールするためには、使っている環境でRubyGemsが使用できる必要があります。ここでは、RubyGemsのインストールは割愛します。

まず、RubyGemsでrvmパッケージをインストールします。

$ gem install rvm

gemのrvmパッケージをインストールするとrvm-installというコマンドがインストールされています。このコマンドを実行することで、RVMがインストールされます。

$rvm-install

あとは、rvm-installを実行したときに表示されるメッセージにも示されている通り、シェルを起動したときにRVMのスクリプトを読みこむために、.bashrcや.zshrcに以下を記述します。

if [[ -s $HOME/.rvm/scripts/rvm ]] ; then source $HOME/.rvm/scripts/rvm ; fi

記述後、シェルを開き直すとRVMが使用できるようになります。

RVMは、rvmコマンドと、そのサブコマンドで構成されています。主な使い方を確認するには"rvm help"を使用します。

$ rvm help

RVMでのRubyのインストール

RVM(4月4日の執筆時点でのRVMの最新バージョンは0.1.25)では、以下のRubyをインストールできます。

  • CRuby1.8/1.9
  • Rubinius
  • JRuby
  • Ruby Enterprise Edition
  • MagLev
  • IronRuby
  • MacRuby

RVMでRubyをインストールする際は、以下のようにコマンドを指定します。

rvm install Rubyの種類

指定できるRubyの種類は"rvm list known"コマンドを実行することで確認できます。

$ rvm list known

表示されている一覧の中には、末尾に"-head"と書かれているものがあるはずです。これを指定することで、インストール時に最新版を取得するようになります。

それでは、CRubyの最新バージョンをインストールしてみましょう。

CRubyの最新バージョンは"ruby-head"を指定することでインストールできます。"ruby-head"では、 http://svn.ruby-lang.org/repos/ruby/trunk から最新版のソースを取得し、コンパイルしインストールすることになります。そのため、ソースを入手するためにはSubversionを使えるようにしておく必要があります。

RVMでRubyをインストールには、"rvm install"コマンドを使用します。

$ rvm install ruby-head

Rubyのコンパイル時には、configureオプションを渡したいときがあります。例えば、Mac OS X 10.6ではreadlineが標準で用意されておらず、そのままコンパイルすると、irbで日本語が入力することができません。そのため、通常ソースコードからコンパイルする際は、readlineを別途インストールしておき、readline等のライブラリのあるパスを"--with-opt-dir"という configureオプションで指定する必要があります。

rvmでインストールする際、configureオプションは-Cで渡します。複数のconfigureオプションを渡したい場合は、カンマで区切って指定します。 よって、わたしの手元の環境でインストールするは、以下のようになります。

$ rvm install ruby-head -C "--enable-shared=true,--with-opt-dir=/opt/local"
Installing Ruby from source to: /Users/takkanm/.rvm/rubies/ruby-head
Running autoconf
Configuring ruby-head, this may take a while depending on your cpu(s)...
Compiling ruby-head, this may take a while, depending on your cpu(s)...
Installing ruby-head Installation of ruby-head is complete.
Updating rubygems for ruby-head Installing gems for ruby-head.
Installing rake
Installation of gems for ruby-head is complete.

これで、Rubyのインストールが完了しました。

RVMでインストールされた実行ファイルは、環境変数rvm_bin_path(デフォルトでは${HOME}/.rvm/bin)で参照されるディレクトリ以下に配置されます。

$ ls $rvm_bin_path
ruby-head* rvm* rvm-prompt* rvmsudo*

また、インストール時に使用したソースは、環境変数rvm_src_path(デフォルトでは${HOME}/.rvm/src)で参照されるディレクトリに保存されます。

$ ls $rvm_src_path
ruby-head/

RVMでのRubyの使用

次にRVMでインストールしたRubyを使ってみましょう。MacOSX10.6での標準のRubyは以下のようになっています。

$ ruby -v
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
$ which ruby
/usr/bin/ruby

それでは、先程インストールしてみたruby-headを使用してみましょう。 RVMでインストールしたRubyは"rvm list"で確認できます。

$ rvm list

rvm Rubies

  ruby-head [ x86_64 ]

System Ruby

  system [ x86_64 i386 ppc ]

"rvm Rubies"以下に表示されているのがRVMでインストールされたものです。"System Ruby"と表示されているのは、使っている環境にインストールされていたものです。

RVMでインストールしたRubyを使用するには"rvm use"コマンドを使います。

$ rvm use ruby-head
Using ruby head

これで完了です。"rvm use"を使用すると、Rubyに関連する以下のコマンドのパスが変更されます。

$ which ruby
/Users/takkanm/.rvm/rubies/ruby-head/bin/ruby
$ which irb
/Users/takkanm/.rvm/rubies/ruby-head/bin/irb
$ which rake
/Users/takkanm/.rvm/rubies/ruby-head/bin/rake

また、以下の環境変数もruby-headのものを使用するように設定されます。

  • PATH
  • GEM_HOME
  • GEM_PATH
  • BUNDLE_PATH
  • MY_RUBY_HOME
  • IRBRC

実際にRubyが切り替わっているかを確認してみましょう。

$ ruby -v

ruby 1.9.2dev (2010-04-04 trunk 27212) [x86_64-darwin10.3.0]

これで、rubyコマンドで最新のrubyが実行されるようになります。

次に他のRubyを使ってみることにしましょう。ここではJRubyを使用してみます。JRubyを"rvm install jruby"でインストールした後に、"rvm use jruby"で切り替えることができます。

$ ruby -v
ruby 1.9.2dev (2010-04-04 trunk 27212) [x86_64-darwin10.3.0]
$ rvm use jruby
Using jruby 1.4.0
$ ruby -v
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (Java HotSpot(TM) Client VM 1.5.0_20) [i386-java]

CRubyの1.9.2からJRubyの1.4.0に切り替わりました。

なお、システム標準のRubyを使用するようにするには、"ruby reset"コマンドを使用します。

$ rvm reset
$ ruby -v
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]

まとめ

今回はRVMを使うことで、Rubyのインストールと、システム標準のRuby以外を使用するための方法を説明しました。次回は、複数のRubyで一斉にスクリプトを実行する方法や、RVMを使ってgemを管理する方法を紹介します。

おすすめ記事

記事・ニュース一覧