🔧

go mod tidyで消したくないmoduleも消えてしまう。

2021/12/18に公開

背景

go mod tidy を実行した際、 import されていない module は削除してくれる。
その際、gqlgen などのコードジェネレート時にしか使わないmoduleも削除されてしまう。

go mod tidyについては、下記の記事にて。
https://zenn.dev/kenghaya/articles/84d3e9c5b178e0

解決策

公式に書いてあった。

then one currently recommended approach is to add a tools.go file to your module that includes import statements for the tools of interest (such as import _ "golang.org/x/tools/cmd/stringer"), along with a // +build tools build constraint. The import statements allow the go command to precisely record the version information for your tools in your module's go.mod, while the // +build tools build constraint prevents your normal builds from actually importing your tools.

tools.go を作って、そこでインポートをしておく。
build tagをつけることで、go buildでビルド対象外とできる。

tools.go
// +build tools

package tools

import (
	_ "github.com/99designs/gqlgen"
	_ "github.com/golang/mock/mockgen"
	_ "github.com/vektah/dataloaden"
	_ "github.com/kisielk/errcheck"
)

参考

https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module

Discussion