LoginSignup
29
23

More than 5 years have passed since last update.

Gemfile.lockアップデートガイド

Last updated at Posted at 2017-11-16

Gemfile.lockアップデートガイド

しばらくバージョンアップされていないプロジェクトのGemfile.lockのアップデートは大変です。
重要な更新から順番に一歩一歩アップデートしていきましょう。
Rails アップグレードガイド
Bunler日本語ドキュメント
rubygems.org

(このドキュメントは随時更新します)

今一番更新が必要なgem1つに絞る

複数のgemを同時にアップデートするとそれによりバグった際の問題切り分けが困難になります。
bundler update railsのように引数として渡すことで、指定したgemのみを更新できます。
bundle update | Bundler日本語ドキュメント

Gemfile

# (snip)
gem 'rails'

Command

$ bundle update rails

Bundler could not find compatible versions for gem “xxxxxx”

バージョンの依存関係解決できなかったときは以下のようなメッセージが表示され、アップデートに失敗します。

$ bundle update rspec-rails

Bundler could not find compatible versions for gem "rspec-core":
In Gemfile:
guard-rspec was resolved to 4.2.8, which depends on
rspec (< 4.0, >= 2.14) was resolved to 3.0.0, which depends on
rspec-core (~> 3.0.0)

rspec-rails (~> 3.4.1) was resolved to 3.4.1, which depends on
  rspec-core (~> 3.4.0)

bundlerは依存ツリーを辿りながら、登場するすべてのgemのバージョン指定の解決を試みます。
このメッセージから以下のことがわかります。

  • gem 'guard-rspec'guard-rspec 3.4.1を選択
    • guard-rspec 3.4.1rspec (< 4.0, >= 2.14)に依存していて、rspec 3.0.0を選択
    • **rspec 3.0.0****rspec-core (~> 3.0.0)**(3.0.x)に依存している
  • gem 'rspec-rails', '~> 3.4.1'rspec-rails 3.4.1を選択
    • **rspec-rails 3.4.1****rspec-core (~> 3.4.0)**(3.4.x)に依存している

**rspec 3.0.0**が問題で**rspec-core (~> 3.4.0)**をインストールできないということです。

ですので、この場合は以下のようにアップデート対象にrspecを含めてやればよいことになります。

$ bundle update rspec-rails rspec

アップデート幅はなるべく小さくなるようにする

一度に大きな更新をすると、非互換の変更が入り込む可能性も大きくなりますし、どのバージョンで変更があったのかも調べづらくなります。
gemにもよりますが、少なくともメジャーバージョンが上がるときは1つ、できればマイナーバージョンも1つづつ上げるようにしましょう。
しばらくバージョンアップをしていなかったプロジェクトの場合、Gemfileでの指定ががないと一気に大きくバージョンアップしてしまいがちなので、事前にrubygems.orgを確認しておきましょう。
Gemfile

gem 'rails'

現在のバージョン

$ bundle show rails
/home/takeyuweb/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rails-4.1.16

最新のバージョン
https://rubygems.org/gems/rails 記事作成時点で5.1.4
4.1の次のマイナーバージョン最新
https://rubygems.org/gems/rails/versions 記事作成時点で4.2.10
Gemfileを更新

gem 'rails', '~> 4.2', '>= 4.2.10'

更新

$ bundle update rails
29
23
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
29
23