Ruby Freaks Lounge

第40回 RVM(Ruby Version Manager)による環境構築(2)

この記事を読むのに必要な時間:およそ 4 分

GemSetsについて

GemSetsとは,RVMでRubyGemsを管理するという機能です。GemSetsという単位で1つのRubyに対してRubyGemsを管理することができます。

"rvm gemdir"コマンドを使うことで,RubyGemsのパッケージがインストールされる先を確認できます(ここでは,rvm useでruby-1.8.7-p249を指定した後に実施しています⁠⁠。

% rvm gemdir
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249

GemSetsを使用するとRubyGemsがインストール,ロードされるパスが変更され,管理することができます。どのようなGemSetsがあるかは,"rvm gemset list"コマンドで確認できます。RVMでRubyをインストールした直後は,globalというGemSetsがある状態です。

% rvm gemset list
gemsets : for ruby-1.8.7-p249 (found in /Users/takkanm/.rvm/gems/)
global

globalは,その名の通りそのRubyで常に読み込まれるGemSetsで,常に環境変数GEM_PATHの最後に指定されるようになっています。

それでは,新しい GemSetsを作ってみましょう。GemSetsを作るには"rvm gemset create"コマンドを使用します。

% rvm gemset create rails2
Gemset 'rails2' created.
% rvm gemset list
gemsets : for ruby-1.8.7-p249 (found in /Users/takkanm/.rvm/gems/)
global
rails2

作成したGemSetsを使用するには,"rvm gemset use"コマンドを使用します。

% rvm gemdir
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249
% rvm gemset use rails2
Now using gemset 'rails2'
% rvm gemdir
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails2

もしくは"rvm use"を使用する際に,使用するRubyの後ろに"@GemSets名"を指定することで,使用するGemSetsを指定することができます。

% rvm use 1.8.7-p249@rails2
Using ruby 1.8.7 p249 with gemset rails2

また,"rvm use"で使用するRubyを指定するときに"--create"オプションを指定することで新しいGemSetsを作成し,使用することもできます。

% rvm --create use 1.8.7-p249@rails3
Using ruby 1.8.7 p249 with gemset rails3
% rvm gemset list
gemsets : for ruby-1.8.7-p249 (found in /Users/takkanm/.rvm/gems/)
global
rails2
rails3

使用するGemSetsを変更すると,"rvm gemdir"の出力と環境変数$GEM_PATH, $GEM_DIRの内容が変更されます。

% rvm use 1.8.7-p249@rails2
Using ruby 1.8.7 p249 with gemset rails2
% rvm gemdir
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails2
% echo $GEM_PATH
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails2:/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@global
% echo $GEM_HOME
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails2
% rvm use 1.8.7-p249@rails3
Using ruby 1.8.7 p249 with gemset rails3
% rvm gemdir
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails3
% echo $GEM_PATH
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails3:/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@global
% echo $GEM_HOME
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails3

Rails2とRails3の共存

それでは,作成したGemSetsにRubyGemsをインストールしてみましょう。今回は,Ruby on Railsの2系と3系を1つの環境で使いわけるような環境を作成してみます。

最近,Ruby on Railsの時期バージョンであるRails3のベータがリリースされましたが,今までRails2が入っている環境にRails3をインストールすると Rails2を呼びだすことができなくなってしまいます。そこで,GemSetsを使いRails2とRails3を共存できるようにしてみます。

まず,作成したGemSets"rails2"には,Rails2系をインストールしてみます。

% rvm use 1.8.7-p249@rails2
Using ruby 1.8.7 p249 with gemset rails2
% gem install rails
Successfully installed activesupport-2.3.5
Successfully installed activerecord-2.3.5
Successfully installed rack-1.0.1
Successfully installed actionpack-2.3.5
Successfully installed actionmailer-2.3.5
Successfully installed activeresource-2.3.5
Successfully installed rails-2.3.5
7 gems installed
% rails -v
Rails 2.3.5
% which rails
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails2/bin/rails

次に,"rails3"というGemSetsに切り替えて,Rails3をインストールします。

% rvm use 1.8.7-p249@rails3
Using ruby 1.8.7 p249 with gemset rails3
% gem install rails3b
Successfully installed activesupport-2.3.5
Successfully installed mime-types-1.16
Successfully installed polyglot-0.3.1
Successfully installed treetop-1.4.5
Successfully installed mail-2.1.5.3
Successfully installed text-hyphen-1.0.0
Successfully installed text-format-1.0.0
Successfully installed rack-1.1.0
Successfully installed rack-test-0.5.3
Successfully installed rack-mount-0.4.7
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.5
Successfully installed i18n-0.3.7
Successfully installed tzinfo-0.3.19
Successfully installed builder-2.1.2
Successfully installed memcache-client-1.7.8
Successfully installed bundler-0.9.21
Successfully installed thor-0.13.4
Successfully installed rails3b-3.0.1
19 gems installed
% gem install rails --pre
Successfully installed activesupport-3.0.0.beta3
Successfully installed activemodel-3.0.0.beta3
Successfully installed rack-mount-0.6.3
Successfully installed actionpack-3.0.0.beta3
Successfully installed arel-0.3.3
Successfully installed activerecord-3.0.0.beta3
Successfully installed activeresource-3.0.0.beta3
Successfully installed mail-2.2.0
Successfully installed actionmailer-3.0.0.beta3
Successfully installed railties-3.0.0.beta3
Successfully installed rails-3.0.0.beta3
11 gems installed
% rails -v
Rails 3.0.0.beta3
% which rails
/Users/takkanm/.rvm/gems/ruby-1.8.7-p249@rails3/bin/rails

ここで,使うGemSetsを"rails2"に戻すとRails2を使用できます。

% rvm use 1.8.7-p249@rails2
Using ruby 1.8.7 p249 with gemset rails2
% rails -v
Rails 2.3.5

おわりに

今回は,RVMを使っての実行や,RubyGemsの管理を紹介しました。

RVMは,開発が始まってまだ日が浅く,若干ドラスティックに仕様が変わったときもありますが,とても強力なツールだと私は考えています。今回紹介しきれませんでしたが,RVMには以下のような機能もあります。

  • 複数のRubyでRakeタスクを実行する
  • 複数のRuby でベンチマークをとる
  • 複数のRubyでプロファイルをとる
  • GemSetsのインポート/エクスポート

RVM は英語ではありますがドキュメントがしっかししているので,http://rvm.beginrescueend.com/を確認してみましょう。

ぜひRVMを使って,たのしいRuby Lifeをエンジョイしてください。

著者プロフィール

三村益隆(みむらみつたか)

(株)永和システムマネジメントサービスプロバイディング事業部所属。Asakusa.rb。お仕事では,Linuxのカーネル開発やC++での開発等Ruby以外の仕事が多いが,Ruby好き。

bloghttp://d.hatena.ne.jp/takkan_m
Twitterhttp://twitter.com/takkanm