前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

Rails : bundle updateの前にdry-runしたい

課題

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

参考

stackoverflow.com

/* Responsive: yes */