Ruby apps will now have the BUNDLED WITH declaration in their Gemfile.lock removed after detecting Bundler version|Heroku Dev Center

このアナウンスがあったので、調べてツイートした。ブログにも貼っておく。

アナウンスの内容要約

Gemfile.lock の ‘BUNDLED WITH’ には問題があるから、Heroku では bundler version の決定(v1 or v2)に使った後、‘BUNDLED WITH’ は削除してからデプロイするよとのこと。

Heroku というより heroku-buildpack-ruby の話ね。

heroku-buildpack-ruby の処理

LanguagePack::Ruby#install_bundler_in_app から呼ばれるここで bundler v1 か v2 かを判別。
https://github.com/heroku/heroku-buildpack-ruby/blob/v207/lib/language_pack/helpers/bundler_wrapper.rb#L183-L192

下の LanguagePack::Helpers::BundlerWrapper#detect_bundler_version_and_dir_name! で、v1 なら 1.17.3、v2 なら v2.0.2 だと決定していた。
https://github.com/heroku/heroku-buildpack-ruby/blob/v207/lib/language_pack/helpers/bundler_wrapper.rb#L194-L204

その後の LanguagePack::Ruby#build_bundler で ‘BUNDLED WITH’ ブロックをゴリッと削除。
https://github.com/heroku/heroku-buildpack-ruby/blob/v207/lib/language_pack/ruby.rb#L788-L790

当該 PR

Remove bundler version in Gemfile.lock by schneems · Pull Request #928 · heroku/heroku-buildpack-ruby