LoginSignup
7
3

More than 3 years have passed since last update.

Bundlerの1系と2系って何が違うの?

Posted at

Bundlerのバージョンの違いについて、本家のBundler 2.0のリリースアナウンスをもとに簡単に調査してみた。

Bundler2系の変更リスト

  • Ruby2.3より前のバージョンのサポートを廃止
  • RubyGem3.0.0より前のバージョンのサポートを廃止
    • こっちだとRubyGems2.5.0以上でなければならないと書いてある...どっちだ?
  • githubからgemのソースを取得する際にhttpsでアクセスするように(1系はhttpだった模様)
  • ErrorとwarningがSTDERRに出力されるように
  • Bundlerバージョンの自動切り替え
    • bundle install実行の際、アプリのGemfile.lockに書かれたBundlerのバージョン(bundle installした時に記録される。BUNDLED WITHセクションに書かれる)に基づいて自動で適切なBundlerのバージョンに切り替える。アプリ内ディレクトリでbundler -vを実行した時はこのバージョンが表示される。

Gemfile.lockに書かれたBundlerのバージョンは例えば以下のような感じ

$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
   1.17.1

以下変更に関連する補足など

Bundler1系でインストールしたアプリを2系に上げたい時

Bundlerのバージョンを上げてbundle installしても、BundlerはGemfile.lockに書かれたBundlerのバージョンでインストールしようとする。
そんな時、アプリのBundlerのバージョンを上げたい場合は、2系をインストールした上で下記を実行する。

※実行前にコミットやバックアップをお忘れなく!

bundle update --bundler

1系から2系へのバージョンアップ時に出力される実行結果

$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
   1.17.3

$ bundle update --bundler
...
Bundle updated!

$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
   2.0.1

なぜRubyGem3.0.0以上のバージョンでなければならないか

変更リストで挙げた「Bundler1系2系の自動切り替え」をスムーズに行うためにRubyGems3系から導入された機能を使っていることが理由らしい。

今後のバージョンアップについて

Bundlerのコア開発チームは1年毎にメジャーバージョンのアップデートを目指している模様。
Bundler開発チームはBundler1系で作られたアプリが動き続けるべきであるという考えのようで、上記「Bundler1系2系の自動切り替え」のような仕組みを今後のBundler3、4のリリースの際も採用する予定とのこと。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3