オープンソースのプロジェクトの動作確認するときとかに、いつも使っている開発用のgemを入れたいんだけどGemfileは更新したくないってことない?僕の場合、関係ないファイルを汚しておくとうっかりコミットしてしまうことがあるので避けたいと思ってる。
使いたいツールがGemfileに書いてないと困るときが結構あって、例えばPryが入ってないと気持ち悪いとかそういう系のときに困る。デバッグにpry-debugger
とか使うし。
で、調べたら一応なんとかする方法があった。
Ruby - Gemfileにないgemを使いたい - Qiita
BundlerはBUNDLE_GEMFILE
っていう環境変数を読むようになっていて、この環境変数が設定されていなければGemfile
、設定されている場合はそのファイルを使うらしい。
このエントリではBUNDLE_GEMFILE
にGemfile.local
をセットすることで追加gemを使えるようにしている。
環境変数の設定は普通にこれ。
% export BUNDLE_GEMFILE="Gemfile.local"
Gemfile.local
はこう。
eval_gemfile "Gemfile"
gem "pry"
gem "pry-debugger"
実際この方法でここに書いたgemを使えるようになった。yay!
ちょっとだけマシにする
アプリケーションごとに普通のGemfile
とGemfile.local
を使い分けることになると、いちいち手書きで環境変数を変えるのは面倒だ。
なので.zshrc
に環境変数の有効無効を切り替えるための関数を作っておいた。
function use_local(){
export BUNDLE_GEMFILE="Gemfile.local"
}
function unuse_local(){
unset BUNDLE_GEMFILE
}
まあ、名前はなんでもいいよね。
本当はこうしたい
Gemfile.localがあればそちらを優先、なければGemfile
という風にしたい。さっきのQiitaのエントリに載ってたリンクによると一度Bundler開発者でも議論があった上でこの機能は導入されていないらしい。
Gemfile.local
があれば優先するっていう、bundler-gemfile-localみたいな拡張がないかなー。または作ってしまおうかなーという感じ。