bundle update

Gemを最新の利用可能なバージョンへ更新します。

文法

bundle update *gems [--source=NAME] [--local]

説明

指定されたGem(指定が無ければ全てのGem)を更新し、 Gemfile.lock内で指定されている、過去にインストールされた事があるGemを無視(却下)します。 一般的に、マシンを跨いで全く同じGemとバージョンをインストールするには、 bundle install(1)を使用すべきです。

Gemのバージョンを明確に更新するために、bundle updateを使用します。

オプション

--source=<name>
Gemfile(5)内で使用される:gitまたは:pathの供給元の名前を指定します。 例えば、供給元がhttp://github.com/rails/rails.gitである:gitを使用するには、
bundle update --source railsを呼び出します。
--local
リモートからGemを取得せずに、代わりにローカルにキャッシュされたGemを使用します。

全ての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階層目の依存性によって、満たされることがあります。 例えば、thinrack-perftools-profilerのケースを考えてみます。

source "https://rubygems.org"

gem "thin"
gem "rack-perftools-profiler"

rack-perftools-profilerrack ~> 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に依存するdaemonseventmachinerackを更新し、 rack-perftools_profilerに依存するopen4perftools.rbは更新しません。 bundle update thinは、rackrack-perftools_profilerからも依存されていても、 更新を行うことに注意してください。

端的に言えば、bundle updateを使用してGemを更新した場合、 Bunlderは別のGemからも依存されているものも含め、そのGemの全ての依存性を更新するということです。

このシナリオの場合、Gemfile(5)内のthinのバージョンを手動で更新し、 次にbundle install(1)を実行すると、daemonseventmachineだけが更新され、 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
    

 Back to top

© 2010 - 2017 STUDIO KINGDOM