staticcheck

#golang #linter

Dominik Honnef氏が開発しているGo向けの静的解析ツール(linter)。公式には「state of the art linter for the Go programming language」を謳う。リポジトリはdominikh/go-tools(インポートパスはhonnef.co/go/tools)、MITライセンス、GitHubスターは約6.8k。個人・企業スポンサーの支援で開発が継続されている。

  • 150以上のチェックを搭載し、バグ・パフォーマンス問題・不必要に複雑なコード・スタイル違反を検出する。
  • 誤検知の少なさを重視した設計で、CIに組み込んでも偽陽性で落ちにくいことを売りにしている。
  • 使い方はgo vetなどと同様のインターフェースでstaticcheck ./...とシンプル。
  • golangci-lintにも同梱されており、golangci-lint経由で使われることも多い。

チェックのカテゴリ

チェックIDのプレフィックスでカテゴリが分かれている。

  • SA (staticcheck): 正しさに関するチェック。例: SA1000(不正な正規表現)、SA1012(nilのcontext.Contextを渡している)、SA2000(goroutine内でのWaitGroup.Add呼び出し)。
  • S (simple): 不必要に複雑なコードの簡略化提案。例: S1012(time.Now().Sub(x)time.Since(x))。
  • ST (stylecheck): スタイルガイド系の指摘。例: ST1001(ドットインポート非推奨)、ST1005(エラー文字列の先頭大文字)。
  • QF (quickfix): gopls統合向けの自動リファクタリング。例: QF1009(==でなくtime.Time.Equalを使う)。

その他

  • バージョニングは2022.1のような年ベースの形式。
  • 同じリポジトリに、構造体のメモリレイアウトを表示・最適化するstructlayout系ツール(structlayout / structlayout-optimize / structlayout-pretty)も含まれている。

Goの開発ツーリングの中での位置づけ

静的解析・lint系。go vetより広範なチェックを提供する代表的なサードパーティlinterで、単体でもgolangci-lint経由でも使われる。

出典

作成日時: 2026-08-15 07:03 / 更新日時: 2026-08-15 07:06