bundle install で、gem install のオプションを指定する方法

76de73a1dae79a86bb99a813bd8e8e0a?s=30&d=http%3a%2f%2fkaeruspoon%.net2f2014%2fimages%2fno imageTsukasa OISHI

Rails3からgemパッケージの管理はBundlerで行うようになっています。
Bundlerはとても便利なのですが、個別のgemパッケージのインストール時にオプションを渡す方法がわからなくて、ちょっと苦労してしまいました。
今よく読んでみるとドキュメントにちゃんと書いてあったので、やっぱりドキュメントはちゃんと読んだほうがいいですね(ソースをずっと読んでました)。
以下に経緯と解決法を書いておきます。

古いバージョンのRMagickをBundlerを使ってインストールしようとしたのですが、permission errorが発生してしまいました。

Permission denied - /usr/local/ruby/share/RMagick

上記のディレクトリにドキュメントをコピーしようとしているのですが、ローカルユーザはそのディレクトリへの書き込み権限がありません。
ドキュメントなんて特にいらないので、gem install するときなら、

sudo gem install rmagick -- --disable-htmldoc

とするだけなのですが、Bundlerでこのオプションを指定するには、

bundle config build.rmgick --disable-htmldoc

と指定した後に、bundle install を実行します。
デプロイのことやチームで開発している場合は、Railsルートの下の.bundle/config に以下の行を追加してあげるといいでしょう。

BUNDLE_BUILD__RMAGICK: --disable-htmldoc

Bundlerの各設定値は、Bundler.settingsで取得することができます。上記のRMagickの設定は

$ rails c
> Bundler.settings["build.rmagick"]
=> "--disable-htmldoc"

というように、build.rmagickというキーに設定されています。
Bundler.settingsの設定内容はどこに保持されているかというと、

 1. Railsルート下の .bundle/config
 2. 環境変数
 3. ユーザのホームディレクトリ下の .bundle/config

のいずれかです。上記の順番にキーを探して、見つかったものが採用されます。
設定ファイル内でのキーは以下のようなルールになります。

 1. 頭に BUNDLE_ をつける
 2. .__ に変換する (アンダーバーが2つであることに注意)

なので、build.rmagickは、BUNDLE_BUILD__RMAGICKとなるわけです。