go-development について
Go プロジェクトの開発や保守向けのスキルです。コーディング規約、テストやセキュリティチェックに加え、一般的な開発作業の参考ガイドをまとめています。
主な機能
- 01型安全な Go のパターンと規約
- 02テストと静的解析のガイダンス
- 03セキュリティと脆弱性のチェック
- 04Go 開発のテーマ別リファレンス
活用シーン
- 01Go コードの一貫性の確認
- 02プロジェクトの品質チェック設定
- 03テストやエラー処理のパターン選定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ netresearch/ go-development-skill --skill go-developmentインストール後、Claude Code で/go-developmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
checkpoints.yamlevals/evals.jsonreferences/api-design.mdarchitecture.mdawesome-go-submission.mdbranch-protection.mdcontracts-and-invariants.mdcron-scheduling.mddependencies.mddocker.mdfuzz-testing.mdldap.mdlefthook-template.mdlinting.mdlogging.mdmakefile.mdmodernization.mdmutation-testing.mdresilience.mdreusable-workflows.mdsingle-build-release.mdtesting.mdscripts/verify-go-project.sh詳細
Go 開発パターン
基本原則
型安全性
- 避けるもの:
interface{}(anyを使用)、sync.Map、散在する型アサーション、リフレクション - 推奨: ジェネリクス
[T any]、errors.AsType[T](Go 1.26)、具象型 - アップグレード後に
go fix ./...を実行します
一貫性
- 問題領域ごとにパターンを1つに絞ります
- 既存のコードベースのパターンに合わせます
- リファクタリングは全体的に行うか、まったく行わないかのどちらかにします
- 設定の優先順位:デフォルト値 < 設定ファイル < 環境変数 < フラグ
テスト
- ビルドタグでテスト層を分離します:単体テスト(デフォルト)、
integration、e2e - 必ず
t.Parallel()、t.Helper()、テーブル駆動のサブテストを使用します log/slogを直接使用します。カスタム Logger インターフェースでラップしてはいけません
慣例
- 命名:ID、URL、HTTP(Id、Url、Http ではありません)— ツールでは強制されません(ST1003 はデフォルトで無効です)
- エラーのラップ:
fmt.Errorf("failed to process: %w", err)
参考資料
Git フック:ls lefthook.yml 2>/dev/null && lefthook install || echo "Add lefthook — see references/lefthook-template.md"
必要に応じて読み込みます:
| 参考資料 | 用途 |
|---|---|
references/architecture.md | パッケージ構造、状態変更の完全性 |
references/logging.md | log/slog による構造化ログ、logrus からの移行 |
references/cron-scheduling.md | go-cron のパターン:名前付きジョブ、実行時の更新、レジリエンス |
references/resilience.md | go-cron に組み込まれた再試行/サーキットブレーカー/タイムアウトのラッパーへのポインター |
references/docker.md | Docker クライアントのパターン、バッファープーリング |
references/ldap.md | LDAP/Active Directory の統合 |
references/testing.md | ビルドタグ、リソースの分離、データ競合に関する注意点 |
references/linting.md | golangci-lint v2、staticcheck |
references/api-design.md | 列挙型/ステータスの防御的な処理 |
references/fuzz-testing.md | Go のファジングパターン、セキュリティシード |
references/contracts-and-invariants.md | コントラクト、不変条件、プロパティテスト |
references/mutation-testing.md | Gremlins の設定、テスト品質の測定 |
references/makefile.md | CI/CD 用の標準 Makefile インターフェース |
references/modernization.md | go fix のモダナイザーとビルドタグの落とし穴、errors.AsType[T]、b.Loop |
references/dependencies.md | アップグレード:go get -u all、メジャーバージョン、ビルド対象のスコープ設定 |
references/lefthook-template.md | Go プロジェクトの Git フックですぐに使える lefthook.yml |
references/branch-protection.md | ルールセットの基準値:3 つのルールセットによるゲート、バイパスモード |
references/reusable-workflows.md | 再利用可能な Actions ワークフローの呼び出し元、権限の伝播、リリースゲートの出力 |
references/single-build-release.md | 単一ビルドのリリース:クロスコンパイルは一度だけ行い、リリースとコンテナーで再利用 |
references/awesome-go-submission.md | awesome-go への投稿:CI で解析される PR 本文、名前の衝突 |
品質ゲート
レビューを完了する前に実行します:
golangci-lint run --timeout 5m # Linting
go vet ./... # Static analysis
staticcheck ./... # Additional checks
govulncheck ./... # Vulnerability scan
go test -race ./... # Race detection
標準ライブラリの脆弱性修正
govulncheck が標準ライブラリの脆弱性を報告した場合は、vuln.go.dev で修正版のバージョンを確認し、go.mod の go X.Y.Z を更新してから、go mod tidy を実行します。
貢献: 改善案を https://github.com/netresearch/go-development-skill に提出してください
コメント
Markdown 対応