rvmの紹介
- 2009.12.11
- Ruby/Rails, 勉強会資料
複数のRubyをインストールし、切り替えて使用できるツール rvm(Ruby Version Manager) の紹介を行いました。
rvmとは
- Ruby Version Manager の略
- 複数のRubyをインストールして管理し、切り替えて使う仕組み。
- MRI(Matz's Ruby Implementation), JRuby, Rubinius, REE(Ruby Enterprise Edition), MacRubyに対応しています。
- 2009年夏に登場しました。
- ほとんどシェル関数で実装されています。
ご注意
この記事の内容は2009年12月4日時点のものです。執筆時点で、rvmは活発に開発が進められているため、最新の状態とは挙動が異なる可能性があります。
用途(例)
- 広く使われるライブラリを、異なるruby実装でテストしたい。
- 使用しているRubyが異なる古いプロダクトを保守したい。
情報源
- 本サイト: http://rvm.beginrescueend.com/
- GitHub: http://github.com/wayneeseguin/rvm/
- Clone URL: git://github.com/wayneeseguin/rvm.git
インストール
gemで
$ sudo gem install rvm
$ rvm-install
インストールが済んだらgemは削除して構いません。
$ sudo gem uninstall rvm
gitで
$ git clone git://github.com/wayneeseguin/rvm.git
$ cd rvm
$ ./install
どちらの場合も ~/.rvm 以下にファイルがコピーされ、rvmコマンドが使えるようになります。 このとき ~/.bashrc・~/.bash_profile・~/.zshrc のすべてが書き換えられます。存在しない場合、作成されます。不要なら消しましょう。
主なコマンド
$ rvm info - 現在の実行環境を表示
$ rvm list - 管理しているrubyの一覧を表示
$ rvm install 名前 - 指定されたrubyをインストール
$ rvm use 名前 - 現在のシェルで使用するrubyを切り替える
$ rvm ruby ... - rubyを一括実行
$ rvm gem ... - gemを一括実行
$ rvm rake ... - rakeを一括実行
$ rvm tests ... - rake testを一括実行
$ rvm specs ... - rake specを一括実行
rubyのインストール
インストールしていないものも含め、使える名前のリストを表示します。
$ rvm list --all
(ruby-)1.8.0-tv1_8_0
:
(ruby-)1.8.7(-p174)
:
macruby-head # Build from the macruby git repository
リストから名前を指定してインストールします。リスト内の名前の括弧内は省略できます。
$ rvm install 1.8.7
~/.rvm の下にインストールしたRubyの関連ファイル一式が置かれます。
rubyの切り替え
基本的な仕組みは、
- PATHの先頭部に .rvmの管轄下のものを前置。あれば入れ替え。
- ラッパースクリプトでの環境変数(GEM_HOMEなど)の切り替え。
で実現されています。
$ echo $PATH
$ rvm use 1.8.7
$ echo $PATH (先頭部分が変化する)
irb, rake, gemなども対応するものが使えるようになる。
ディレクトリごとの自動切り替え
カレントディレクトリに .rvmrc ファイルがあり、そこに
rvm ruby-1.8.7-p174
のように記述しておくと、このディレクトリおよびサブディレクトリに対するrubyを変更することが出来ます。
$ cd ~/project1; ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]
$ cd ~/project2; ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-darwin9.8.0]
$ cd ~/project3; ruby -v
ruby 1.9.2dev (2009-12-02 trunk 25977) [i386-darwin9.8.0]
cdコマンドがシェル関数で再実装されており、ホームディレクトリや / に到達するまでディレクトリを遡って .rvmrc を探し、見つかったものを評価することで切り替えを実現しています。
一括実行
$ rvm ruby -v
$ rvm gem install rails
$ rvm specs
インストールされているrubyで該当処理を順次実行していきます。
複数のRubyに対して一括でgemをインストールしたり、テストを実行したりできます。
gemセット
使用するrubyの名前の後ろに%と任意のラベルを付けてgemセットを指定することができます。この仕組みにより、同じrubyを使用しつつ、異なるgem構成を使うことができます。
$ cd ~/project1; gem list
$ cd ~/project2; gem list
$ cd ~/project3; gem list
質疑応答
Q: インストールにRubyは必要?
A: gitで入れるなら不要。
Q: Passengerで使うには?
A: PassengerRubyには、passenger-install-apache2-module が表示するパスではなく、rvmのラッパースクリプトを指定する。ラッパーの中で必要な環境変数の設定を行ってから対象のRubyをexecしている。 [http://rvm.beginrescueend.com/passenger/]
ただし、発表者は未検証。