Rails の master で Bundler 2 を許可するようになった ので、手元の Rails アプリケーションで Bundler 2 を使ってみることにした。
RubyGems にはまだ Bundler 2 は公開されていないため、ソースコードからインストールする必要があるので、その手順を記しておく (もっとクールなやり方あるかもだけど、他のアプローチは分からない) 。
bundler/bundler の master のソースコードにある version.rb のバージョンを 2.0.0.dev
にする。Bundler の実装としてメジャーバージョンが2であれば、Bundler.feature_flag.bundler_2_mode?
の値で true
を返して Bundler 2 モードなるので、それを有効にするためとなる。
% git diff diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index dad4a88a2..386782023 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -7,7 +7,7 @@ module Bundler # We're doing this because we might write tests that deal # with other versions of bundler and we are unsure how to # handle this better. - VERSION = "1.15.1" unless defined?(::Bundler::VERSION) + VERSION = "2.0.0.dev" unless defined?(::Bundler::VERSION) def self.overwrite_loaded_gem_version begin
この変更を加えたら rake install
を実行する。
% rake install (snip) bundler 2.0.0.dev built to pkg/bundler-2.0.0.dev.gem. bundler (2.0.0.dev) installed.
ソースコードへの変更で指定したバージョンが表示されれば成功。
% bundle -v Bundler version 2.0.0.dev
Bundler 2 でのインパクトが大きい変更のひとつと思っているのは Gemfile と Gemfile.lock といったファイル名が非推奨となり、それぞれ gems.rb と gems.locked というファイル名になる点。Bundler 2 では非推奨警告が出るにとどまり、Gemfile と Gemfile.lock がなくなるのは Bundler 3 のタイミングの模様。
% bundle install DEPRECATION: Gemfile and Gemfile.lock are deprecated and have been replaced with gems.rb and gems.locked. Please use them instead.
Ruby のサポートについても、Ruby 2.3 以上にしようかなど話が進んでたりしている (良い話) 。
他にも bundle update
は GEM 名の指定がない場合、つまり Bundler 1 系での振る舞いとなるすべての Gem を bundle update したい場合は bundle update --all
とするように変更されたり、bundle install
でのデフォルトのインストールパスが .bundle/gems に変更されたりなどの Breaking Changes がある。
細かいところでは bundle
の挙動が bundle install
ではなく、サブコマンド一覧の表示になったり違和感のない動きになったりしている。
そのほか、Bundler 2 の今後の動向については RFC などウォッチしてみると良いと思う。