gem 'byebug'
の1行を追加して、bundle install して、そのあと Gemfile を間違ってコミットしないように気をつけながら、git commit でファイルを1つずつ指定したりとかやってたんだけど、いい加減イライラしてきたので、サクッとできるようにしてみた。
方法その1
最初、bundle config でひょっとしたらできるのかな、と思ったんだけど無理ぽだったので、あきらめて雑なシェル関数を作って、.zshrc (.bashrc) に追加することにした。
bundol () {if [ -e Gemfile ]; thenmkdir -p /tmp/$(pwd)sed -e "s|gemspec.*|gemspec path: \"$(pwd)\"|" Gemfile > /tmp/$(pwd)/Gemfileecho 'gem "byebug"' >> /tmp/$(pwd)/Gemfilebundle --gemfile=/tmp/$(pwd)/Gemfileelseecho 'Gemfile is not found' 1>&2fi}be () {if [ -e /tmp/$(pwd)/Gemfile ]; thenBUNDLE_GEMFILE=/tmp/$(pwd)/Gemfile RUBYOPT="-r byebug" bundle exec $@elsebundle exec $@fi}
bundol (ぶんどる) って打つと、Gemfile を /tmp/$(pwd)/Gemfile にコピーして、gem 'byebug' を追加して、bundle --gemfile=/tmp/$(pwd)/Gemfile って感じで、bundle install する。
gem の場合は、Gemfile に gemspec の行が大体あるので、gemspec の行を gemspec path: $(pwd) ってかんじで置き換えている(雑だ)
bundle exec の代わりに、be と打つと、/tmp/$(pwd)/Gemfile があれば BUNDLE_GEMFILE 環境変数で指定しつつ bundle exec してくれるようにしている。
・・・雑だ
方法その2
Rぺこ氏に昔似たようなことやったと教えてもらったので、その方法の発展版。
Rぺこ氏は、tapp を丸ごとディレクトリコピーして ruby の lib に入れていたけれど、byebug だと依存 gem があってそれもやろうとすると辛いので、gem install で ruby の site_dir 以下に入れるようにして、
sitedir=$(ruby -rrbconfig -e 'puts RbConfig.const_get(:CONFIG)["sitedir"]') gem install byebug --install-dir $sitedirそこに
export RUBYOPT="$(\ls -d ${sitedir}/gems/*/lib/ | xargs -I{} echo -n \ \-I {}) -r byebug"ってかんじで、-I オプションで $LOAD_PATH 追加しつつ、-r オプションで require するようにした。
依存 gem 全部に LOAD_PATH 通すために、\ls -d うんちゃらとかやってる。※ ここもう少しうまくできないかなぁ。
追記:これでできたと思ったんだけど、$sitedir 以下の gem と bundler が入れた gem の両方が読み込まれて、定数二重定義 warning が出てしまうなぁ
おわりに
bundle config でできるようになるのが理想系だけど、とりあえずは bundol で頑張ろうと思う。いつかプルリク送るかもしれない。