アップデートすると、なぜか別のライブラリがダウングレードする不思議な現象に出会いました。selection)を採用しているライブラリが循環参照しているためでした。selectionとはMVSはモジュールグラフ全体の依存関係を見て、各モジュールの最小(最も古い)の必要バージョンを使う仕組みです。1.3が最大バージョンですが、メインモジュールからすると最小の必要バージョンではありません。1.2が選択されます。上記の図ではライブラリ間の循環参照(相互参照)が無いため問題無いですが、個人ライブラリ等によっては循環参照のある依存関係が生まれているケースがあります。1.3に依存してる↓...と巡り巡ってどんどん最低バージョンに遡っていくことが起きます。getで最新しようとしても、MVSによって循環参照を巡り巡って最低バージョンにされるので解決できません。基本的には以下の方針となります。循環参照を無くす根本解決はこちらになります。循環参照はライブラリ間の結合を密にしますし、それによって意図しない影響が生まれるので基本的に避けるようにしましょう。長い間放置されたものだったりすると、修正コストが高くついたりするので緩和対応として次の方針を取ることも良いでしょう。go.modのreplaceでバージョンを固定するMVSはreplaceを考慮するのでダウングレードが発生しなくなります。Selectionがあります。これは指定されたなかで最大の(=最新の)バージョンを使う。等をはじめとする多くのプログラミング言語のパッケージマネージャで採用されている。インストールされます。selection)の説明と、それによって引き起こる期待しない挙動について説明しました。Bazelを導入する過程で学んだTipsをまとめます。前回に引き続き今回もBazelについて書きます。»プロフィールid:quoll00AWAのサーバ・インフラのリードエンジニアを経て現在AbemaTVにて開発。Webフロントもやります。10はてなブログをはじめよう!quoll00さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。