mcpField
C
code-hardcode-audit

code-hardcode-audit

github.com/terrylicaテスト・品質1163 回インストール1 日前に更新
リポジトリ

code-hardcode-audit について

複数のスキャンツールで、ハードコード値、重複コード、漏えいしたシークレットを調べるコード監査スキルです。ツールや重大度で絞り込み、JSONまたはコンパイラー風のテキストで結果を出力します。

主な機能

  1. 01ツールと設定の事前確認
  2. 02ハードコード値とマジックナンバーの検出
  3. 03シークレットや認証情報のスキャン
  4. 04重複コードブロックの検出
  5. 05JSONまたはテキストでのレポート出力

活用シーン

  1. 01コードベースのハードコード値監査
  2. 02漏えいしたキーやパスワードの検出
  3. 03重複コードや定数違反の特定

インストール

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

$npx skills add https://github.com/terrylica/cc-skills --skill code-hardcode-audit

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
semgrep-hardcode-rules.yaml
assets/ast-grep-hardcode/
sgconfig.yml
assets/ast-grep-hardcode/rules/python/
hardcoded-numeric-arg.yml
hardcoded-path-string.yml
hardcoded-sleep.yml
hardcoded-url-string.yml
references/
evolution-log.md
output-schema.md
tool-comparison.md
troubleshooting.md
scripts/
audit_env_coverage.py
audit_hardcodes.py
preflight.py
run_ast_grep.py
run_bandit.py
run_gitleaks.py
run_jscpd.py
run_ruff_plr.py
run_semgrep.py
run_trufflehog.py
run_whispers.py

詳細

コードのハードコード監査

自己進化型スキル:このスキルは使用を通じて改善されます。手順に誤りがある、パラメーターがずれている、または回避策が必要だった場合は、後回しにせず、すぐにこのファイルを修正してください。更新するのは、実際に再現可能な問題がある場合に限ります。

このスキルを使うタイミング

ユーザーが次のような語句を挙げた場合に、このスキルを使います。

  • 「ハードコードされた値」、「ハードコード」、「マジックナンバー」
  • 「定数の検出」、「定数を探す」
  • 「重複した定数」、「DRY 違反」
  • 「コード監査」、「ハードコード監査」
  • 「PLR2004」、「semgrep」、「jscpd」、「gitleaks」、「ast-grep」、「SSoT 違反」
  • 「シークレットスキャン」、「漏えいしたシークレット」、「API キー」、「bandit」、「trufflehog」、「whispers」
  • 「コード内のパスワード」、「認証情報の漏えい」、「エントロピー検出」
  • 「設定ファイルのシークレット」、「ハードコードされた認証情報」

クイックスタート

# Preflight — verify all tools installed and configured
uv run --python 3.14 --script scripts/preflight.py -- .

# Full audit (all 9 tools, preflight + both outputs)
uv run --python 3.14 --script scripts/audit_hardcodes.py -- src/

# Individual tools (all respect .gitignore):

# Python credential detection (passwords, tokens, API keys in variable names)
uv run --python 3.14 --script scripts/run_bandit.py -- src/

# Entropy-based secret detection (catches secrets regex can't)
uv run --python 3.14 --script scripts/run_trufflehog.py -- src/

# Config file secrets (YAML, JSON, Dockerfile, .env, .properties)
uv run --python 3.14 --script scripts/run_whispers.py -- src/

# AST-based hardcode detection (numeric args, URLs, paths, sleep)
uv run --python 3.14 --script scripts/run_ast_grep.py -- src/

# Python magic numbers only (fastest)
uv run --python 3.14 --script scripts/run_ruff_plr.py -- src/

# Pattern-based detection (URLs, ports, paths, sleep, circuit breaker)
uv run --python 3.14 --script scripts/run_semgrep.py -- src/

# Env-var coverage audit (BaseSettings cross-reference)
uv run --python 3.14 --script scripts/audit_env_coverage.py -- src/

# Copy-paste detection
uv run --python 3.14 --script scripts/run_jscpd.py -- src/

# Regex-based secret scanning (API keys, tokens, passwords)
uv run --python 3.14 --script scripts/run_gitleaks.py -- src/

ツールの概要

ツール検出対象言語サポート速度
Preflightツールの利用可否と設定の検証N/A即時
BanditPython 内のハードコードされたパスワード、トークン(B105-7)Python高速
TruffleHogエントロピーに基づくシークレット検出と API 検証任意(ファイルベース)中速
Whispers設定ファイル内のシークレット(YAML、JSON、Docker、.env)設定ファイル中速
ast-grep引数、sleep、URL、パス内のハードコードされたリテラル複数言語高速
Ruff PLR2004マジック値の比較Python高速
SemgrepURL、ポート、パス、認証情報、リトライ設定複数言語中速
Env-coverageBaseSettings の相互参照、カバレッジの不足Python高速
jscpd重複したコードブロック複数言語低速
gitleaks正規表現ベースのシークレット、API キー、パスワード任意(ファイルベース)高速

出力形式

JSON(--output json)
{
  "summary": {
    "total_findings": 42,
    "by_tool": { "ruff": 15, "semgrep": 20, "jscpd": 7 },
    "by_severity": { "high": 5, "medium": 25, "low": 12 }
  },
  "findings": [
    {
      "id": "MAGIC-001",
      "tool": "ruff",
      "rule": "PLR2004",
      "file": "src/config.py",
      "line": 42,
      "column": 8,
      "message": "Magic value used in comparison: 8123",
      "severity": "medium",
      "suggested_fix": "Extract to named constant"
    }
  ],
  "refactoring_plan": [
    {
      "priority": 1,
      "action": "Create constants/ports.py",
      "finding_ids": ["MAGIC-001", "MAGIC-003"]
    }
  ]
}
コンパイラー風テキスト(--output text)
src/config.py:42:8: PLR2004 Magic value used in comparison: 8123 [ruff]
src/probe.py:15:1: hardcoded-url Hardcoded URL detected [semgrep]
src/client.py:20-35: Clone detected (16 lines, 95% similarity) [jscpd]

Summary: 42 findings (ruff: 15, semgrep: 20, jscpd: 7)

CLI オプション

--output {json,text,both}  Output format (default: both)
--tools {all,ast-grep,ruff,semgrep,jscpd,gitleaks,env-coverage,bandit,trufflehog,whispers}  Tools to run
--severity {all,high,medium,low}  Filter by severity (default: all)
--exclude PATTERN  Glob pattern to exclude (repeatable)
--no-parallel  Disable parallel execution
--skip-preflight  Skip tool availability check

参考資料

関連項目

  • ADR-0046:セマンティック定数の抽象化
  • ADR-0047:コードのハードコード監査スキル
  • code-clone-assistant - PMD CPD ベースのクローン検出(DRY 重視)

トラブルシューティング

問題原因解決策
Ruff PLR2004 の出力がゼロPLR2004 がグローバルに抑制されているプレフライトを実行します:uv run --python 3.14 --script scripts/preflight.py -- .
Ruff PLR2004 が見つからないRuff がインストールされていない、または古いuv tool install ruff を実行するか、アップグレードします
ast-grep が見つからないバイナリがインストールされていないcargo install ast-grep または brew install ast-grep を実行します
Semgrep がタイムアウトする大規模なコードベースのスキャン--exclude を使って対象範囲を絞ります
jscpd のメモリエラーファイルが多すぎるNode のヒープを増やします:NODE_OPTIONS=--max-old-space-size=4096
gitleaks の誤検出テストデータが検出された.gitleaks.toml の許可リストにパターンを追加します
Env-coverage の見落としBaseSettings を使用していないpydantic BaseSettings のみを検出します。他の設定パターンはスキップされます
出力に検出結果がない指定したディレクトリが間違っているパスが存在し、ソースファイルが含まれていることを確認します
JSON の解析エラーツールの出力形式が不正--output text を付けてツールを個別に実行します
PATH にツールがないツールがグローバルにインストールされていないまずプレフライトを実行し、不足しているツールをインストールします
Bandit の誤検出初期化時に password = '' がある信頼度で B105 をフィルターします:--confidence HIGH
TruffleHog がタイムアウトする.venv/node_modules をスキャンしているすべてのツールは .gitignore を尊重します。大きなディレクトリが gitignore されていることを確認してください
TruffleHog の正規表現エラー.gitignore に glob パターンがある複雑な glob(**/*.rs.bk)は自動的にスキップされます。単純な名前のみが使用されます
Whispers のスキャンが遅いディレクトリが大きい.gitignore で除外します。whispers の設定はそこから自動生成されます
Whispers の検出結果がゼロ対象範囲に設定ファイルがないWhispers は YAML/JSON/Docker/INI を対象とします。src/ ではなくプロジェクトのルートで使用してください
重大度フィルターが空そのレベルの検出結果がない--severity all を使ってすべての検出結果を表示します

実行後の振り返り

このスキルの実行が完了したら、終了する前に確認してください:

  1. コマンドは成功しましたか? — 成功しなかった場合は、失敗の原因となった指示またはエラー表を修正してください。
  2. パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、使用例とパラメーター表を合わせて更新してください。
  3. 回避策が必要でしたか? — 即興の対応(異なるフラグ、追加の手順)が必要だった場合は、次回の実行で同じ回避策が不要になるよう、この SKILL.md を更新してください。

問題が実際に発生し、再現可能な場合にのみ更新してください。推測に基づいて更新しないでください。

コメント