エラーメッセージ
go build、go test、またはgo runを実行しようとすると、コンパイラが以下のエラーを表示します:
missing go.sum entry for module providing package <package_name>; to add it, run: go mod download <package_name>
なぜこのエラーが起きるのか
Goモジュールはセキュリティレイヤーとしてgo.sumファイルを使用します。このファイルには依存関係の期待される暗号ハッシュが含まれています。コード内でパッケージをインポートしたり、go.modに依存関係が記載されているにもかかわらずそのハッシュがgo.sumに存在しない場合、Goはコンパイルを拒否します。これにより、リモートリポジトリがあなたの知らないうちにコードを差し替える「依存関係のハイジャック」を防ぎます。
主な原因は以下の通りです:
- バージョンを追加するために
go.modを手動編集した。 go.sumのGitマージコンフリクトが誤った方法で解決された。- チェックサムを適切に同期しない方法で
go getを使用した。 - ネットワークアクセスが制限されており、新しいチェックサムを取得できないCI/CD環境。
段階的な修正方法
1. 標準的なクリーンアップ(「定番」の修正方法)
90%のケースでは、パッケージを個別にダウンロードする必要はありません。モジュールの状態を同期する必要があります。プロジェクトのルートディレクトリで以下のコマンドを実行してください:
go mod tidy
このコマンドは2つのことを行います:インポートされたパッケージの不足しているモジュール要件を追加し、インポートのない要件を削除します。最も重要なのは、go.sum内の不足しているエントリを補完することです。
2. 特定のパッケージを強制ダウンロードする
go mod tidyで解決しない場合、または特定のモジュールで詰まっている場合は、エラーメッセージの提案に従ってください:
go mod download <package_name>
<package_name>をエラーに表示されている実際のパス(例:github.com/google/uuid)に置き換えてください。これによりGoはモジュールを強制的に取得し、チェックサムファイルを更新します。
3. プライベートリポジトリの処理
不足しているパッケージがプライベートなGitLabまたはGitHubリポジトリからのものである場合、GoツールチェーンはプライベートコードにアクセスできないGoogleの公開チェックサムデータベース(sum.golang.org)にアクセスしようとするため、チェックサムの取得に失敗する場合があります。
内部ドメインのプロキシとチェックサムデータベースをバイパスするために、GOPRIVATE環境変数を設定してください:
# macOS/Linuxの場合
export GOPRIVATE=github.com/your-org/*
# Windowsの場合(PowerShell)
$env:GOPRIVATE="github.com/your-org/*"
設定後、再度go mod tidyを実行してください。
4. 「最終手段」(ローカルキャッシュのクリア)
go.sumが正しく見えるにもかかわらずエラーが続く場合、ローカルモジュールキャッシュが破損している可能性があります。これはまれですが、ダウンロードが中断されたときに発生します。
go clean -modcache
go mod tidy
**警告:**これにより、マシン上のすべてのダウンロード済みモジュールが削除されます。次のgo mod tidyはすべてを再ダウンロードするため、時間がかかります。
5. vendorディレクトリを使用するプロジェクトの修正
プロジェクトがvendor/ディレクトリを使用している場合(レガシー環境やコンプライアンスが厳格な環境でよく見られます)、vendorフォルダがgo.modと同期していることを確認してください:
go mod vendor
go mod tidy
確認方法:修正が成功したかどうかを確認する
修正を実行したら、プロジェクト全体でビルドまたはテストスイートを実行して、環境がクリーンであることを確認してください:
# プロジェクトがエラーなくコンパイルできるか確認する
go build ./...
# または依存関係が完全に解決されていることを確認するためにテストを実行する
go test ./...
これらのコマンドがmissing go.sum entryエラーなく終了すれば、問題は解決です。
再発防止のためのヒント
- go.sumをコミットする:
go.sumを.gitignoreに追加しないでください。再現可能なビルドとセキュリティのために不可欠です。 - CI/CDチェック:
go mod tidy --check(またはgo mod download)をCIパイプラインに追加して、本番環境に影響が出る前に不足エントリを検出してください。 - **エディタ連携:**GoエクステンションのVS CodeまたはGoLandを使用してください。これらは通常、保存時に自動的に
go mod tidyを実行し、このエラーの発生を防ぎます。

