はじめに
未経験からエンジニアに転職して、3ヶ月ほど経つエンジニアです。
今回は業務でgemをアップデートするときに詰まった
gemアップデート時の依存関係の調べをテーマに書きます。
↓の警告がでて、gemをアップデートできない場合のアプローチについてです。
Bundler attempted to update GEMNAME but its version stayed the same
結論
- ↑で該当のgemを探す
- 依存関係を調べる
依存関係の例
例として、faradayというgemの依存関係を見ていきます。
faraday (1.10.0) # 最新の2.3.0にしたい
$ bundle update faraday
上記コマンドでgemをアップデートしようとするも、警告が出てアップデートできません。
Bundler attempted to update faraday but its version stayed the same
bundle update --conservative faraday
とすると他のgemのアップデートを抑制することができます。
慎重にアップデートしたい場合は付けるようです。
警告が出たので、faradayの依存関係を見にいきます。
アップデート前のバージョンを探します。
依存関係をみます。
見た感じ(自分の環境では)問題ありませんでした。
ここで問題となっている依存関係を発見できる場合もあると思います!
仕方がないので、Gemfile.lockを再度調べます。
faradayに関係するgemを見ていきます。
上記の画像で示した方法で依存関係を調べていきます。
自分の環境の場合は
faraday_middleware (1.2.0)
↑の画像の通り、
faraday1.10.0 から 1.0 に依存しています。
だから↓のコマンドでアップデートできなかった、ということです。
$ bundle update faraday
じゃあどうやってアップデートするの?
$ bundle update faraday --minor # マイナーバージョンのアップデート
$ bundle update faraday --patch # パッチバージョンのアップデート
これらのオプションを使用すればアップデートできる場合があります。
(パッチバージョンのアップデートでも依存関係の問題でアップデートできないこともあります)
他にもアップデートする方法はありますが、本稿の範疇を超えるので割愛させていただきます。
まとめ
gemのアップデートは深刻なバグを起こす恐れもあるため慎重に行う必要があります。
依存関係を一個ずつ見ていくのは面倒ですが、出戻りを防ぐ意味でも丁寧に確実にやっていくことが大事です。
間違っている点がありましたらご指摘をお願いいたします。