Edited at

rbenv でインストールした複数の Ruby の gems ディレクトリを共有化する

More than 3 years have passed since last update.

rbenv でインストールした Ruby の gems ディレクトリは、 Ruby のバージョンごとに分かれている。たとえば、 Ruby 2.1.{1,2} をインストールすると以下のように2つのディレクトリができる:


  • ~/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0

  • ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0

パスに現れるひとつめのバージョン番号は Ruby 自体のバージョンを表し、ふたつめのバージョン番号は gem の互換性のあるバージョンを表す。いずれも2.1.0になっているのは、 Ruby 2.1.0 向けにビルドされた gem が Ruby 2.1.{1,2} でもロードできるという意味である。

互換バージョンが一致するなら、 gems ディレクトリを共有しても問題はない。分かれているのはディスクスペースの無駄であるし、 Ruby のバージョンを上げるごとに gem をインストールし直す手間もかかる。

rbenv のプラグイン rbenv-communal-gems を使うと、 rbenv でインストールされた Ruby の gems ディレクトリを共有化することができる。

# インストール

mkdir -p ~/.rbenv/plugins
git clone https://github.com/tpope/rbenv-communal-gems ~/.rbenv/plugins/rbenv-communal-gems

# 実行
rbenv communize --all

実行すると ~/.rbenv/versions/*/lib/ruby/gems/rm -rf され、 ~/.rbenv/gems/ へのシンボリックリンクで置き換えられる。

なお、 rbenv-communal-gems を使うと環境変数 GEM_HOME が無視されるようになるので注意:Ruby - rbenv-communal-gems を使うと GEM_HOME が無視される - Qiita