Go (Golang) の .gitignore 設定
Go プロジェクト向けのシンプルで効果的な .gitignore。コンパイル済みバイナリ、vendor ディレクトリの判断、テスト出力、Go 固有のビルドアーティファクトを網羅します。
詳細な説明
Go プロジェクトは、バイトコードキャッシュや仮想環境を必要としないため、ほとんどの言語よりもシンプルな .gitignore になる傾向があります。ただし、理解すべき重要なパターンはいくつかあります。
Go の必須無視パターン:
# Compiled binaries
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary and output
*.test
*.out
coverage.html
coverage.txt
# Build output
/bin/
/dist/
# Go workspace
go.work.sum
# Dependency directory
vendor/
コンパイル済みバイナリ:
Go はネイティブマシンコードにコンパイルされます — node_modules や __pycache__ に相当するものはありません。出力は単一のバイナリファイルです。プロジェクト名が myapp の場合、go build を実行すると myapp(Windows では myapp.exe)バイナリが生成されます。明示的な名前で無視するか、ビルド出力を bin/ ディレクトリに配置してください。
vendor/ ディレクトリの判断:
Go modules(go.mod + go.sum)は、旧来の GOPATH およびベンダリングアプローチに取って代わりました。現在は2つの正当な選択肢があります:
vendor/を無視する(現代のデフォルト) — 依存関係は$GOPATH/pkg/mod/にキャッシュされ、go mod downloadでダウンロードされます。go.sumファイルが整合性を保証します。よりクリーンで、ほとんどのプロジェクトに推奨されます。vendor/をコミットする — エアギャップ環境やモジュールがインターネットから削除された場合でもビルドを保証するために、ベンダリングを要求する組織もあります。ベンダリングする場合はvendor/を.gitignoreに追加しないでください。
テストアーティファクト:
*.test—go test -cで作成されるコンパイル済みテストバイナリ。*.out—go test -cpuprofileやgo tool pprofからの CPU およびメモリプロファイリング出力。coverage.html—go tool coverからの HTML カバレッジレポート。
必ずコミットすべきもの:
go.mod— モジュール定義と直接依存関係の宣言。go.sum— すべての依存関係(直接的および推移的)の暗号学的チェックサム。これが lockfile です。
Pro tip: Go のビルドは設計上、再現性が保証されています。go.mod と go.sum がコミットされていれば、誰でもビルドを正確に再現できます。.gitignore は主にコンパイル済みバイナリとテスト出力をリポジトリから除外するためのものです。
ユースケース
モノレポに12のサービスを持つ Go マイクロサービスチームが、バイナリの扱いと依存関係のベンダリング判断について一貫した .gitignore 戦略を必要としています。