🦔
Go 1.24 時代の go-mock 導入手順
go-mock 導入のベストプラクティスが色々変わって調べてたのでまとめておきます
昔と変わってたこと
- 公式から Uber 管轄へ
- go.mod でツールが管理できるように
手順
まず go-mock を導入したいプロジェクトを作成した後に、下記の手順で導入できます。
$ go get -tool go.uber.org/mock/mockgen@latest
go: added go.uber.org/mock v0.5.0
go: added golang.org/x/mod v0.18.0
go: added golang.org/x/sync v0.7.0
go: added golang.org/x/tools v0.22.0
これを実行すると下記のように go.mod が編集されます👏
module github.com/kazz187/sample_project
go 1.24.0
tool go.uber.org/mock/mockgen
require (
go.uber.org/mock v0.5.0 // indirect
golang.org/x/mod v0.18.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/tools v0.22.0 // indirect
)
あとは Makefile を準備してあげれば
.PHONY: gomod-dl gen-mock
gomod-dl:
go mod download
gen-mock: gomod-dl
go generate ./...
$ make gen-mock
で生成されます👏
動作確認
まず sample/sapmle.go
を作成します。
package sample
import "context"
//go:generate go tool mockgen -destination mock_sample/mock_sample.go github.com/kazz187/sample_project/sample Sampler
type Sampler interface {
Sample(ctx context.Context) (float32, error)
}
今までのように go install go.uber.org/mock/mockgen@latest
したり、 go run go.uber.org/mock/mockgen
しなくても go.mod に tool ディレクティブさえ準備しておけば go tool mockgen
だけでバージョン管理されたコマンドが呼び出せるようになってることが今回の変更の恩恵です🎉
生成コマンドを実行すると
$ make gen-mock
go mod download
go generate ./...
mock_sample.go
が無事生成されています。
$ tree
.
├── Makefile
├── go.mod
├── go.sum
└── sample
├── mock_sample
│ └── mock_sample.go
└── sample.go
3 directories, 5 files
Makefile に go install
を列挙しなくてよくなったのでかなりシンプルになりました🎉
Discussion