株式会社フィードフォース技術チームのサイト。社内勉強会資料や開発の様子および成果の公開など。

rvmの紹介

rvmとは

  • Ruby Version Manager の略
  • 複数のRubyをインストールして管理し、切り替えて使う仕組み。
    • MRI(Matz’s Ruby Implementation), JRuby, Rubinius, REE(Ruby Enterprise Edition), MacRubyに対応しています。
  • 2009年夏に登場しました。
  • ほとんどシェル関数で実装されています。

ご注意

この記事の内容は2009年12月4日時点のものです。執筆時点で、rvmは活発に開発が進められているため、最新の状態とは挙動が異なる可能性があります。

用途(例)

  • 広く使われるライブラリを、異なるruby実装でテストしたい。
  • 使用しているRubyが異なる古いプロダクトを保守したい。

情報源

インストール

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/]

ただし、発表者は未検証。

No comments yet.

(required)

(required)


Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

powered by WordPress
copyright(c) 2006-2010 feedforce