Bundler 2.0.0.devを使ってみる

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 などウォッチしてみると良いと思う。

github.com