configure-codacy-cloud について
configure-codacy-cloud は、Codacy Cloud 上で分析済みリポジトリの設定を直接調整するスキルです。クラウド上の issue データを使い、2 回の作業でノイズを減らし、変更内容と理由を記録します。
主な機能
- 01リポジトリと分析状況の前提確認
- 02issue と設定の基準値の記録
- 03対応ツールとクラウド専用ツールの調整
- 042 回の再分析によるノイズ削減
- 05監査記録と JSON サマリーの作成
活用シーン
- 01分析済みリポジトリの Codacy 設定調整
- 02issue 数に基づく低シグナル検出の削減
- 03設定変更とその理由の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ codacy/ codacy-skills --skill configure-codacy-cloudインストール後、Claude Code で/configure-codacy-cloudを入力して読み込まれたか確認します。
詳細
Codacy(Cloud)の設定
用語集: Codacy の概念(issue、finding、severity、coverage、ツール、パターンなど)の共通定義については、glossary.md を参照してください。
このスキルは、Codacy Cloud を信頼できる唯一の情報源として、リポジトリの Codacy 設定を Codacy Cloud 上で直接調整します。ローカル分析は実行しません。現在のクラウド上の issue の状況を読み取り、より有用なツールとパターンを適用して、Codacy 上で再分析を行い、2 回のパスを通じて段階的にノイズを削減します。変更内容とその理由の完全な監査証跡を備えた、クリーンで有用性の高い設定を作成します。
スタックをゼロから特定し、ローカルで codacy-analysis analyze を実行するローカル優先の方法には、代わりに configure-codacy スキルを使用してください。このスキルは、Codacy に登録済みで分析が完了しているリポジトリのクラウド設定をそのまま調整する場合に使用します。
前提条件と要件
- Codacy Cloud CLI(
codacy) — クラウド上での読み取り、更新、再分析をすべて実行します。セットアップについてはcodacy-cloud-cliを参照してください。 - Codacy Analysis CLI(
codacy-analysis) — 設定ファイルの操作(init --remote、init --auto、config --merge)にのみ使用します。セットアップについてはcodacy-analysis-cliを参照してください。 - 両方の CLI は
~/.codacy/credentialsの認証情報を共有するため、1 回ログインすれば両方で使用できます。
このスキルには、必須要件が3 つあります。それ以外の作業を始める前に、3 つすべてを確認してください。いずれかを満たさない場合は、明確な案内を示して作業を中止してください。
-
リポジトリがすでに Codacy に登録されていること。 次のコマンドで確認します。
codacy repo --output json失敗した場合(Codacy に登録されていない、または認証されていない場合)は中止してください。まずリポジトリを Codacy に追加するようユーザーに伝えてください(例:
codacy repo --add)。このスキルでは新しいリポジトリをセットアップしません。 -
リポジトリで少なくとも 1 回、分析が完了していること。
codacy repo --output jsonの出力から完了済み/直近の分析を示す情報を調べ、課題の概要でデータが返されることを確認します。codacy issues -O -o json 2>/dev/null | jq '.'リポジトリが一度も分析されていない場合、または分析の実行中の場合は中止してください。最初の分析が完了するまで待つようユーザーに伝えてください。処理全体でクラウド上の課題データをベースラインとして使用するためです。
-
Cloud CLI のバージョンが 1.3.0 以上であること(
fileCountの設定に必要です)。次のコマンドで確認します。codacy repo -o json 2>/dev/null | jq -e '.repository.fileCount != null'falseが出力された場合(またはエラーが発生した場合)は中止してください。インストール済みの Cloud CLI は 1.3.0 より古く、概要のfileCountフィールドが設定されません。ユーザーに、少なくとも 1.3.0 にアップグレード(npm install -g @codacy/codacy-cloud-cli@latest)してから再実行するよう伝えてください。この確認でhas("fileCount")ではなく!= nullを使うのは、キーが存在しない場合と値が明示的に null の場合の両方を除外するためです。また、現在の CLI では--versionの文字列が固定されているため、--versionではなく機能の有無を確認しています。
Cloud CLI はリポジトリ内で実行すると、git のリモートから provider、organization、repository を自動検出するため、以下に示す明示的な <provider> <org> <repo> 引数は、実際には省略できます。
CLI 出力に関する注意: どちらの CLI も JSON 出力の前に進捗状況を stderr に出力します。jq にパイプする場合は、stderr をリダイレクトしてください:codacy ... -o json 2>/dev/null | jq '...'。
codacy patterns のページネーションに関する注意: codacy patterns <tool> [--enabled] は現在、最初の 100 件のパターンのみを返し、--limit フラグもありません(今後追加予定ですが、それまでは一覧が 100 件で切り詰められるものとして扱ってください)。出力件数をパターン数として使用しないでください。有効なパターンが 100 件を超えるツールでは、気付かないまま 100 件しか表示されず、見かけ上、パターンが「減少」したように見えるためです(たとえば、実際には有効なパターンが 232 件あるツールでも、「100 件」と表示されます)。特定のパターンを確認またはテストするには、--search <patternId> で ID を絞り込むか、codacy pattern <tool> <patternId> -o json でそのパターンを個別に照会してください。有効なパターンの正確な件数を調べるには、パターン一覧ではなく設定ファイルから算出してください(jq '[.tools[].patterns|length]|add' .codacy/auto.config.json)。
ローカル設定は変更されません。 このスキルはカスタムの --config-file パス(.codacy/remote.config.json、.codacy/auto.config.json)を使って処理し、.codacy/codacy.config.json を作成または変更することはありません。既存のローカル設定はそのまま保持されます。
このスキルの仕組み
基本原則はローカル版と同じです。シグナルの多いセットから始め、データを使ってノイズを減らすという考え方ですが、すべての測定と変更は Codacy Cloud 上で行います。
ツールは2つのグループに分かれており、変更は2つの異なる方法で適用されます。
- Analysis CLI がサポートするツール(
codacy-analysis infoに表示されるツール。supported-tools.md を参照)は、.codacy/auto.config.jsonファイルを編集してインポートすることで設定します。codacy tools --import .codacy/auto.config.json。インポートによって、サポート対象のツールがファイルの内容と同期されます。ファイルに含まれるサポート対象のツールはパターンがファイルの内容に置き換えられ、ファイルに含まれないサポート対象のツールは、インポートによって無効化されます(インポート計画にN tool will be disabled: ...と表示されます)。Cloud 専用ツール(Analysis CLI の対象外のツール)はファイルに含まれず、状態も維持されます。 - Cloud 専用ツール(Codacy では有効ですが、Analysis CLI では実行できないツール。例:SonarSharp、Codacy ScalaMeta Pro)は、インポートでは設定できません。Cloud CLI を使って直接変更します。
codacy tool、codacy pattern、codacy patterns。
Cloud のツール名と設定の toolId。 Cloud CLI のコマンド(codacy tool、codacy pattern、codacy patterns)では、codacy tools に表示されるCloud 上の名前でツールを指定します。この名前は、一部のツールでは Analysis CLI の設定における toolId と異なります。最もわかりやすい例は、設定の toolId が Semgrep である一方、Cloud 上のツール名は Opengrep であるケースです。そのため、codacy patterns Semgrep は Tool "Semgrep" not found というエラーになりますが、codacy patterns Opengrep は動作します。Cloud CLI のコマンドでツールが見つからないと表示された場合は、codacy tools -o json で名前を確認し、その名前を使ってください(toolId をキーとするインポート方法には影響しません)。
auto.config.json を編集する前に、設定形式のリファレンスをお読みください。構造は次のとおりです。最上位に tools[] 配列があり、各要素は toolId(例:"Biome"、"Semgrep"、"ESLint9")をキーとし、patternId をキーとする要素と省略可能な parameters オブジェクトを含む patterns[] 配列を持ちます。これらの要素に uuid、name、enabled キーはありません。そのため、toolId/patternId で絞り込んで編集してください。パターンを無効にするには patterns 配列から削除し、調整するには parameters を編集します。ツールを無効にするには、ツールの要素全体を削除します。
ワークフロー
Configuration Progress:
- [ ] Startup: verify requirements, capture baseline, import cloud config, split tools
- [ ] First pass: generate + merge config, first noise cut, apply, reanalyze
- [ ] Second pass: evaluate impact, second noise cut, apply, reanalyze
- [ ] Final: capture after metrics, evaluate, emit JSON summary, clean up
初期設定
-
一時ディレクトリを作成します:
mkdir -p .codacy/tmp -
ベースラインの概要(変更前の参照値)を取得します:
codacy issues -O -o json 2>/dev/null > .codacy/tmp/overview-before.jsonこの概要は、変更前の
issues合計、issuesByCategoryとissuesBySeverityの内訳、およびパターンごとの issue 数と誤検出数の情報源です。概要 JSON の構造(出力はトップレベルの
overviewキーの下にネストされています。フィールド名がフラットだと想定しないでください):.overview.categories[]→{ name, total }— 例:Security、ErrorProne、CodeStyle。変更前のissues合計は、.overview.categories[].totalの合計です。.overview.levels[]→{ name, total }— これらは重大度の区分ですが、Error/High/Warning/Infoという名前が付いています。概要の重大度名には次のように対応させます:Error→Critical、High→High、Warning→Medium、Info→Minor。.overview.patterns[]→{ id, title, total }— パターンごとの issue 数です。jq '.overview.patterns | sort_by(-.total)'で並べ替えます。これはノイズの主要な指標です。件数が最も多いパターンから対処してください。.overview.potentialFalsePositives[]→{ name, total }。
CLI のバージョンによって推奨アクション(全 issue の 10%以上、またはパターンごとの平均件数の 3 倍以上を占め、すぐ実行できる無効化コマンドが付いたパターン)が表示される場合は、それを利用してください。ただし、フィールドが存在することを前提にしないでください。上記のパターンごとの件数が信頼できる指標です。
-
現在のクラウド設定をファイルにインポートします:
rm -f .codacy/remote.config.json codacy-analysis init --remote <provider> <org> <repo> --config-file .codacy/remote.config.json(
init --remoteは既存の対象ファイルを上書きしないため、rm -fを使用します。)これにより、Analysis CLI がサポートするツールのクラウド設定を取得できます。 -
ツールをサポート対象とクラウド専用に分けます:
# Tools the Analysis CLI can configure via import codacy-analysis info 2>/dev/null # Tools currently enabled on Codacy Cloud codacy tools -o json 2>/dev/null | jq '[.[] | select(.settings.isEnabled == true) | .name]'クラウドで有効になっているツールのうち、
codacy-analysis infoの一覧にないものはクラウド専用です。それらを記録してください。パターンの変更には Cloud CLI のみを使い、インポート経由では変更しないでください。 -
コーディング規約によるロックインを早めに検出します。 リポジトリが従っているコーディング規約を確認してください:
codacy repo -o json 2>/dev/null | jq '.repository.repository.standards'該当する規約がある場合、一部のツール/パターンは規約によって強制されており、リポジトリレベルでは変更できないことを想定してください。後で無効化または調整する予定のツールやパターンについては、まず
enabledByフィールドを確認してください。enabledByが空でない場合、そのツールやパターンはコーディング規約によって強制されており、無効化は 409 で拒否されます:codacy pattern <toolName> <patternId> -o json 2>/dev/null | jq '.enabledBy' # [] / null ⇒ repo-level (changeable); [{name: ...}] ⇒ standard-enforced (locked)規約によって強制されているツール/パターンは、拒否される呼び出しを試して判明するのではなく、あらかじめ
conflicts[]に分類してください。これにより、無駄な試行錯誤を避け、ノイズ対策計画で実際に達成できることを正確に示せます。規約のリンク解除は決して行わず、--forceも使用しないでください。 -
変更前の件数を記録します:
# Enabled tools codacy tools -o json 2>/dev/null | jq '[.[] | select(.settings.isEnabled == true)] | length' # Enabled patterns for supported tools (from the imported config) jq '[.tools[].patterns | length] | add' .codacy/remote.config.jsonクラウド専用ツールについては、ツールごとに
codacy patterns <tool> --enabled -o json 2>/dev/null | jq 'length'を実行し、有効なパターン数を追加してください。ただし、前述のページネーションに関する注意点に留意してください。ここで取得できるのは最大 100 件のため、有効なパターンが 100 件を超えるクラウド専用ツールは過少カウントになります。変更前のenabledPatternsは、サポート対象ツールの件数とクラウド専用ツールの件数の合計です。変更前のenabledToolsは、有効なツールの数です。 -
概要用にリポジトリレベルの記述情報を取得します:
codacy repo -o json 2>/dev/null > .codacy/tmp/repo.json jq '.repository.repository.languages | length' .codacy/tmp/repo.json # → languageCount jq '.repository.fileCount' .codacy/tmp/repo.json # → fileCount応答をディスクにキャッシュし、両方のフィールドを 1 回の呼び出しから読み取ります。これはリポジトリの状態を示すスナップショットであり、変更前/変更後の指標ではありません。
summary直下にスカラー値として格納します。
1 回目
-
シグナルの高い自動設定を生成します:
rm -f .codacy/auto.config.json codacy-analysis init --auto "AllSecurity,ErrorProne,Performance,BestPractice,Compatibility,Critical,High" --config-file .codacy/auto.config.jsonこのフィルターは、ローカル版の幅広い設定よりも意図的に厳しくしてあります。セキュリティ関連、エラーが発生しやすい箇所、重大度の高い検出結果を優先し、価値の低いスタイル関連のノイズでクラウドがあふれないようにします。
-
現在のクラウド設定を自動設定にマージします(和集合、リモート → 自動):
codacy-analysis config --merge --source .codacy/remote.config.json --dest .codacy/auto.config.json--destは和集合で上書きされるため、.codacy/auto.config.jsonには、クラウドですでに有効になっているパターン(サポート対象ツールの場合)と、新たに提案されたパターンの両方が格納されます。これはインポート経路で使用する作業用設定です。 -
.codacy/tmp/overview-before.jsonに基づいて最初のノイズ評価を行います。問題数の多いパターンから順に、ノイズ評価ガイドラインに従って作業します:- 概要に示された推奨アクション、パターンごとの件数、誤検出率から始めます。
- ノイズの多いパターンをパラメーター(Lizard CCN/NLOC などの複雑度しきい値や行の長さ制限)で調整できる場合は、無効化するのではなくパラメーターを引き上げます。
- それ以外の場合、ノイズが多く関連性もないパターンは無効化します。
- 判断する前にパターンの具体例を確認するには、次を実行します:
codacy issues -p <patternId> -o json 2>/dev/null | jq '.'。
-
変更を適用します(2 つの方法):
- サポート対象ツール —
.codacy/auto.config.jsonを編集して(無効化するパターンを削除し、調整する場合はparametersを編集し、ツールを無効化する場合はツールのエントリーを削除)、その後インポートします:codacy tools --import .codacy/auto.config.json -y - クラウド専用ツール — Cloud CLI で直接変更します:
codacy pattern <provider> <org> <repo> <tool> <patternId> --disable codacy pattern <provider> <org> <repo> <tool> <patternId> --parameter threshold=20 codacy patterns <provider> <org> <repo> <tool> --categories CodeStyle --severities Minor --disable-all codacy tool <provider> <org> <repo> <tool> --disable - 変更が409 conflictで拒否された場合 — パターンまたはツールが Coding Standard によって強制されているか、ツールが独自の Configuration File を使用しています —
conflicts[]に記録して次に進みます。標準のリンクは解除せず、--forceも使用しないでください。
- サポート対象ツール —
-
再解析を実行して完了まで待ちます:
codacy repo --reanalyze-and-wait -o json 2>/dev/null > .codacy/tmp/delta-pass1.jsonこれにより Codacy で再解析が開始され、完了までポーリングされ(最大約 20 分)、パターン、重大度、カテゴリごとの問題の変化を示す差分レポートが返されます。タイムアウトした場合は、その旨を記録して次に進みます。
2 回目のパス
-
概要を更新し、ベースラインと比較します:
codacy issues -O -o json 2>/dev/null > .codacy/tmp/overview-pass1.jsondelta-pass1.jsonを読み込み、overview-pass1.jsonとoverview-before.jsonを比較して、1 回目のパスでパターン、カテゴリ、重大度ごとに実際に何が変わったかを確認します。 -
2 回目のノイズ評価 — シグナルの精度を高めます:
- 1 回目のパスを通過した、残りのノイズの多いパターンを減らします。
- 新たに有効にしたパターンを評価します。関連性のある問題が見つかりましたか、それともノイズでしたか? このコードベースには関係がない、または誤検出しか出さなかったパターンは無効にします(以下のガイダンスにある Security パターンにも同じ注意を適用します)。
- 問題件数のガードレール: このスキルの目標の 1 つは、結果を「より少なく、より関連性の高いもの」にすることです。問題の合計件数がベースラインより大幅に増えた場合は、新たに有効にしたパターンのうち何を削るかを判断します。次のいずれかに該当しない限り、最終件数がベースラインを上回るのは警告サインです:(a)リポジトリの初期設定が非常に最小限だった(ある程度の増加は想定内で、健全です)、または(b)ベースラインのノイズの大部分がコーディング標準によって強制されており、リポジトリ側では削減できなかった。この(b)の場合、合計件数が横ばい、または増加するのは想定内であり、失敗ではありません。ロックされたパターン/ツールを
conflicts[]に記録し、標準の編集を推奨します。また、見出しの件数を無理に下げるために、真に有用な新しい検出結果(特に Security)まで削りすぎないでください。適切に判断し、価値の高い新しい検出結果は残し、それ以外を減らしてください。
-
同じ二重の仕組みを使って、変更を再度適用します。 サポート対象のツールでは
.codacy/auto.config.jsonを編集し、codacy tools --import .codacy/auto.config.jsonを実行します。クラウドのみのツールではcodacy pattern/patterns/toolを使います。新たに発生した 409 の競合はconflicts[]に記録します。 -
再解析して待機します:
codacy repo --reanalyze-and-wait -o json 2>/dev/null > .codacy/tmp/delta-pass2.json
最終
-
最終状態を記録します:
codacy issues -O -o json 2>/dev/null > .codacy/tmp/overview-after.json -
AFTER の件数を記録します: 有効なツールは
codacy tools -o jsonから記録します(有効数)。有効なパターンは、.codacy/auto.config.jsonにあるサポート対象ツールのパターン数と、クラウドのみで有効なパターン数(ツールごとのcodacy patterns <tool> --enabledの件数。100 件が上限です。ページネーションに関する注意事項を参照)を合算します。問題の合計件数とカテゴリ/重大度ごとの内訳はoverview-after.jsonから記録します。変更できなかったツール(標準によって強制されるツールなど)は、上限付きのパターン一覧から再集計せず、BEFORE の件数をそのまま引き継ぎます。 -
結果を評価します。 必要に応じて、特定のツールやパターンを調べて確認します(
codacy patterns <tool> --enabled -o json、codacy tool <tool> -o json)。次の点を特定します:- うまくいった点 — ノイズの削減と、新たに検出された関連性の高い問題(特に Security)。
- うまくいかなかった点 — ツール独自の設定ファイルを使用している、またはコーディング標準によって強制されているため、無効にできなかったノイズの多いパターン。これらは
conflicts[]に記録します。 - パターン以外の推奨事項 — 不釣り合いに多くのノイズを発生させている、または将来的にノイズの原因となりうるファイルやパスで、無視を検討できるもの。これらは推奨事項としてのみ
recommendedPathsToIgnore[]に記録します。(クラウドのファイル除外は、デフォルトブランチにコミットする.codacy.yamlで適用します。この点をユーザーに伝えますが、ファイルの作成や変更は行いません。)
-
要約を
.codacy/configure-codacy-cloud-summary.jsonに書き込み(以下のスキーマを参照)、変更前後の簡潔な要約をユーザーに提示します。内容には、指標の表(パターン、ツール、問題、カテゴリ別、重大度別)、主な改善点、変更を妨げた競合、無視を推奨するパスを含めます。 -
クリーンアップ:
rm -rf .codacy/tmp .codacy/remote.config.json .codacy/auto.config.json
Summary JSON
.codacy/configure-codacy-cloud-summary.json を書き込みます。before の値は起動時のベースラインから、after の値は最終的な概要から取得します。
{
"summary": {
"languageCount": 4,
"fileCount": 83,
"enabledPatterns": { "before": 1000, "after": 300 },
"enabledTools": { "before": 34, "after": 15 },
"issues": { "before": 7000, "after": 550 },
"issuesByCategory": {
"Security": { "before": 56, "after": 89 },
"ErrorProne": { "before": 140, "after": 123 },
"CodeStyle": { "before": 3000, "after": 230 }
},
"issuesBySeverity": {
"Critical": { "before": 56, "after": 89 },
"High": { "before": 140, "after": 123 },
"Medium": { "before": 900, "after": 210 },
"Minor": { "before": 5904, "after": 128 }
}
},
"toolChanges": [
{
"toolName": "Biome",
"action": "disabled",
"reason": "Project uses ESLint9 with local config; Biome is redundant and produced 16K false positives in TypeScript",
"patternsAffected": 232
},
{
"toolName": "AgentLinter",
"action": "enabled",
"reason": "New tool added for linting agent instruction files",
"patternsAffected": 43
}
],
"patternChanges": [
{
"patternId": "Semgrep_python.lang.security.audit.xss.template-injection",
"toolName": "Semgrep",
"action": "disabled",
"reason": "Wrong stack — pattern for Python; project is JavaScript-only",
"deltaIssues": -45,
"parameters": []
},
{
"patternId": "Lizard_ccn-medium",
"toolName": "Lizard",
"action": "updated",
"reason": "Raised threshold from 10 to 20 to match codebase complexity profile",
"deltaIssues": -120,
"parameters": [
{ "id": "threshold", "before": "10", "after": "20" }
]
},
{
"patternId": "Semgrep_codacy.javascript.security.hard-coded-password",
"toolName": "Semgrep",
"action": "enabled",
"reason": "New High Security pattern — detects hardcoded passwords; found 101 issues across 41 files for review",
"deltaIssues": 101,
"parameters": []
}
],
"recommendedPathsToIgnore": [
{
"path": "src/generated/**",
"reason": "Generated code. Recommended to be ignored to avoid uncontrolled issues."
},
{
"path": "src/tests/mocked.json",
"reason": "Triggers a significant amount of security false positives (hardcoded passwords and secrets). Could be ignored."
}
],
"keyImprovements": [
"Lizard complexity thresholds tuned to match a mature React SPA — 576 fewer noise issues while keeping genuinely complex functions flagged",
"6 new security patterns detecting open redirects, unsafe dynamic methods, hardcoded passwords, and React href injection (119 new findings)",
"AgentLinter added for agent instruction file quality",
"Checkov expanded from 6 to 56 IaC security patterns"
],
"conflicts": [
{
"toolName": "Biome",
"conflict": "EnforcedByCodingStandard",
"codingStandardName": "Default Security Rules",
"reason": "Whole-tool conflict (no patternId). Biome is redundant with the project's ESLint9 yet produces most of the noise; disabling the tool was rejected with 409 because a coding standard enforces it. Recommend removing Biome from the coding standard."
},
{
"patternId": "Semgrep_codacy.javascript.avoid_undefined_identifier",
"toolName": "Semgrep",
"conflict": "EnforcedByCodingStandard",
"codingStandardName": "Default Security Rules",
"reason": "Reports 1k+ low-relevance issues but is enforced by a coding standard, so it could not be disabled. Recommend disabling it in the coding standard."
},
{
"patternId": "ESLint9_unused_import",
"toolName": "ESLint9",
"conflict": "ConfigurationFile",
"reason": "ESLint9 uses the project's own config file, so this pattern cannot be changed from Codacy. Adjust the project's ESLint config instead."
}
]
}
フィールドのリファレンス
summary— リポジトリの記述子と、変更前後の件数です。languageCountはcodacy repo -o jsonの.repository.repository.languagesの長さ、fileCountは同じ呼び出しの.repository.fileCountです。どちらも起動時に一度だけ取得するリポジトリの状態のスナップショットであり、変更前後の値の組ではありません。enabledPatterns/enabledToolsは、Codacy で有効になっているすべての項目(サポート対象+クラウド専用)を数えます。issuesByCategory/issuesBySeverityは、問題の概要にある内訳から取得します(レベルの対応付けはError→Critical/High→High/Warning→Medium/Info→Minorを適用します)。toolName(toolChanges、patternChanges、conflictsで使用)—codacy toolsに表示されるツール名(実際に保存して操作するクラウド側の識別子)です。Analysis CLI の設定におけるtoolIdとは異なる場合がある点に注意してください。toolChanges— ツール全体を有効化または無効化した場合に、ツールごとに1つのエントリーを記載します。actionは"enabled"または"disabled"です。patternsAffectedは、そのツールに含まれるパターンの数です。patternChanges— 有効のまま維持されるツール内の個々のパターンを変更した場合に、変更ごとに1つのエントリーを記載します。actionは"enabled"、"disabled"、または"updated"です。deltaIssuesは、このパターンの問題数のベースラインと最終値の差です。parametersは調整したパラメーターの{id, before, after}の配列で、それ以外の場合は[]です。ツール全体の変更に伴って追加または削除されたパターンは記載しないでください。それらはtoolChangesで扱います。recommendedPathsToIgnore—{path, reason}の配列です。これは推奨のみで、リポジトリには何も書き込まれません。keyImprovements— 最も大きな影響を与えた変更をまとめた、人が読める3〜6文です。ユーザーへの提示に適した内容にします。conflicts— 試みたもののブロックされた変更の配列です。patternIdは省略可能です。コーディング標準によってツールを無効化できない場合など、ツール全体の競合では省略し、パターンレベルの競合では含めます。conflictは"EnforcedByCodingStandard"(codingStandardNameを含めます)または"ConfigurationFile"です。reasonには、報告された内容と推奨する対応(コーディング標準を編集する/ツール独自の設定ファイルを編集する)を記載します。
ノイズ評価のガイダンス
関連性に応じて適切に判断してください。重要なパターンを無効化する場合は慎重に、関連性の低いノイズにはより寛容に対応します。
- セキュリティパターンには特に注意してください。 コードベースに無関係(使用していないスタックやフレームワーク向け)な場合や、誤検知のみを出す場合は、セキュリティパターンを無効化しても問題ありません。ただし、セキュリティパターンを無効化する前には十分に確認し、よく考えてください。判断に迷う場合は、実際の例を先に調べ(
codacy issues -p <patternId> -o json)、無効化ではなく、パラメーターの調整やパスの無視の推奨を優先してください。 - Critical または High の重大度のパターンを安易に無効化しないでください。 明らかに異なるスタック向けであるか、誤検知が確認された場合に限り、無効化します。
- 関連性の低いカテゴリには寛容に対応してください。 CodeStyle、Documentation、Comprehensibility、および Minor 重大度の問題は、ノイズが多い場合やプロジェクトの規約に合わない場合に、最初に削減する対象です。
- しきい値を設定できる場合は、無効化よりもパラメーターの調整を優先してください(Lizard の複雑度、行の長さ、パラメーター数など)。ルールを有効に保ちながらノイズを減らせます。
- スタックが異なる場合は無効化します。 リポジトリに存在しない言語やフレームワーク向けのパターンは、すべてノイズです。
- 重複を排除します。 2つのツールが同じ懸念を検出する場合は、より正確なツールのパターンを残し、重複する方を無効化します。これにより、その懸念への対処を維持できます。
- 判断前に調査してください。 判断が難しいパターンについては、問題を一覧表示し(
codacy issues -p <patternId>)、無効化する前に実際の例を確認してください。
ツールごとの調整のヒント
- Semgrep — 30 以上の言語に対応するパターンが付属しています。リポジトリで使用していない言語のパターンを無効にすると、通常、ノイズを大幅に減らせます。パターン ID のプレフィックス(例:
python.,javascript.,java.)を参照してください。 - Lizard(複雑度) — CCN、NLOC、パラメーター数のルールがあり、
thresholdパラメーターを設定できます。成熟したコードベースでは、ルールを無効にするのではなく、中程度のしきい値をプロジェクトの特性に合わせて引き上げることで、実際に複雑なコードを見つけやすくできます。 - ESLint9 / Stylelint — リポジトリに独自の設定ファイルがあり、それを Codacy で使用している場合、ツールは Configuration File モードで実行されます。Codacy からパターンを変更することはできません(これらは
ConfigurationFileの競合として表示されます)。この点をユーザーに伝えてください。ノイズはプロジェクト独自の設定で減らす必要があります。 - markdownlint — MD033(インライン HTML)、MD034(裸の URL)、MD024(見出しの重複)などのルールは、変更履歴や生成されたドキュメントで頻繁に検出されます。これらはスタイル上のルールです。ノイズをそのままにするのではなく、ノイズの多いパスを無視することを推奨してください。