LoginSignup
15
7

More than 3 years have passed since last update.

Go Modules で stringer なんかの開発用ツールを管理するには

Last updated at Posted at 2019-11-24

はじめに

  • Go Modules で stringer や lint など開発用のツールを依存パッケージとして管理する方法についてまとめます。

Go Modules で開発ツールを管理できない問題

  • stringer などの開発ツールを go get すると一時的に go.mod に記載されますが、コードの中で import されていないため go mod tidy すると go.mod から外れてしまいます。

解決策

  • コード中で import されてさえいれば Go Modules の管理対象にできるので、開発ツールを import するだけのファイルをおいておきます。
  • ファイル名は何でも良いのですがとりあえず tools.go で統一しておくとわかりやすいかもしれません。
tools.go
// +build tools

package main

import _ "golang.org/x/tools/cmd/stringer"

解説

  • 行頭の // +build はビルドタグと呼ばれるもので、go build 時に固有環境向けのコードを実装するために利用されます
  • tools.go のビルドタグには // +build tools と記載されているため tools タグがある場合のみコンパイル対象になります
  • 実際には tools タグ付きでビルドされることはないので、実行時に何らかの影響を与えることなく Go Modules のために開発ツールを import するということが tools.go によって実現されています。
  • かなりバッドノウハウっぽいですが、Go Modules の Wiki に記載されている手法なのでとりあえずこうしておくのが良さそうです。
15
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7