bundle update
Gemを最新の利用可能なバージョンへ更新します。
文法
bundle update *gems [--source=NAME] [--local]
説明
指定されたGem(指定が無ければ全てのGem)を更新し、
Gemfile.lock
内で指定されている、過去にインストールされた事があるGemを無視(却下)します。
一般的に、マシンを跨いで全く同じGemとバージョンをインストールするには、
bundle install(1)を使用すべきです。
Gemのバージョンを明確に更新するために、bundle update
を使用します。
オプション
全てのGemの更新
引数無しでbundle update
を実行すると、
BundlerはそれまでにインストールされたGemを無視して、
供給元で利用可能となっている全てのGemの最新のバージョンを基に、
再び依存性の解決を行います。
下記のGemfile(5)を例に考えてみます。
source "https://rubygems.org"
gem "rails", "3.0.0.rc"
gem "nokogiri"
始めにbundle install(1)を実行すると、 Bundlerは端から端までの全ての依存性を解決し、 必要となるGemをインストールします。
Fetching source index for https://rubygems.org/
Installing rake (10.0.2)
Installing abstract (1.0.0)
Installing activesupport (3.0.0.rc)
Installing builder (2.1.2)
Installing i18n (0.4.1)
Installing activemodel (3.0.0.rc)
Installing erubis (2.6.6)
Installing rack (1.2.1)
Installing rack-mount (0.6.9)
Installing rack-test (0.5.4)
Installing tzinfo (0.3.22)
Installing actionpack (3.0.0.rc)
Installing mime-types (1.16)
Installing polyglot (0.3.1)
Installing treetop (1.4.8)
Installing mail (2.2.5)
Installing actionmailer (3.0.0.rc)
Installing arel (0.4.0)
Installing activerecord (3.0.0.rc)
Installing activeresource (3.0.0.rc)
Installing bundler (1.0.0.rc.3)
Installing nokogiri (1.4.3.1) with native extensions
Installing thor (0.14.0)
Installing railties (3.0.0.rc)
Installing rails (3.0.0.rc)
このようにして、Bundleの処理が完了します。
bundle show [gemname]
を使用して、バンドルされたGemがどこにインストールされたかを確認することが出来ます。
ご覧のとおり、あなたがGemfile(5)内でGemを2つだけ指定したとしても、 アプリケーションを動かすためには、実際には25個の異なるGemを必要とします。 BundlerはGemfile.lock内にインストールされたバージョンを正確に記憶します。 次にbundle install(1)を実行すると 、Bundlerは依存性の解決をスキップし、 最後にインストールされたGemと同じものをインストールします。
Gemfile.lock
のバージョン管理を調べた後に、別のマシン上にこれを複製し、
bundle install(1)を実行すると、依然として最後にインストールしたGemをインストールします。
erubis
またはmail
の新しいリリースが、
あなたが使用するGemを変更してしまうといった心配をする必要はありません。
しかし時間が経ち、使用しているGemをGemfile(5)内でマッチしないが、 最新のバージョンに更新したくなるかもしれません。
これを行うにはGemfile.lock
を無視するbundle update
を実行し、
再び全ての依存性を解決します。
この処理の結果が、最後にあなたがbundle update
を実行して以降、Gemの作者がリリースした新しいGemの要件を基に、
25もの異なるGemのセットをもたらすことに注意してください。
Gemのリストを更新
時に、あなたがGemfile(5)内の単一のGemを更新し、 Gemfile.lock内のバージョン指定を固定した残りのGemをそのままにしておきたいことがあるでしょう。
例えば、前述したシナリオであれば、nokogiri
がバージョン1.4.4をリリースし、
Railsとその依存性の更新をせずに、nokogiriだけを更新したいようなケースを想像シて下さい。
これを行うには、bundle update nokogiri
を実行します。
Bundlerはnokogiri
とその依存性を更新しますが、Railsとその依存性はそのままにします。
依存性の重複
時に、Gemfile(5)内に宣言されている複数のGemが、同じ2階層目の依存性によって、満たされることがあります。
例えば、thin
とrack-perftools-profiler
のケースを考えてみます。
source "https://rubygems.org"
gem "thin"
gem "rack-perftools-profiler"
rack-perftools-profiler
がrack ~> 1.0
に依存する一方で、
thin
のGemはrack >= 1.0
に依存します。
bundle install
を実行すると、次の一覧を得ることになります。
Fetching source index for https://rubygems.org/
Installing daemons (1.1.0)
Installing eventmachine (0.12.10) with native extensions
Installing open4 (1.0.1)
Installing perftools.rb (0.4.7) with native extensions
Installing rack (1.2.1)
Installing rack-perftools_profiler (0.0.2)
Installing thin (1.2.7) with native extensions
Using bundler (1.0.0.rc.3)
このケースでは、2つのGemは自身の依存性のセットを持ちますが、共通するrack
は共有します。
もし、bundle update thin
を実行すると、
Bundlerはthin
に依存するdaemons
、eventmachine
、rack
を更新し、
rack-perftools_profiler
に依存するopen4
、perftools.rb
は更新しません。
bundle update thin
は、rack
がrack-perftools_profiler
からも依存されていても、
更新を行うことに注意してください。
端的に言えば、bundle update
を使用してGemを更新した場合、
Bunlderは別のGemからも依存されているものも含め、そのGemの全ての依存性を更新するということです。
このシナリオの場合、Gemfile(5)内のthin
のバージョンを手動で更新し、
次にbundle install(1)を実行すると、daemons
とeventmachine
だけが更新され、
rack
は更新されません。
より詳細な情報については、bundle install(1)のセクション「保守的な更新」を参照シて下さい。
推奨ワークフロー
通常、Bundlerを使用したアプリケーションの管理をする際には、下記のワークフローに沿って作業を進める事をお勧めします。
-
Gemfile(5)の初めての作成後に、下記を実行します。
$ bundle install
-
バージョン管理システムに、出力された
Gemfile.lock
をチェックインします。$ git add Gemfile.lock
-
このリポジトリを、別の開発マシンにチェックアウトした際は、下記を実行します。
$ bundle install
-
このリポジトリを、デプロイ用のマシンにチェックアウトした際は、下記を実行します。
$ bundle install --deployment
-
Gemfile(5)の変更後に、新しい依存性または更新のために、 下記を実行します。
$ bundle install
-
更新された
Gemfile.lock
をバージョン管理システムにチェックインしたことを確認して下さい。$ git add Gemfile.lock
-
もし、bundle install(1)が衝突を報告してきた場合、 Gemfile(5)内で変更した特定のGemを手動で更新します。
$ bundle update rails thin
-
もし、Gemfile(5)内に挙げられているものにマッチする全てのGemを、 可能な限り最新のバージョンに更新したいのであれば、下記を実行します。
$ bundle update
© 2010 - 2017 STUDIO KINGDOM