mcpField
G
go-linting

go-linting

github.com/cxuuテスト・品質1861.3k 回インストール19 週間前に更新
リポジトリ

go-linting について

Go 開発者向けの静的解析スキルです。一貫したチェックの設定に向けて、golangci-lint の構成、推奨リンター、抑制ルール、CI での利用方法を案内します。

主な機能

  1. 01セットアップスクリプトと golangci-lint v2 の設定例
  2. 02エラー、スタイル、静的解析向けリンターの推奨
  3. 03設定検証と段階的な lint の指針
  4. 04理由を添えた名前付き nolint 指示
  5. 05CI とコミット前チェックの連携パターン

活用シーン

  1. 01Go リポジトリへの lint 導入
  2. 02エラー処理やバグ検出向けリンターの選定
  3. 03CI やコミット前の一貫した lint 実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cxuu/golang-skills --skill go-linting

インストール後、Claude Code で/go-lintingを入力して読み込まれたか確認します。

同梱ファイルassets/golangci.ymlscripts/setup-lint.sh

詳細

Go の Lint

基本原則

どの「推奨」リンターセットを使うかよりも重要なのは、コードベース全体で一貫して Lint を実行することです。

一貫した Lint により、よくある問題を検出し、不必要に細かく規定することなく、コード品質の高い基準を確立できます。

リソースの使い分け

  • scripts/setup-lint.sh - .golangci.yml の生成、最初の Lint 実行結果の検証、または JSON メタデータの生成時に実行します。
  • assets/golangci.yml - 既存プロジェクトで golangci-lint v2 のベースラインとして使用します。

セットアップ手順

  1. scripts/setup-lint.sh を使って .golangci.yml を作成するか、assets/golangci.yml をコピーします
  2. golangci-lint run ./... を実行します
  3. エラーが発生した場合は、カテゴリごとに修正します(まずフォーマット、次に vet、その後スタイル)
  4. エラーがなくなるまで再実行します

.golangci.yml を生成したら、設定スキーマを検証してから Lint 結果を利用するために、 golangci-lint config verify --config .golangci.yml を実行します。


最低限推奨するリンター

次のリンターは、高い品質基準を維持しながら、よくある問題を検出します。

リンター目的
errcheckエラーが処理されていることを確認します
goimportsコードをフォーマットし、インポートを管理します
reviveよくあるスタイル上のミスを検出します(golint の最新の代替)
govetよくあるミスがないかコードを解析します
staticcheckさまざまな静的解析チェックを行います

注:revive は、現在は非推奨となっている golint の最新かつ高速な後継です。


Lint ランナー:golangci-lint

Lint ランナーとして golangci-lint を使用します。uber-go/guide の設定例 .golangci.ymlを参照してください。


設定例

保守されている設定例として assets/golangci.yml を使用します。golangci-lint v2 を対象としており(2026-06-19 に 2.10.1 で検証済み)、goimports を formatters の下に置き、コアリンターに加えて、本番環境でよく使われるリンターを有効にします。

実行方法
# Install the version this skill's config is verified against
go install github.com/golangci/golangci-lint/v2/cmd/[email protected]

# Run all linters
golangci-lint run

# Run on specific paths
golangci-lint run ./pkg/...

追加で推奨するリンター

最低限のセットに加え、本番プロジェクトでは次のリンターも検討してください。

リンター目的有効にするタイミング
gosecセキュリティ脆弱性の検出ユーザー入力を扱うサービスでは常に
ineffassign効果のない代入の検出常に — デッドコードを検出します
misspellコメントや文字列中のよくあるスペルミスの修正常に
gocyclo循環的複雑度のしきい値チェック関数の複雑度が約 15 を超える場合
exhaustiveswitch がすべての enum 値を網羅していることの確認iota enum を使用する場合
bodycloseHTTP レスポンスボディの閉じ忘れの検出HTTP クライアントコードでは常に

Nolint ディレクティブ

Lint の指摘を抑制する場合は、必ず理由を説明してください。

//nolint:errcheck // fire-and-forget logging; error is not actionable
_ = logger.Sync()

ルール:

  • //nolint:lintername を使用します — //nolint のみの指定は使用しません
  • 指摘と同じ行にコメントを配置します
  • // の後に理由を記載します

CI/CD との統合

テストの後に、CI で golangci-lint run ./... を実行します。 ローカル環境とリリース時の動作に差異が生じないよう、CI で使用する golangci-lint のバージョンを固定します。

Pre-commit フック
#!/bin/sh
# .git/hooks/pre-commit
golangci-lint run --new-from-rev=HEAD~1

変更されたコードのみを Lint するには --new-from-rev を使用し、フィードバックループを高速に保ちます。


クイックリファレンス

タスクコマンド/操作
golangci-lint のインストールgo install github.com/golangci/golangci-lint/v2/cmd/[email protected]
リンターの実行golangci-lint run
パスを指定して実行golangci-lint run ./pkg/...
設定ファイルプロジェクトルートの .golangci.yml
CI との統合パイプラインで golangci-lint run を実行
Nolint ディレクティブ//nolint:name // reason — //nolint のみの指定は禁止
CI との統合GitHub Actions では golangci/golangci-lint-action を使用
プリコミットgolangci-lint run --new-from-rev=HEAD~1
リンター選択の指針
必要なこと使用するもの
エラーハンドリングの網羅性errcheck
インポートのフォーマットgoimports
スタイルの一貫性revive
バグの検出govet, staticcheck
上記すべて設定ファイルを使った golangci-lint

関連スキル

  • スタイルの基礎:リンターが適用するスタイル上の疑問(フォーマット、ネスト、命名)を解決する場合は、go-style-core を参照してください
  • コードレビュー:リンターの出力と手動レビュー用チェックリストを組み合わせる場合は、go-code-review を参照してください
  • エラーハンドリング:errcheck が未処理のエラーを報告し、その処理方法を判断する必要がある場合は、go-error-handling を参照してください
  • テスト:CI パイプラインでテストと併せてリンターを実行する場合は、go-testing を参照してください

コメント