bundlerのプロジェクトでローカルのgemをリポジトリ内に含めて管理する

非公開のgemに依存しているプロジェクトがあって、そのgemの管理方法にちょっと悩んだのでメモ。

最初考えたのは普通にGemfile内でgemへのパスを指定する方法。

gem 'hoge-fuga', '= 1.0.0', path: 'vendor/gems'

これでgemをvendor/gems/hoge-fuga-1.0.0.gemのように配置すればめでたくbundle installできるようになる。 が、bundle isntallすると、vendor/gems/hoge-fuga-1.0.0.gemが消えてしまう。ゴウランガ!

そこでgemをvendor/cache/hoge-fuga-1.0.0.gemに配置して、Gemfileを以下のように編集した。

gem 'hoge-fuga', '~> 1.0.0'

この状態でbundle installすれば、ちゃんとインストールされるし、gemファイルも消えなくなる。

あとは.gitignoreに他のキャシュされてるgemをリポジトリで管理しないように設定すればOK。

vendor/cache
!vendor/cache/hoge-fuga-1.0.0.gem

この方法はちょっとイケてなさを感じるので、いい方法があったら教えてください。