go mod vendor

経緯

HerokuでGoを利用するスターターガイドの中で、go mod vendorという知らないコマンドが出てきたので調べてみました。

Go Modules

Goでビルドする際には依存関係はGo Modulesが管理されていて、その内容はgo.modファイルに記載されています。

go mod cache (default)

依存するパッケージを$GOPATH/pkg/mod/にダウンロードします。
依存関係をUpdateするには以下のコマンドを使います。

  • go mod tidyコマンドでgo.modを更新します。

go mod vendor

依存するパッケージをworkspaceのvendorフォルダ配下にダウンロードします。
依存関係をUpdateするには以下のコマンドを使います。

  • go mod tidyコマンドでgo.modを更新します。
  • go mod vendorコマンドでvendor配下のパッケージとvendor/modules.txtを更新します。

さいごに

Herokuのスターターガイドでは、vendorの利点はアプリケーションの耐浸食性を保てることのようです。 依存関係のあるパッケージが変更されてもvendor配下にコピーしたパッケージを使うことで影響を受けない、といったことでしょうか。

参考サイト

https://pokuwagata.hatenablog.com/entry/2020/10/18/235429