経緯
Gemfileのなかでrailsとcapistranoの両方を書いていたら、capコマンドを実行するたびにrailsを読み込んで無駄じゃないのか?せっかくbinstubしたスクリプトのなかでGemfileを指定してるんだから、それをcapistrano用に分割すればcapコマンドがもうちょっと早く起動するんじゃないか?と思った次第。
結論
binstubしたスクリプトのなかではbundler/setup
を使って$LOAD_PATH
をシステムのものからbundlerでインストールしたものに置き換えたうえで、Gem.bin_path
を使って必要な実行ファイルとライブラリを読み込み、実行している。
つまりすでにコマンドの実行に必要なgemのみを読み込むようになっているので、特定のコマンドのためにGemfileを分けるのは効果がない。
もしかしたらGemfile.lockに挙げられているgemがものすごく多ければパスの置換に時間がかかるかもしれないけど、普段はそこまでの効果はなさそう。
おまけ: Gemfileを分割する方法
コミットログをみてもらうのが一番わかりやすい。
- Gemfile.capistranoをGemfileで読み込んでいるので、インストールは
bundle install
だけでいい bundle binstub
で生成したスクリプト中のBUNDLE_GEMFILE
をGemfile.capistrano
用に置き換えたGemfile.capistrano.lock
ははじめてbin/cap install
を実行したタイミングで生成された