インストール
GitからRVMをダウンロードしてインストールします。
$ mkdir -p ~/.rvm/src
$ cd ~/.rvm/src
$ git clone --depth 1 git://github.com/wayneeseguin/rvm.git .
$ ./install
インストール後に表示されるメッセージに従って、.bashrcの末尾に次の一行を追記します。
FILE: ~/.bashrc
[ -s "$HOME/.rvm/scripts/rvm" ] && source "$HOME/.rvm/scripts/rvm"
追記した一行を有効にするため、.bashrcを読み直します(一度シェルを抜けて、入り直してもOKです)。
$ . ~/.bashrc
環境変数が設定されて、RVMが使えるようになりました。
$ type rvm | head -1
rvm is a function
$ echo $rvm_path
/home/tetsuyai/.rvm
インストールできるRubyのバージョンを表示してみましょう。
$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p334]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-preview1
[ruby-]1.9.2-preview3
[ruby-]1.9.2-rc1
[ruby-]1.9.2-rc2
[ruby-]1.9.2[-p180]
[ruby-]1.9.2-head
ruby-head
# GoRuby
goruby
# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby[-1.5.6]
jruby-1.6.0.RC3
jruby-head
# Rubinius
rbx-1.0.1
rbx-1.1.0
rbx-1.1.1
rbx-1.2.0
rbx-1.2.1
rbx-1.2.2
rbx[-head]
# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2011.03]
ree-1.8.6-head
ree-1.8.7-head
# MagLev
maglev[-25439]
maglev-head
# Mac OS X Snow Leopard Only
macruby[-0.9] # the default macruby
macruby-nightly
macruby-head # Build from the macruby git repository
# IronRuby -- Not implemented yet.
ironruby-0.9.3
ironruby-1.0-rc2
ironruby-head
インストール済みのRubyを表示してみましょう。とはいえ、まだなにもインストールされていません。
$ rvm list
rvm rubies
インストールされたRubyがあると、下記のように一覧として表示されます。先頭に => が付いているものが、利用中のRubyです。
$ rvm list
rvm rubies
ree-1.8.7-2011.03 [ x86_64 ]
ruby-1.8.7-p334 [ x86_64 ]
ruby-1.9.2-head [ x86_64 ]
=> ruby-1.9.2-p180 [ x86_64 ]
RVMの情報を表示してみましょう。
$ rvm info
system:
system:
uname: "Darwin Tiphereth.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10 18:11:58 PST 2010; root:xnu-1504.9.26~3/RELEASE_X86_64 x86_64"
bash: "/bin/bash => GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)"
zsh: "/bin/zsh => zsh 4.3.9 (i386-apple-darwin10.0)"
rvm:
version: "rvm 1.2.8 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]"
homes:
gem: "not set"
ruby: "not set"
binaries:
ruby: "/opt/local/bin/ruby"
irb: "/opt/local/bin/irb"
gem: "/opt/local/bin/gem"
rake: "/opt/local/bin/rake"
environment:
PATH: "/usr/local/ec2-api-tools/bin:/Library/Java/Home/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/foo/.rvm/bin"
GEM_HOME: ""
GEM_PATH: ""
MY_RUBY_HOME: ""
IRBRC: ""
RUBYOPT: ""
gemset: ""
Ruby 1.8.7(MRI)をインストールします。デフォルトのreadlineは日本語入力にバグがあるため、MacPortsでインストールしたreadlineを参照するように、オプションを指定しています。バイナリは~/.rvmディレクトリにインストールされるため、root権限は必要ありません。
$ rvm install 1.8.7 -C "--enable-shared, --with-readline-dir=/opt/local"
今後はRVMでインストールしたRuby 1.8.7を使う前提で、これまでのRuby 1.8.7からジェムセットをコピーします。
$ rvm system
$ rvm gemset export system.gems
$ rvm 1.8.7
$ rvm gemset import system
Ruby Enterprise Editionの1.8.7をインストールします。
$ rvm install ree-1.8.7 -C "--enable-shared, --with-readline-dir=/opt/local"
インストールされました。
$ rvm list
rvm rubies
ree-1.8.7-2011.03 [ x86_64 ]
ruby-1.8.7-p334 [ x86_64 ]
Ruby Enterprise Editionをデフォルトに指定します。利用中のRubyは先頭に => が付くので、シェルにログインし直しても => が付いたままであることを確認しておきましょう。
$ rvm use ree-1.8.7-2011.03 --default
$ rvm list
rvm rubies
=> ree-1.8.7-2011.03 [ x86_64 ]
ruby-1.8.7-p334 [ x86_64 ]
補足
rvm use 〜してもRubyが切り替わらない。
~/.rvm/scripts/rvmがうまくsourceされていないとき、この現象が発生します。
私の場合、~/.rvm/scripts/rvmがsourceされなかった原因は、.bashrcの書き方にありました。最初は下記のように書いていた(自分のホームディレクトリを~で表記しています)のですが、この書き方だと~/.rvm/scripts/rvmの部分が正しく認識されていませんでした。
if [ -s "~/.rvm/scripts/rvm" ]; then
source "~/.rvm/scripts/rvm"
fi
この状態でrvm use 〜すると、正常に切り替わったかのようなメッセージが表示されます。しかしrvm listには => が表示されず、ruby -vでバージョンを確認しても元のままです。
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10
$ rvm use ree-1.8.7
Using /Users/foo/.rvm/gems/ree-1.8.7-2011.03
$ rvm list
rvm rubies
ree-1.8.7-2011.03 [ x86_64 ]
ruby-1.8.7-p334 [ x86_64 ]
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
.bashrcの~/.rvm/scripts/rvmを$HOME/.rvm/scripts/rvmに修正すると、正しくsourceされるようになりました。インストール後のメッセージには$HOMEと書かれていたのですが、勝手に~に書き換えたのが間違いだったということで (^^;;
if [ -s "$HOME/.rvm/scripts/rvm" ]; then
source "$HOME/.rvm/scripts/rvm"
fi
今度は正常に切り替わりました。
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
$ rvm use ree-1.8.7
Using /Users/foo/.rvm/gems/ree-1.8.7-2011.03
$ rvm list
rvm rubies
=> ree-1.8.7-2011.03 [ x86_64 ]
ruby-1.8.7-p334 [ x86_64 ]
$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.6.0], MBARI 0x6770, Ruby Enterprise Edition 2011.03
ジェムセット
RVMにはgemパッケージの組み合わせに名前を付けて管理する機能があり、この組み合わせのことをジェムセットと呼んでいます。ジェムセットを使うと、ジェムセット単位で有効なgemパッケージ群を切り替えることができるため、同じgemパッケージの異なるバージョンを使い分けたり、不必要なgemパッケージがロードされることによる予期しない挙動を避けることができます。
ジェムセットの新規作成
MRIの1.9.2-p180に新しいジェムセットrails3
を作成します。
$ rvm use ruby-1.9.2-p180
$ rvm gemset create rails3
'rails3' gemset created (/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3).
Rubyを選択し、ジェムセットを作成します。$HOME/.rvm/gems/ruby-1.9.2-p180@rails3ディレクトリが作成されます。
ジェムセットの切り替え
有効なジェムセットをrails3に切り替えます。
$ rvm gemset use rails3
ジェムセットを切り替える前後で比較すると、環境変数によってジェムセットを切り替えている様子がわかります。
こちらが切り替える前。環境変数GEM_HOMEにはデフォルトのジェムセットが指定されています。
environment:
PATH: "/Users/foo/.rvm/gems/ruby-1.9.2-p180/bin:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global/bin:/Users/foo/.rvm/rubies/ruby-1.9.2-p180/bin:/Users/foo/.rvm/bin:/Users/foo/bin:/usr/local/ec2-api-tools/bin:/Library/Java/Home/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
GEM_HOME: "/Users/foo/.rvm/gems/ruby-1.9.2-p180"
GEM_PATH: "/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global"
こちらが切り替えた後。環境変数GEM_HOMEにはrails3が指定されています。
environment:
PATH: "/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3/bin:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global/bin:/Users/foo/.rvm/rubies/ruby-1.9.2-p180/bin:/Users/foo/.rvm/bin:/Users/foo/bin:/usr/local/ec2-api-tools/bin:/Library/Java/Home/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
GEM_HOME: "/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3"
GEM_PATH: "/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global"
ジェムセットの一覧
利用中のRubyが持っているジェムセットの一覧、またはすべてのジェムセットの一覧を表示することができます。
利用中のRubyが持っているジェムセットの一覧です。
$ rvm gemset list
gemsets for ruby-1.9.2-p180 (found in /Users/foo/.rvm/gems/ruby-1.9.2-p180)
global
=> rails3
すべてのジェムセットの一覧です。
$ rvm gemset list_all
gemsets for ree-1.8.7-2011.03 (found in /Users/foo/.rvm/g
ems/ree-1.8.7-2011.03)
=> global
gemsets for ruby-1.8.7-p334 (found in /Users/foo/.rvm/gems/ruby-1.8.7-p334)
=> global
gemsets for ruby-1.9.2-p180 (found in /Users/foo/.rvm/gems/ruby-1.9.2-p180)
global
=> rails3
ジェムセットの定義
例えばruby-1.9.2-p180をインストールすると、rvmは$HOME/.rvm/gemsディレクトリに2つのジェムセットを作成します。1つはデフォルトのジェムセットruby-1.9.2-p180
、もう1つはglobalのジェムセットruby-1.9.2-p180@global
です。
それぞれのジェムセットにどのgemパッケージをインストールするかは、$HOME/.rvm/gemsetsディレクトリのglobal.gems
とdefault.gems
を使って定義することができます。
RVMは下記のファイルを検索して、インストールするgemパッケージを決定します。新しいRubyをインストールしたとき、常にインストールしたいgemパッケージがあれば、これらのファイルに定義しておくといいでしょう。
$HOME/.rvm/gemsets/ruby/1.9.2/p180/global.gems
$HOME/.rvm/gemsets/ruby/1.9.2/p180/default.gems
$HOME/.rvm/gemsets/ruby/1.9.2/global.gems
$HOME/.rvm/gemsets/ruby/1.9.2/default.gems
$HOME/.rvm/gemsets/ruby/global.gems
$HOME/.rvm/gemsets/ruby/default.gems
$HOME/.rvm/gemsets/global.gems
$HOME/.rvm/gemsets/default.gems
私の場合、プロジェクトごとに必要なgemパッケージは$RAILS_ROOT/vendor/bundleディレクトリで管理する(この管理にはBundlerを使っています)ため、ジェムセットで管理するgemパッケージはプロジェクトに依存しないものに限っています。
FILE: $HOME/.rvm/gemsets/global.gems
--- .rvm/gemsets/global.gems 2011-05-06 16:30:57.000000000 +0900
+++ .rvm/gemsets/global.gems 2011-05-06 14:39:39.000000000 +0900
@@ -1 +1 @@
rake
+rdoc
+bundler
ジェムセットのエクスポート
ruby-1.9.2-p180のジェムセットrails3
をrails3.gems
にエクスポートします。
あらかじめエクスポートしたいRubyとジェムセットを選択し、ジェムセットファイル名を指定してエクスポートします。エクスポートされたジェムセットファイルはカレントディレクトリに作成されます。
$ rvm gemset export rails3.gems
ジェムセットファイル名を省略すると、default.gemsという名前で作成されます。
$ rvm gemset export
ジェムセットのインポート
ruby-1.9.2-p180のジェムセットrails3
にrails3.gems
をインポートします。
あらかじめインポートしたいRubyとジェムセットを選択し、ジェムセットファイル名を指定してインポートします。--createオプションを指定すると、選択したジェムセットが存在しなければ新たに作成します。
$ rvm --create 1.9.2-p180@rails3
$ rvm gemset import rails3.gems
ジェムセットファイル名を省略すると、カレントディレクトリから以下の順番でジェムセットファイルを探します。
- 選択中のジェムセットと同じ名前のジェムセットファイル(rails3.gems)
- default.gems
- system.gems
- .gems
$ rvm 1.9.2-p180@rails3
$ rvm gemset import
gemパッケージの削除
ジェムセットに含まれるすべてのgemパッケージ(ジェムセットではありません!)を削除します。本当に削除してもいいか確認されるので、削除する場合は"yes"と入力します。
$ rvm 1.9.2-p180@rails3
$ rvm gemset empty rails3
WARN: Are you SURE you wish to remove the installed gemset for gemset 'ruby-1.9.2-p180@rails3' (/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3)?
(anything other than 'yes' will cancel) > yes
--forceオプションを指定すると確認なしで削除されます。
$ rvm 1.9.2-p180@rails3
$ rvm --force gemset empty rails3
ジェムセットの削除
ジェムセットそのものを削除します。本当に削除してもいいか確認されるので、削除する場合は"yes"と答えます。
$ rvm 1.9.2-p180@rails3
$ rvm gemset delete rails3
WARN: Are you SURE you wish to remove the entire gemset directory 'rails3' (/Users/foo/.rvm/gems/ruby-1.9.2-p180@rails3)?
(anything other than 'yes' will cancel) > yes
--forceオプションを指定すると確認なしで削除されます。
$ rvm 1.9.2-p180@rails3
$ rvm --force gemset delete rails3