経緯
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を実行したタイミングで生成された