🦔

Go 1.24 時代の go-mock 導入手順

2025/02/17に公開

go-mock 導入のベストプラクティスが色々変わって調べてたのでまとめておきます

昔と変わってたこと

手順

まず 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 を列挙しなくてよくなったのでかなりシンプルになりました🎉

株式会社primeNumber

Discussion