とある Rails アプリケーションで自分自身が使っている Gemfile 以外の Gemfile の情報を取得したい時にどうすればいいんだろうと Bundler のソースコードを読んでいたら、割と簡単に実現できることがわかった。
require 'bundler'
Bundler::Definition.build('Gemfile', nil, nil).dependencies
上記のコードで Bundler::Dependency なインスタンスが Gemfile に記載されている gem の数だけ得られるので、後は map(&:name)
とかすれば gem の名前だけ手に入る。
後は Bundler 使って Gemfile を読み込んだ後に、手を加えてから、再度 Gemfile を生成というところまでやりたいのだけど、それは無理かなあ。もう少しコードリーディング。