課題
bundle update
コマンドを叩いてライブラリを更新したらエラーで動かなくなったので少しずつ進めることに。
じゃあ少しずつ進めるために、どのライブラリに新しいバージョンがあるのかを知るにはどうすればよいか。
対応
bundle outdated
を使うと古くなったライブラリを一覧で表示してくれるのでこちらを利用する
$ bundle outdated Fetching gem metadata from https://rubygems.org/......... Resolving dependencies.............................................. Gem Current Latest Requested Groups administrate 0.16.0 0.19.0 >= 0 default airbrussh 1.4.0 1.4.2 bcrypt 3.1.16 3.1.19 ~> 3.1.7 default bootsnap 1.7.3 1.16.0 >= 1.1.0 default bugsnag 6.19.0 6.26.0 ~> 6.12 default capistrano 3.16.0 3.17.3 ~> 3.16 development 以下略
かなりの量が出てきた。オプションなしだと実際には bundle update
では更新されないものも表示されるので--strict
オプションをつけ、Gemfileの要件で許可されているライブラリだけをリストアップする。--only-explicit
もつけて依存関係は省略してGemfileに記載のあるものだけにする。
$ bundle outdated --strict --only-explicit Fetching gem metadata from https://rubygems.org/......... Resolving dependencies............................................... Gem Current Latest Requested Groups active_hash 3.1.0 3.2.0 >= 0 default active_model_serializers 0.10.12 0.10.13 >= 0 default activerecord-import 1.0.8 1.4.1 >= 0 default administrate 0.16.0 0.19.0 >= 0 default airbrussh 1.4.0 1.4.2 bcrypt 3.1.16 3.1.19 ~> 3.1.7 default bootsnap 1.7.3 1.16.0 >= 1.1.0 default bugsnag 6.19.0 6.26.0 ~> 6.12 default 以下略
これで目的のものが得られた。--strict
との違いがよく分からないけど --update-strict
もつけているといいかもしれない。
この他にもbundle outdated --help
を見ると他にも使えそうなオプションがあり、bundle update
のオプションと関連しているものもあったので色々試してみると良さそうだ。
実際にやってみる
bundle outdated
を使って段階的なアプデをしてみよう。
まず--patch
を使ってpatchがあるものだけチェック
$ bundle outdated --patch --strict Fetching gem metadata from https://rubygems.org/......... Resolving dependencies.... Gem Current Latest Requested Groups active_hash 3.1.0 3.1.1 >= 0 default active_model_serializers 0.10.12 0.10.13 >= 0 default airbrussh 1.4.0 1.4.2 bcrypt 3.1.16 3.1.19 ~> 3.1.7 default 以下略
次に実際に bundle update
に --patch
オプションをつけてパッチバージョンだけ上げる
$ bundle update --patch --strict Fetching gem metadata from https://rubygems.org/......... Resolving dependencies... Using rack 2.2.8 (was 2.2.6.4) Using nio4r 2.5.9 (was 2.5.8) Using thor 1.2.2 (was 1.2.1)
$ bundle outdated --patch --strict Fetching gem metadata from https://rubygems.org/......... Resolving dependencies... Bundle up to date!
無事パッチだけ更新されたのでここでSPECの実行、軽い動作チェックを挟つつ、--minor
--major
と更新していけば問題が起きても比較的早く解決できるだろう。