南極の図書館

ペンギンが寝ていた…。

Rubyの複数バージョンを共存させるgem。rvmとpikについて

先日から「Rubyベストプラクティス」を読んでいる。
これは確かに中級者向けで、左手に「プログラミング言語Ruby」を開きつつ読んでいる。(読んでみたら本書内でも勧められていた。)
「対象読者」にある下記の記述は本気である。「メタプログラミングRuby」とは違って(「メタプログラミングRuby」は「自称初心者」こそ読むべき - holyppの日記)、初心者には辛い。私も辛い。

本書はRuby初心者を想定して書かれたものではない。プログラミングを始めたばかりの方にはあまり役に立たないだろう。
(中略)
少なくとも中級レベルの経験があれば、本書を読み進めていくのは楽しいはずだ。必要に応じて調べられるよう、お気に入りの参考書を手元に置いておくとよいだろう。
『プログラミング言語Ruby』(オライリー・ジャパン)か、『プログラミングRuby第2版言語編、ライブラリ編』(オーム社)があればよいだろう。
(中略)
しかし、Ruby1.9こそが進むべき道であり、本書ではRuby1.9にのみ焦点を当てることを選んだ。
本書はレガシーなコードをメンテナンスするときにも役立つはずだが、時代を先取りしたい人たちにこそ向いていると認めざるを得ない。
Ruby1.9こそが進むべき道であり」「時代を先取りしたい人たちにこそ向いていると認めざるを得ない」

どーん。
いやはや、ぐうの音も出ない。
しかし私は1.8を使っており、これを消すのは個人的な影響が大きい。
よろしい、共存だ。


ということで「Rubyベストプラクティス」を読むための準備として、複数バージョンを共存させる。
MacOSX rvmについて
・Windows pikについて
・注意点
(「MacOSX rvmについて」はunix全般かもしれないが私は未確認。)

MacOSX rvmについて

rvmというgemがある。これを使うことで複数バージョンのRubyを管理できる。
wayneeseguin/rvm · GitHub
現在systemに入っている「メイン」のRubyはそのままに、rvmの管理下で複数のRubyをinstallできる。
私の場合はRuby1.8.7をメインに使っており、そこにrvmをinstallする。

$gem install rvm   #すると↓これをターミナルに打ち込むように指示される。
 "bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-latest )"
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-latest )    #打ち込む。
#次は、↓これを~/.bash_profileに書くように言われる。(.zshrcなど、使っているもので良い。)
 [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"   #これを書きこむと、rvmコマンドが使用できる。(※大括弧は半角にして下さい)

ここからrvmの使い方。

$rvm list known   #インストールできるRubyのリストを表示する。
$rvm install 1.9.2   #rvmの管理下に1.9.2をインストール
$rvm list   #下記の通り、rvm管理下のリストが表示される。1.8.7はsystemのものなので表示されない。

rvm rubies
   ruby-1.9.2-p180 [ x86_64 ]

$rvm use 1.9.2 --default   #1.9.2を利用する。--defaultでデフォルトに設定できる。
$ruby -v   #1.9.2 
$rvm system   #1.8.7 systemとは、systemにinstallしてあるRuby。
$ruby -v   #1.8.7 #この例ではsystemに入っているのは1.8.7で、rvmの管理下に1.9.2が入っている。

ちなみに、gemもrubyに依存するので別管理になる。

$rvm use 1.9.2
$ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
$gem list
 *** LOCAL GEMS ***

rake (0.8.7)   #最初はこれだけ。

$rvm system 
$ruby -v 
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10]
$gem -v
1.3.7
$gem list

 *** LOCAL GEMS ***

configuration (1.1.0)
haml (3.0.25)
...
(略)   #もちろん、今まで入れたgemが表示される。

Windows pikについて

環境はXPにruby1.8.7p334 gem1.5.2が入っている状態から。

$gem install pik
$pik_install "C:_Rubypik" #ディレクトリ指定必須。PATHを通すとpikコマンドが使える。
$pik list #現在入ってるRubyを表示する。
$pik list -r #インストールできるRubyを表示する。DevKit,IronRuby,JRubyなど。
$pik install ruby -v 1.9.2-p180 #これが一番新しかったので。
$pik list
* 187: ruby 1.8.7....
   192: ruby 1.9.2p180...

これで pik use 192 または pik use 187 でバージョンの切り替えができるようになる。
gem等も別管理となる。(gem listでそれぞれ違うLOCAL GEMが表示される。)

githubはこちら。
vertiginous/pik · GitHub

注意点

rvmまたはpikでバージョンを変更した場合、その範囲はターミナル内のみとなる。
別でターミナルを開く、または、cmdを開くと、デフォルトで設定されているRubyのバージョンで起動される。
それはrvmならば--default指定したものとなる。pikならばsystemに入っているRubyとなる。



Rubyベストプラクティス」はようやく1章を読み終えたところ。「プログラミング言語Ruby」は常に横に置いている辞書、またはバイブル。