課題
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 と更新していけば問題が起きても比較的早く解決できるだろう。