[ruby] gemをユーザー領域にインストールする

CPAN moduleはMac OS Xでもlocal::libをつかってCPANモジュールを入れよう - JPerl Advent Calendar 2009
に習ってlocal::libを用いてユーザー領域にインストールしてます。
今回はrubygemsのモジュールもユーザー領域にインストールしてみたくなったので試してみました。基本的には gem installでsudoしたくないでござる絶対にsudoしたくないでござる+ - きたももんががきたん。と同じです。

rubygemsのインストール

これは別にroot権限でインストールしてもOK。入っているものとして先進みます。

.gemrcの設定

ユーザーインストールできるように設定します。

---
gem: "--user-install"
:update_sources: true
:bulk_threshold: 1000
:sources: 
- http://gems.rubyforge.org/
- http://gemcutter.org
:verbose: true
:backtrace: false
:benchmark: false

最初の一行のgem:〜を追加します。あとはなくても問題ありません。

インストール先の指定

$HOME/.zshrcに下記を追加。

export GEM_HOME=~/extlib/gems

extlib以下はお好きなディレクトリを指定してください。ちなみにCPAN moduleもextlib/perl5にインストールしてます。これを設定しなければ、~/.gem以下にインストールされるので.gem以下で問題ない人は設定しなくても構いません。

PATHの追加

/extlib/gems/binにPATHが通ってなければPATHを通します。$HOME/.zshrcに下記を追加。

export PATH=$PATH:/extlib/gems/bin/

これでこんな感じでユーザー領域にインストールできるようになります。

$ gem install nokogiri

ここまで書いていて、気がついたのですが、そもそも--user-installを指定しなくても、GEM_HOMEでユーザー領域を指定してやればgem installで権限がないと怒られることが無くなるためユーザー領域にインストールできるようになります。逆に、GEM_HOMEを指定しなかった場合は、rootの領域にインストールしようとするため--user-installを指定する必要があります。

余談

自分の今のgem環境を調べるためには

$ gem environment

が便利です。