PIYO - Tech & Life -

自分の環境だけで特定のgemを使う方法

Bundler gem Ruby

オープンソースのプロジェクトの動作確認するときとかに、いつも使っている開発用のgemを入れたいんだけどGemfileは更新したくないってことない?僕の場合、関係ないファイルを汚しておくとうっかりコミットしてしまうことがあるので避けたいと思ってる。

使いたいツールがGemfileに書いてないと困るときが結構あって、例えばPryが入ってないと気持ち悪いとかそういう系のときに困る。デバッグにpry-debuggerとか使うし。

で、調べたら一応なんとかする方法があった。

Ruby - Gemfileにないgemを使いたい - Qiita

BundlerはBUNDLE_GEMFILEっていう環境変数を読むようになっていて、この環境変数が設定されていなければGemfile、設定されている場合はそのファイルを使うらしい。

このエントリではBUNDLE_GEMFILEGemfile.localをセットすることで追加gemを使えるようにしている。

環境変数の設定は普通にこれ。

%  export BUNDLE_GEMFILE="Gemfile.local"

Gemfile.localはこう。

eval_gemfile "Gemfile"

gem "pry"
gem "pry-debugger"

実際この方法でここに書いたgemを使えるようになった。yay!

ちょっとだけマシにする

アプリケーションごとに普通のGemfileGemfile.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みたいな拡張がないかなー。または作ってしまおうかなーという感じ。