例えばこんな Gemfile を書いていて push したら、CI でpry-byebug は Ruby 2.0 以降でないと動かないと怒られた。
ローカルでは、2.1.2だから気が付かなかった。
そこでこんなふうに修正して開発してた。
そしたらある日
binding.pry
を消し忘れて push してしまいテストが終わらなかった。
CI が当たり前となった現在、こういう Gemfile は無駄が多いんじゃなかろうか。
pry-byebug などのデバッグツールはテストの時に必須なのではないので、CI時には無視したい。
おそらくそのための機能が group なんだろうけど、環境に応じて
bundle install
のオプションをあれこれしなければいけないのはちょっとめんどくさい。できれば
bundle install
と path などの使い慣れたオプションだけで完結させたい。
で、話変わって Redmine には
Gemfile.local という仕組みがあって、Redmine の実行と直接関係ない gem を記述する方法が用意されている。
Redmineのインストール — Redmine Guide 日本語訳 によると、Redmine本体は使用しないgem(例: mongrel, fcgi)もロードしたい場合のための仕組みらしい。
せっかくなので、Redmine 以外の開発でも導入してみよう。
こんな感じで Gemfile と Gemfile.local を作り、.gitignore に Gemfile.local を指定する。
CI時に不要な gem がダウンロードも読み込みもされることはないし、ローカルの開発ではデバッグできる。
bundle install
する時に余計なオプションもいらない。
大体、デバッグツールなどは使い慣れたものが個人個人にあって、誰かの設定に左右されるべきものではない。
ただし、当然デメリットもあってコレを許すということは個人個人の開発環境で差異が出ることを意味する。
なので、余計なトラブルが起こる可能性も多少あがる。
まあ、それは使う使わないの選択の問題であって、仕組みとしてはあったほうが便利だと思う。