さて! Bundler 2 がリリースされたという話を聞いたことでしょう! Bundler 2 を試してみたい場合は、このガイドがお役に立ちます。
Bundler 2 は、前のバージョンである 1.17 とほとんど同じです。大きな変更点は、Bundler が最低限 Ruby 2.3.0 および RubyGems 2.5.0 を必要とするようになったことです。
Bundler 2 にアップグレードする前に、適切な Ruby と RubyGems があることを確認してください。Ruby 2.3.0 以上を使用する必要があり、RubyGems 2.5.0 以上が必要です。
ruby --version
を実行して Ruby のバージョンを確認でき、gem --version
を実行して RubyGems のバージョンを確認できます。Ruby をアップグレードする必要がある場合は、Ruby バージョンマネージャーの指示に従ってください。RubyGems をアップグレードする必要がある場合は、gem update --system
を実行してください。
準備はできましたか? Ruby と RubyGems のバージョンは十分に新しいですか? 素晴らしい。続けてください。
Bundler 2 にアップグレードする最初のステップは、Bundler 2 gem をインストールすることです。通常の方法でインストールするには、gem install bundler
を実行すると、RubyGems は最新バージョンの Bundler をインストールします。
Bundler 2 をインストールしたら、Bundler がアプリケーションの Gemfile.lock
に基づいてバージョン 1 とバージョン 2 を自動的に切り替えることを知っておく必要があります。ロックファイルが Bundler 1 によって作成された場合、コマンドは Bundler 1 によって実行されます。ロックファイルが Bundler 2 によって作成された場合、コマンドは Bundler 2 によって実行されます。
以下は、Bundler 1.17.1 で作成された Gemfile.lock の例です。
GEM
remote: https://rubygems.org/
specs:
rack (2.2.4)
PLATFORMS
ruby
DEPENDENCIES
rack
BUNDLED WITH
1.17.1
BUNDLED WITH
セクションの Bundler のバージョンは、どのバージョンの Bundler を実行する必要があるかを判断するために Bundler によって読み取られます。上記のロックファイルの例を使用すると、ここに見られるように、Bundler 1 が使用されます。
$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
1.17.1
$ bundle version
Bundler version 1.17.1
Gemfile が Bundler 2 によって作成された場合、または開発者によって Bundler 1 から Bundler 2 に手動でアップグレードされた場合、コマンドは最新のインストールされた Bundler 2 によって実行されます。以下は、それがどのように見えるかの例です。
$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
2.0.0
$ bundle version
Bundler version 2.0.0
Bundler がアプリケーションの外部で使用される場合、インストールされている最新バージョンが常に使用されます。
$ ls -a
. ..
$ bundle version
Bundler version 2.0.0
既存のアプリケーションは Bundler 1 を引き続き使用します。Bundler は、ユーザーが選択するまで、アプリケーションを新しいメジャーバージョンに変更することはありません。アプリケーションの準備ができたら、bundle update --bundler
を実行して、アプリケーションをインストール済みの最新バージョンの Bundler にアップグレードできます。
アップグレードする前に Gemfile.lock をコミットすることをお勧めします。そうすれば、何か問題が発生した場合やうまくいかない場合でも、常に前のロックファイルに戻って Bundler 1 を使用することができます。
bundle init
、rails new
などの方法で新しいアプリケーションを作成すると、アプリケーションは現在インストールされている最新バージョンの Bundler を使用します。Bundler 2 がインストールされている場合、アプリケーションは Bundler 2 にロックされます。これは、ロックファイルを読み取り、BUNDLED WITH
というセクションを探すことで確認できます。
多くの Ruby 開発者は、自分のマシンに複数のアプリケーションを持っています。1 台のマシン上のすべてのアプリケーションに Bundler 1 または Bundler 2 のいずれかを排他的に使用するように強制した場合、すべての人に大きな苦痛を引き起こすでしょう。
バージョン切り替えにより、すべての人が、一部のアプリケーションで Bundler 1 を使用し、他のアプリケーションで Bundler 2 を使用することを、同じマシン上で同時に行うことができます。各アプリケーションは、特定のアプリケーションをアップグレードすることが最も理にかなう場合に、いつでも Bundler 2 にアップグレードできます。
Bundler 2 が必要なアプリケーションで Bundler 1 を使用しようとすると、Bundler 2 をインストールする必要があることを説明するエラーメッセージが表示されます。gem install bundler
を実行すると、動作するはずです。
Bundler 1 が必要なアプリケーションで Bundler 2 を使用しようとした場合、Bundler 1 がまったくインストールされていないと、Bundler 1 をインストールするように求めるエラーメッセージが表示されます。gem install bundler -v "~>1.0"
を実行して Bundler の最新の 1.x バージョンをインストールし、コマンドをもう一度試してください。
Bundler 2 には、Gemfile を Bundler 1 にダウングレードする方法はありません。代わりに、アプリケーションをアップグレードする前に、Gemfile
と Gemfile.lock
をチェックインすることをお勧めします。そうすれば、何か問題が発生した場合でも、前のコミットに戻って Bundler 1 を使用することができます。
大変申し訳ございません。当社のトラブルシューティングガイドにアクセスして、問題をできるだけ早く解決できるようにチケットを開いてください。
Bundler 2 には、以下の変更が含まれています。
Gemfile
の github:
ショートカットは http
の代わりに https
を使用するはい、できます! Heroku チームは、公式の Ruby ビルドパックを Bundler 2 をサポートするようにアップグレードしました。詳細については、Heroku の Bundler バージョンに関する記事を参照してください。