共有 runner/リモート Mac で
go mod download を安定させるため、GOPROXY 連鎖(カンマ→direct)、GOSUMDB、GOMODCACHEを決定表と環境変数一覧に整理します(Go 専用・npm/brew とは切り分け)。
自前モジュールプロキシと公共プロキシ連鎖:適用場面の比較
Athens 等の自前実装は監査ログ・帯域内製化・オフラインキャッシュ向き。地域ミラー+proxy.golang.org+direct の公共連鎖は運用を薄くしたいチームの初期コストが低いです。分岐点は「go.sum を正」としたうえで、プロキシ鮮度をどこまで許容するかです。
| 方式 | 向くシーン | 主なトレードオフ |
|---|---|---|
公共連鎖(例:https://地域ミラー,proxy.golang.org,direct) | オープンソース中心・チーム分散・まず速く安定させたい CI | ミラー鮮度・事業者ポリシーへの依存 |
| 自前 GOPROXY(Athens 等) | コンプライアンス、固定スナップショット、VPC 内完結 | スケール・ストレージ・バージョン昇格の運用 |
| ハイブリッド | 公開は連鎖、*.corp は VCS 直 | GOPRIVATE/GONOPROXY のパターン設計が必須 |
共有 runner ではローカル・CI・リモート Mac の go env GOPROXY を揃えるだけで checksum トラブルが減ります。
実行パラメータ一覧(GOPROXY・プライベート・チェックサム・キャッシュ)
頻出キーの意味と設定の型です。URL は組織ポリシーに合わせて差し替えてください。
| 変数 | 役割 | 設定例・メモ |
|---|---|---|
GOPROXY | モジュール ZIP/メタデータの取得順。カンマがフォールバック。 | https://社内または地域プロキシ,https://proxy.golang.org,direct — 最後の direct で VCS 直叩きへ逃がす。 |
GOPRIVATE | プロキシ/既定 sumdb から除外するモジュールパス(カンマ区切りグロブ)。 | *.corp.example,github.com/myorg/* |
GONOPROXY | GOPRIVATE より細かく「プロキシを使わない」パスのみ指定。 | 通常は空でよい。プロキシ経由を禁止したい内部モジュールのみ列挙。 |
GOSUMDB | チェックサム DB。空は既定(sum.golang.org)。 | 閉域のみ off または自前 SumDB の URL(運用責任を明文化)。 |
GONOSUMDB | sumdb 検証をスキップするパス。 | GOPRIVATE と揃えるか、公開フォークだけ例外など最小限に。 |
GOMODCACHE | モジュールキャッシュの実ディレクトリ。 | CI では /var/cache/go-mod 等に寄せ、キャッシュアクションのパスと一致させる。 |
GOFLAGS | 既定フラグ注入。 | -mod=readonly で CI の意図しない書き換えを防ぐ。バージョンごと挙動差に注意。 |
GOINSECURE | HTTPS ではない取得を許可(非推奨寄り)。 | ラボのみ。本番・共有 Mac では証明書修復を優先。 |
永続化コマンド例(ローカル/リモート Mac)
go env -w GOPROXY='https://<あなたのミラー>,https://proxy.golang.org,direct'
go env -w GOPRIVATE='*.example.corp,github.com/org/private-*'
go env -w GOSUMDB='sum.golang.org'
go env -w GOMODCACHE="$HOME/go/pkg/mod"
GOPROXY 連鎖回源の読み方と切り分け
1
左から順に試行: 404 や一時障害のとき次のエントリへ。最後が direct なら Git/fossil 等へ直行します。
2
GOPRIVATE 一致モジュールはプロキシを迂回: 連鎖に載せても効かないため、社内サーバ可达性と SSH 鍵/netrc を別途確認します。
3
切り分け: 失敗時だけ GOPROXY=direct で再実行し、プロキシ側か VCS 側かを二分します。go mod download -x のログで実 URL を追います。
CI チェックリスト(キャッシュ鍵・並行・タイムアウト)
- 1.
go versionとgo env GOOS GOARCHをログに残し、runner 間で固定。 - 2. キャッシュキーに
go.sumのハッシュと Go のマイナー版を含める。 - 3.
go mod downloadをコンパイル前ジョブに分離し、タイムアウトをネットワーク SLA に合わせて延長。 - 4. 共有 Mac ではディスク水位と
GOMODCACHEサイズを監視(他言語キャッシュとパスを分離)。
GitHub Actions の env 断片(例)
env:
GOPROXY: https://<mirror>,https://proxy.golang.org,direct
GOPRIVATE: github.com/myorg/*
GOMODCACHE: ${{ runner.temp }}/gopath/pkg/mod
GOFLAGS: -mod=readonly
まとめ:2026年の Go 跨境は「連鎖・プライベート・sumdb・キャッシュ」の四点セット
README と CI に四変数を同じ形で貼ると問い合わせが減ります。自前か公共連鎖かは監査と鮮度の優先で決め、ハイブリッドなら GOPRIVATE を早めに固定してください。