dupl はコード内の重複(コードクローン)を検出するツールです。
解決する問題
コピー&ペーストで類似のコードが複数箇所に存在すると、バグ修正や機能変更の際にすべての箇所を更新する必要があり、修正漏れが発生しやすくなります。dupl は AST(抽象構文木)を解析して構造的に類似したコードを検出するため、変数名や定数値が異なっていても発見できます。
1 | // Before: 構造が同じコードが複数箇所に存在 |
1 | // After: 共通処理を抽出 |
設定
1 | # .golangci.yml 設定例 |
オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
threshold |
int |
150 |
重複と判定する最小トークン数。小さいほど多くの重複を検出する |
サンプル
検出例
1 | // dupl が警告: duplicate of ... (threshold 100) |
修正例
1 | // 共通の JSON レスポンスヘルパーを抽出 |
注意点
- dupl は AST の構造を比較するため、変数名や定数値が異なっていても構造が同じなら重複として検出する
thresholdを小さくしすぎると誤検知が増える。150〜200 が一般的な目安- テストコードではテーブルドリブンテストの各ケースが重複として検出されることがある。
issues.exclude-rulesでテストファイルを除外するか、thresholdを調整する - すべての重複をリファクタリングすべきとは限らない。過度な抽象化はかえって可読性を下げることがある