Go言語プロジェクトにおいて、staticcheck
を使用して未使用関数を検出することは、効率的な静的解析手法です。
1. staticcheck のインストール
以下のコマンドを実行して、Go (バージョン 1.16+) と staticcheck
をインストールしてください。
go install honnef.co/go/tools/cmd/staticcheck@latest
2. 基本用法:未使用関数の検索
プロジェクトのルートディレクトリで以下のコマンドを実行します。
staticcheck ./...
主要チェックルール:
- U1000: 未使用関数、メソッド、変数、または型を検出します。
- U1001: 未使用パラメータを検出します。
3. 特定のチェックルールをフィルタリングする
未使用関数のみをチェックする場合、ルールを指定できます。
staticcheck -checks=U1000 ./...
4. 出力形式
デフォルトの出力形式は、{path}:{line}:{column}: {message}
の形式です。例:
main.go:10:2: func UnusedFunction は未使用です (U1000)
5. 設定ファイル (オプション)
プロジェクトのルートディレクトリに .staticcheck.conf
ファイルを作成し、カスタムチェックルールを定義します:
{
"checks": ["U1000", "-ST1000"] // U1000 を有効にし、ST1000 を無効にする (文字列フォーマット規則)
}
6. Visual Studio Code への統合
- Go 拡張機能 をインストールします。
settings.json
に以下を追加します:
7. 特定コードの無視
関数の上部にコメント //lint:ignore U1000 reason
を追加することで、以下のチェックを無視できます。
//lint:ignore U1000 Used by generated code
func UnusedButNeeded() {}
よくある質問
- Q: テストファイル内の未使用関数をどのように処理しますか?
- A:
staticcheck
はデフォルトでテストファイルをチェックします。除外する場合は、-tests=false
などのフラグを使用できます。 - Q: CI/CD 環境への統合は?
- A: GitHub Actions に追加:
サンプル出力
$ staticcheck -checks=U1000 ./...
internal/utils/helper.go:15:2: 関数 privateHelper は使用されていない (U1000)
cmd/server/main.go:23:2: initConfig 関数は使用されていない (U1000)
staticcheck
の U1000
規則を使用することで、未使用の関数を迅速に特定し削除し、コード品質を向上させることができます。