それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Rvmを使ったRubyのインストール管理方法で便利なものをまとめ。

RVMは自分のユーザー環境に、独自のRuby環境を作ることができる。homebrewのように、/usr/localですらない。/home/takuya/.rvmに、バージョンが違うRubyを大量に飼育できるのです。


RVMを使えば、opensslなどの依存モジュールもRVM側だけで管理できる。
つまり、homebrew に頼らなくてもRVMさえあればRubyの環境を維持管理することが出来る

rvmさえあれば、rubyで困ることが減る。

rubyでハマる色々な罠

ruby 1.9の罠。
ruby のビルドの違いの罠
gemsの罠
gemsのバージョン地獄
gems関連はbundler で解決!!、Rubyそのものは、RVMでそこそこ解決する。

rvmを使ってるよ!っていう人は

  • rvm alias機能
  • rvm コマンド補完機能

あたりを読むと嬉しい気分になれると思います。

RVMのインストール

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
. ~/.bash_profile

これで自分のユーザー環境にRVMの準備ができる

依存パッケージのインストール

RVMでインストール出来るビルドパッケージを調べる。

takuya@air:~$ rvm pkg list

Usage:
  'rvm pkg {install,uninstall} {readline,iconv,curl,openssl,zlib,autoconf,ncurses,pkgconfig,gettext,glib,mono,llvm,libxml2,libxslt,libyaml}'
    'ree_dependencies' installs zlib, ncurses, readline, openssl and iconv in this order.
    still need to add ' --with-readline-dir=$rvm_usr_path --with-iconv-dir=$rvm_usr_path --with-zlib-dir=$rvm_usr_path --with-openssl-dir=$rvm_usr_path' to 'rvm install ree’

以上が、rvmがインストール出来るパッケージ。Rubyのインストールに必要なパッケージはRVMが提供してくれる。便利。

まとめて入れるよ。

rvm pkg install readline
rvm pkg install iconv
rvm pkg install openssl
#…etc

って、逐次書くのものめんどくさいわ。

まとめて、ループ処理しよう
for i in autoconf readline openssl iconv zlib libxml2 libxslt libyaml ;do rvm pkg install $i ; done;#これでOK

依存パッケージを使ったRubyのインストール

じゃぁ、早速、いままでの依存モジュールを使ってRuby1.9を入れてみようか。

rvm install ruby-1.9.3 \
--with-libyaml-dir=$rvm_path/usr \
--with-libxml2-dir=$rvm_path/usr \
--with-libxslt-dir=$rvm_path/usr \
--with-readline-dir=$rvm_path/usr \
--with-iconv-dir=$rvm_path/usr \
--with-zlib-dir=$rvm_path/usr \
--with-openssl-dir=$rvm_path/usr

読みやすく改行入れてるから、一行で書いたものがこれ。

rvm install ruby-1.9.3 --with-libyaml-dir=$rvm_path/usr --with-libxml2-dir=$rvm_path/usr --with-libxslt-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-iconv-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr

このように使う。*1

RVMを使ったRuby切り替え

rvmを使って、一時的にRubyを切り替えることが出来る。

rvm use system #OS標準を使う
rvm use ruby-1.8
rvm use ruby-1.9.3
rvm use ruby-head

これで、いまのシェルは、rvm指定したRubyになる。

指定したRubyをデフォルトにするには

--defaultをつけると、指定したRubyが既定になる。

rvm use system --default #システムを標準で使う

RVMにインストール済みのRubyの一覧は

rvm list で、インストール済みで、使用可能な、Rubyの一覧が見られる。

takuya@air:~$ rvm list

rvm rubies

   jruby-1.6.4 [ x86_64 ]
   macruby-0.10 [ x86_64 ]
=> ruby-1.8.7-p352 [ i686 ]
   ruby-1.9.3-rc1 [ x86_64 ]

RVMでインストール可能なRubyの一覧は

rvm list knownでインストール可能なRubyの一覧が取得できる

takuya@air:~$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3-preview1
[ruby-]1.9.3[-rc1]
[ruby-]1.9.3-head
ruby-head

# GoRuby
goruby

# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.6.1
jruby-1.6.2
jruby-1.6.3
jruby[-1.6.4]
jruby-head

# Rubinius
rbx-1.0.1
rbx-1.1.1
rbx-1.2.3
rbx-1.2.4
rbx[-head]
rbx-2.0.0pre

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2011.03]
ree-1.8.6-head
ree-1.8.7-head

# Kiji
kiji

# MagLev
maglev[-26852]
maglev-head

# Mac OS X Snow Leopard Only
macruby[-0.10]
macruby-nightly
macruby-head

# IronRuby -- Not implemented yet.
ironruby-0.9.3
ironruby-1.0-rc2
ironruby-head

いっぱいあって困るね。

RVMでインストール可能なRuby一覧を更新する

rvm get

たとえば安定版を追いかけるなら

rvm get stable

最新版を追いかけるなら

rvm get latest


RVMのコマンド補完

.bashrcに次を付加する。すると rvmコマンドが補完される。

takuya@air:~/Desktop$ rvm <TAB><TAB>
debug            gemset           jruby-1.6.4      package          ruby             srcdir           use
default          help             list             rake             ruby-1.8.7-p352  system           version
fetch            implode          macruby-0.10     reload           ruby-1.9.3-rc1   tests            
gem              info             monitor          remove           snapshot         uninstall        
gemdir           install          notes            reset            specs            update          

***.bashrcに追加するもの以下。

>||
[[ -r $rvm_path/scripts/completion ]] && . $rvm_path/scripts/completion

1.8と1.9をもっと手軽に切り分けたい。

1.9系だけでも複数入れてたりすると面倒なので、1.9という名前だけでアクセスしたい

takuya@air:~$ rvm use 1.9
WARN: ruby ruby-1.9 is not installed.
To install do: 'rvm install ruby-1.9'

などとなって不便です。

解決策Aliasを使う
 takuya@air:~$ rvm alias create 1.9 ruby-1.9.3-rc1
 Creating alias 1.9 for ruby-1.9.3-rc1.
 Recording alias 1.9 for ruby-1.9.3-rc1.

1.9とかいたら 1.9.3を指すように指定しました。

 takuya@air:~$ rvm use 1.9
 Using /Users/takuya/.rvm/gems/ruby-1.9.3-rc1
 takuya@air:~$

ね、簡単でしょ



もしreadline が有効にならず、homebrewのreadlineを使うなら、

僕の場合、rvm管理下のreadlineだとうまくいかなった。Macだから?とりあえず、homebrewのreadlineを使ってごまかしてる。

homebrew のライブラリヘッダーのパスを追加しておく。
rvm install 1.8.7 -C "--enable-shared --with-readline-dir=`brew --prefix`
rvm use 1.8.7

→参考そのものズバリなエントリを発見 RVMを用いてreadlineオプションを指定する - kdkk0 の 日記

Macって意外とビルド地獄なんですね。
Linux良く出来てるんだわ・・・

システムデフォルトを使う必要があるときは

RVMで入れたRubyを使用せずにシステムで入れたRubyを使うには,

rvm system

これで標準のRubyが使える

*1:#with-xxx-dir は適当につけけたので。間違ってるかも・・