わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

chrubyインストールと使い方

7月1日のハッカソンではrubyを使ってみたいな、と思っていた。
そこでPCに初めから入ってるrubyのバージョンを調べてみたら

$ ruby --version
  ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

せめて1.9にしたいなと思ったけど、もとから入ってるrubyに上書きする形でバージョンアップはしたくなかったので、
rubyのバージョン管理が楽になるツールを探してみた。

するとrbenvとかrvmとかがあるらしいとわかったけど、
「設定がいろいろめんどくさくて、もういやだ!!」
みたいな記事を見つけたりもして、その中でchrubyなるものを見つけたので、
それを使ってみることにした。

すでに日本語で書かれたブログ記事があるけど、自分のためにも書いておく。

chrubyのインストール

homebrewで簡単に入った。

$ brew install chruby

で.bashrcとか.zshprofileとかに

source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh

を追加して、再読み込みする。これでchrubyが使えるようになる。

ただし、大事なことがあってchrubyをインストールするだけで他バージョンのrubyをインストールできる訳ではない。
rubyは自分で別バージョンをインストールする必要がある。
ruby-installruby-buildのようにいろんなバージョンのrubyのインストール補助をしてくれるソフトが便利だと思う。

chrubyのデフォルトでは/opt/rubiesまたは~/.rubies配下にインストールされたrubyを認識するようになっている。
rubyのインストール先は自分で設定してchrubyに教えてやることもできる(RUBIES変数をいじればよい)けど、面倒なら/opt/rubies~/.rubies配下にインストールするのが手っ取り早い。

chrubyの使い方

既に/opt/rubies~/.rubiesrubyをインストールしていれば、現在利用できるruby一覧が次のコマンドで確認できる。

$ chruby
      ruby-1.9.3-p448
      ruby-2.0.0-p247

この中から自分が使いたいrubyを選ぶ。
たとえばこんな感じ

$ chruby 1.9.3

選んでからruby --versionで確認してみたらちゃんと変更されているはず。

ちなみに初めからOSにインストールされていたrubyに戻したいときは

$ chruby system

を実行すれば、もとにもどる。

chrubyの次回アップデートで期待されること

~/.rubies/opt/rubiesrubyをインストールした直後、同じターミナルでchrubyとしても、インストールしたrubyが見つからなかった。
でも新規ウィンドウで開いてchrubyを実行するとインストールされたrubyがリスト表示される。
このことはissueにあがっていて次期バージョンで改善してくれるらしい
待ち遠しいなぁ。

その他:ruby-build VS ruby-install

rubyのインストーラーはruby-buildruby-installのどっちがいいんだろうと思って結局どっちもhomebrewでインストールしてみた。
先にruby-buildで1.9と2.0をインストールしてみた(特にエラーも起きなかった)から、ruby-installで1.8を入れてみようと思ったらエラーをはいてinstallできなかった。

?と思ってruby-buildで同じく1.8をインストールしようとすると、次のようなエラーをはいた。

$ ruby-build 1.8.7-p374 ~/.rubies/ruby-1.8.7-p374

ERROR: This package must be compiled with GCC, but ruby-build couldn't
find a suitable `gcc` executable on your system. Please install GCC
and try again.

DETAILS: Apple no longer includes the official GCC compiler with Xcode
as of version 4.2. Instead, the `gcc` executable is a symlink to
`llvm-gcc`, a modified version of GCC which outputs LLVM bytecode.

For most programs the `llvm-gcc` compiler works fine. However,
versions of Ruby older than 1.9.3-p125 are incompatible with
`llvm-gcc`. To build older versions of Ruby you must have the official
GCC compiler installed on your system.

TO FIX THE PROBLEM: Install Homebrew's apple-gcc42 package with this
command: brew tap homebrew/dupes ; brew install apple-gcc42

You will need to install the official GCC compiler to build older
versions of Ruby even if you have installed Apple's Command Line Tools
for Xcode package. The Command Line Tools for Xcode package only
includes `llvm-gcc`.

BUILD FAILED

要するに私が使ってるPCにはruby1.8に必要なバージョンのgccコンパイラが入ってない。
ruby-installでは

(いろいろエラーはいて・・・)
make[1]: *** [stubs.o] Error 1
make: *** [all] Error 1
!!! Compiling ruby 1.8.7-p371 failed!

で、別にエラーちゃんと読んだらわかるんだろうけど、ruby-buildの方がruby1.8のインストールに関しては対応策が表示されてわかりやすかった。

一時ファイル保存先は ruby-installrubyをインストールするとき~/src
ruby-buildでは/var/folders/なんか長いハッシュ/ruby-build・・・みたいな感じになってた。
一時フォルダはruby-installの方がわかりやすい気がする。

またそれぞれのソフトを作った人をみると
ruby-install: postmodern(chrubyの作者)
ruby-build: Sam Stephenson(rbenvの作者)
だった。
chrubyを作ったのがruby-installの作者と同じで、ruby-installのデフォルトrubyインストール先が~/.rubiesであることを考えると、ruby-installの方が食い合わせはよいのかもしれない。
ruby-buildrbenvなしで使おうとするとrubyのインストール先をフルパスで指定しなきゃ行けないのが結構めんどくさかったりする。

というわけで、結局ruby1.8のインストールもruby-installの問題ではなくgccコンパイラのせいだったわけだし、chrubyを使うのであればruby-installで良いんじゃないかなぁ。
開発が始まったのはruby-buildの方が先でruby-installの方が新しいので、情報はruby-buildの方が多い気がする。でもどっちのソフトも元々できることがそんなに多くないことを思うと、どっちを選んだからってすごい差が出るようにも思えない。元々使っていたのがrbenvの人ならruby-buildのままでいいと思う。

参考リンク