先日新しくboxを作り直している時に、Vagrantの共有フォルダ内でnative extensionを含むgemをbundle install --path vendor/bundleしたらtext file busyというエラーが出た。どうも共有フォルダを拡張しようとすると起こるらしい。

なので、gemを共有フォルダでないどこかに入れないといけないのだけど、管理がしっかりできる所じゃないと嫌だ。僕みたいなアマプログラマでもgemのver違いで何度か泣いた事がある。

調べたら、rbenv-gemsetというrbenvプラグインが良さそうだったのでインストールしてみた。

rbenv-gemsetって?

gemのインストール先を管理してくれるツール。gemのサンドボックス的な。プロジェクト毎にgemの保管先を変えられるので、グローバルな環境を汚すことが無い。

インストールと使い方メモ

rbenv系のプラグインは全部git cloneで入れているので、gemsetもgit cloneで入れる。

$ git clone git://github.com/jf/rbenv-gemset.git ~/.rbenv/plugins/rbenv-gemset

これで使えるようになった。基本的なコマンドは、

$ rbenv gemset

version 0.5.8
rbenv-gemset [command] [options] 

possible commands are:
  active // 今現在有効になっているgemsetの確認
  create [version] [gemset] // gemsetの作成
  delete [version] [gemset] // gemsetの削除
  file // .rbenv-gemsetsの確認(これ必要か?)
  init [gemset] // どのgemsetを使うか定義する.rbenv-gemsetsの作成
  list // 現在使用できるgemsetの一覧
  version // ばーじょん

For full documentation, see: https://github.com/jf/rbenv-gemset#readme 

シンプル。簡単に説明すると、

  1. まずrbenv gemset create 2.1.5 hogeでhogeという新しいgemset(新しいgem管理先)を作成する。
  2. そしてhogeを利用したいプロジェクトのディレクトリに移動し、rbenv gemset init hogeすると、.rbenv-gemsetsがカレントディレクトリの中に作成される。
  3. この.rbenv-gemsetsの中に使いたいgemsetを書けば、そのgemsetがアクティブになる。initした時に書いた(今回だとhoge)gemsetは既に記述されているので、基本的には特別編集する事はないかな。
  4. この.rbenv-gemsets以下にはhogeにインストールしたgemが利用できる。

と、こんな具合。書いている最中に思ったのだけど、.rbenv-gemsetsの中って2つのgemsetは書けるのだろうか。そして、gemがかぶったらどうなるんだろうか?書けて有効になる場合はインストールとかどうするんだろう?後日、時間があったらテストしてみる。