はじめに
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"
これで、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
System Ruby
"rvm Rubies"以下に表示されているのがRVMでインストールされたものです。"System Ruby"と表示されているのは、使っている環境にインストールされていたものです。
RVMでインストールしたRubyを使用するには"rvm use"コマンドを使います。
$ rvm use 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を管理する方法を紹介します。