0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go Modules( go.mod )の依存の追加・更新・確認・削除周りのコマンドまとめ

Posted at

Go Modules(go.mod)の依存の追加・更新・確認・削除を中心に、実務でよく使うコマンドと運用方法をまとめました。


0) 初期化・基本

# 新規モジュール作成(ルートで)
go mod init example.com/your/module

# 依存解決・不要な行の整理(よく使う)
go mod tidy

# 依存を事前にダウンロード(CI のウォームアップなど)
go mod download

# モジュールの整合性チェック(go.sum の検証)
go mod verify

1) 依存の 追加

A. コードに import してから解決

# 例:それぞれのコードに `import "github.com/aws/aws-sdk-go-v2/config"` を書いた後
go get github.com/aws/aws-sdk-go-v2/config@latest
go mod tidy

B. 直接 go get

# 例:AWS SDK v2 の Secrets Manager クライアント
go get github.com/aws/aws-sdk-go-v2/service/secretsmanager@latest
go mod tidy

2) 依存の 更新

単体モジュールを更新

# そのモジュールの最新リリースへ(メジャー含む)
go get example.com/mod@latest

# パッチのみ(互換更新):マイナー・メジャーを上げない
go get -u=patch example.com/mod

# マイナーまで(メジャーは維持):よく使う
go get -u example.com/mod

一括更新(慎重に)

# すべてパッチのみ
go get -u=patch ./...

# すべてマイナーまで(メジャーは維持)
go get -u ./...

特定のコミット/タグへピン止め

# タグ
go get example.com/mod@v1.2.3
# コミット(擬似バージョンに解決される)
go get example.com/mod@abcdef1234

MVS(Minimal Version Selection)
Go は「必要最小のバージョン」を選ぶため、直接指定していない限りトランジティブ依存は勝手に最新化されません。
依存の上げ忘れに気づきにくい反面、再現性は高いです。


3) 依存の 確認(可視化・調査)

# 使っているモジュール一覧
go list -m all

# アップデート可能な最新(マイナー/パッチ)を表示
go list -m -u all

# JSON で詳細(jq などと併用)
go list -m -u -json all | jq '.'

# なぜこの依存が入ったの?(依存経路を表示)
go mod why -m example.com/mod

# 依存グラフ(テキスト)
go mod graph

4) 依存の 削除

使っていない import を消してから整理

# まずコードから import を削除
# その後、不要条項を go.mod/go.sum から整理
go mod tidy

強制的に要件から外す

go get example.com/mod@none
go mod tidy

5) replace / exclude(ピン/差し替え/除外)

replace: フォークやローカル、特定コミットに差し替え

// go.mod
replace example.com/upstream => github.com/yourfork/upstream v1.2.3
# or ローカルパス
replace example.com/upstream => ../upstream
# 追加・削除(コマンドで)
go mod edit -replace=example.com/upstream=../upstream
go mod edit -dropreplace=example.com/upstream

注意: ローカル replace は CI/ビルドで壊れやすいので、コミット前に外すのが鉄則。

exclude: 問題のある特定バージョンを使わせない

exclude example.com/mod v1.4.2

6) メジャーバージョンの上げ方(v2+)

  • import パスに /v2 のように メジャー番号を含める必要あり(Semantic Import Versioning)
  • 例)module example.com/app から github.com/foo/bar/v2 を使う場合:
import "github.com/foo/bar/v2/pkg"
go get github.com/foo/bar/v2@v2.3.1
go mod tidy

7) ツール類のバージョン管理(CI 再現性)

go install(推奨)

# ツールはプロジェクト依存に入れない(go.mod 化しない)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.2
go install entgo.io/ent/cmd/ent@v0.14.4

8) Vendor 運用(必要なら)

# vendor ディレクトリを作成
go mod vendor

# vendor を使ってビルド
go build -mod=vendor ./...
  • Pros: 完全再現、ネットワーク不要
  • Cons: リポジトリが重くなる、更新負荷
  • 使うなら CI でも -mod=vendor を徹底(中途半端が一番危険かも)

9) キャッシュやエラー時の対処

# モジュールキャッシュをクリア(破損/整合性エラー時)
go clean -modcache

# GOPROXY を確認/上書き(社内プロキシや切り替え時)
go env GOPROXY
go env -w GOPROXY=https://proxy.golang.org,direct
# プライベートモジュールがある場合
go env -w GOPRIVATE=github.com/your-org/*
  • checksum mismatch が出たら:go clean -modcachego mod download を試す
  • プライベート依存は GOPRIVATE 設定+ git の資格情報が必要

10) CI でのおすすめフロー

- run: go version
- run: go env
- run: go mod tidy
- run: git diff --exit-code go.mod go.sum  # ここで差分あれば fail(手元で tidy を忘れてる)
- run: go build ./...
- run: go test ./... -cover

11) その他メモ

  • indirect はgo mod tidy が自動で適切に整えてくれているので、手で消さない。

  • go get -u all は 大規模プロジェクトでは破壊的になり得る。

  • まずは go list -m -u all で確認 → 個別更新すべき。

  • “undefined: X” や “missing go.sum entry” が出る場合
    go get で必要なモジュールを追加し、go mod tidy
    Sum が壊れたら go clean -modcache


0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?