mcpField
S
sonar-coverage

sonar-coverage

github.com/sonarsourceテスト・品質11444 回インストール今日更新
リポジトリ

sonar-coverage について

sonar-coverageは、SonarQubeのテストカバレッジを確認するスキルです。カバレッジが不足するファイルの一覧や、個別ファイルの未カバー行を調べたい開発者向けです。

主な機能

  1. 01カバレッジ順のファイル一覧
  2. 02しきい値によるファイル絞り込み
  3. 03ファイルの行単位の詳細表示
  4. 04プルリクエストの分析

活用シーン

  1. 01プロジェクトでカバレッジが低いファイルの特定
  2. 02指定したしきい値を下回るファイルの絞り込み
  3. 03ファイル内の未カバー行の特定
  4. 04プルリクエストのカバレッジ分析

MCP 対応

SonarQube MCP サーバーのファイルカバレッジ検索ツールと詳細取得ツールを利用します。利用できない場合は、sonar api CLIに切り替えられます。

インストール

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

$npx skills add https://github.com/sonarsource/sonarqube-agent-plugins --skill sonar-coverage

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

詳細

SonarQube — カバレッジ

テストカバレッジが不十分なファイルを特定し、テストが必要な正確な行を特定します。

使用方法

sonar-coverage                              # worst-covered files in the current project
sonar-coverage my-project                   # worst-covered files in a specific project
sonar-coverage my-project --max 50          # only files with coverage <= 50%
sonar-coverage my-project --file src/auth/login.py  # line-by-line detail for one file

前提条件

このスキルを使用するには、SonarQube MCP Server が設定されており、ツール mcp__sonarqube__search_files_by_coverage と mcp__sonarqube__get_file_coverage_details をセッションで使用できる必要があります。

先に進む前に、ツールを利用できることを確認してください。利用できない場合は、あきらめる前にステップ 3 の sonar api CLI フォールバックを試してください。他の CLI コマンド(例:sonar mcp call や sonar coverage は存在しません)を作り出してはいけません。

CLI フォールバックも失敗した場合(たとえば sonar がインストールされていない、認証されていない、またはプロジェクトキーを解決できない場合)は、原因を絞り込んでください。このエージェントの設定で sonarqube MCP サーバーが有効になっているか確認します。

  • 有効になっていない/登録されていない → sonar-integrate スキルの実行を推奨します。
  • 有効になっているが、ツールを引き続き利用できない → 設定は正しいものの、サーバーの起動に失敗しています。最も一般的な原因は、コンテナランタイムが起動していないことです。MCP サーバーは sonar run mcp を介して Docker/Podman/Nerdctl 内で起動するため、デーモンが停止していると、サーバーが正しく設定されていてもツールは表示されません。どちらの原因に該当するかを確認するため、docker ps を自分で実行してください(失敗した場合は podman ps/nerdctl ps を試してください)。エラーが出た場合、ランタイムは停止しています。ユーザーが起動した後、エージェントセッションの再起動を依頼する前に、同じコマンドが成功することを確認してください。

どちらの場合も、ユーザーに次の内容を表示してください。

SonarQube MCP Server に接続できないか、プロジェクトキーが見つかりません。

考えられる原因:

  • MCP サーバーが登録されていない — sonar-integrate スキルを実行して SonarQube MCP Server を設定し、その後エージェントセッションを再起動してください
  • コンテナランタイムが起動していない — SonarQube MCP Server はコンテナ(Docker、Podman、または Nerdctl)内で動作します。コンテナランタイムを起動し、その後エージェントセッションを再起動してください
  • 認証情報が設定されていない — sonar-integrate スキルを実行してください
  • プロジェクトキーが間違っているか、MCP 設定にデフォルトプロジェクトがありません — 明示的なキーを渡すか、sonar-project.properties を確認するか、このプロジェクトに対して sonar-integrate スキルを再実行してください

続けて、今すぐ sonar-integrate スキルを実行するかどうか、ユーザーに(はい/いいえで)尋ねてください。このスキルの内容を簡潔に説明してください。ユーザーのマシン上の SonarQube のセットアップを確認し、sonarqube-cli をインストールまたは更新して認証を検証し、SonarQube MCP サーバーとシークレットスキャン用フックを含む、このエージェント向けの統合を再設定します。ユーザーが承認した場合は、自分で sonar-integrate スキルを呼び出し、このセッションで最初から最後まで実行してください。その後、コンテナランタイム(Docker、Podman、または Nerdctl)が起動していることを確認し、新しい MCP ツールを利用できるようエージェントセッションを再起動するようユーザーに依頼してください。拒否された場合は、そこで終了してください。

手順

ステップ 1:プロジェクトキーを解決する(必要な場合のみ)

sonar-integrate スキルによってこのワークスペースのデフォルトプロジェクトが保存されている場合、MCP ツールで projectKey が不要なことがあります。渡す必要がある場合(ツールのスキーマで必須、またはユーザーが別のプロジェクトを指定している場合)にのみ、キーを解決してください。

  • ユーザーがプロジェクトキーを指定した場合は、それを使用します。
  • それ以外の場合は、リポジトリのルートにある sonar-project.properties から sonar.projectKey を探します。
  • それでも見つからない場合は、MCP 呼び出しで projectKey を省略し、統合のデフォルトに従います。
ステップ 2:ユーザー指定の引数から省略可能なフラグを解析する
フラグ意味
--max <n>カバレッジが n% 以下のファイルのみを返します(maxCoverage に対応)
--pr <id>メインブランチではなく、プルリクエストを分析します
--file <key>ファイル一覧を省略し、このファイルキーの行ごとの詳細に直接進みます
ステップ 3:適切なフローを実行する
フロー A — ファイル一覧(デフォルト、--file なし)

mcp__sonarqube__search_files_by_coverage を呼び出します。Step 1 で projectKey を解決しており、かつツールで必須の場合に限り、projectKey を含めてください。それ以外の場合は省略します。

{
  "projectKey": "<only-if-required>",
  "maxCoverage": <n>,       // if --max was given
  "pullRequest": "<id>",    // if --pr was given
  "pageSize": 20
}

連携のデフォルトプロジェクトが適用される場合、ペイロードから projectKey を完全に省略します。使用しないオプション項目も省略します。

結果はカバレッジの昇順で並べた表として提示します。

## Coverage — `my-project`

Files with lowest coverage (worst first):

| File                | Coverage |
| ------------------- | -------- |
| src/auth/login.py   | 12.5%    |
| src/utils/crypto.py | 23.0%    |
| src/api/routes.py   | 41.8%    |

ファイルが返されない場合(すべてのファイルがしきい値を超えている場合)は、"すべてのファイルがカバレッジのしきい値を満たしています。" と伝えます。

続けて、詳細を確認する方法を案内します。 "カバレッジされていない行を確認したいファイルがあればお知らせください。または、--file <file-key> を指定して sonar-coverage スキルを呼び出してください(必要な場合に限り、プロジェクトキーを追加してください)。"

mcp__sonarqube__search_files_by_coverage が利用できない場合は、sonar api にフォールバックします。 明示的なプロジェクトキーが必要です(MCP のデフォルトはありません)。Step 1 で解決できていない場合は、ユーザーに尋ねるか、sonar-list-projects を呼び出してから終了します。

sonar api get "/api/measures/component_tree?component=<project-key>&metricKeys=coverage,line_coverage,branch_coverage&qualifiers=FIL&strategy=leaves&s=metric&metricSort=coverage&asc=true[&pullRequest=<id>]"

metricKeys を使用します。呼び出しで予期せず 400 エラーが発生した場合は、-v を追加して実際のサーバーエラーを確認します。各コンポーネントの measures 配列から coverage を読み取り、上記と同じ形式の表で提示します。

フロー B — 行の詳細(--file <key> が指定された場合、またはユーザーがファイルの確認を依頼した場合)

mcp__sonarqube__get_file_coverage_details を呼び出します。

{
  "key": "<file-key>",
  "pullRequest": "<id>"   // if --pr was given
}

ファイルキーの形式は <projectKey>:<path> です。例:my-project:src/auth/login.py。 ユーザーがパスのみを指定した場合、プロジェクトキーを解決できていれば先頭に付加します。連携によってデフォルトプロジェクトが指定されている場合、詳細ツールではパスまたはキー形式のいずれかを受け付ける可能性があります。MCP スキーマの記載に従ってください。

カバレッジされていない行と、一部のみカバレッジされている行を提示します。

## Coverage Detail — `src/auth/login.py`

Overall coverage: **12.5%**

### Uncovered lines
Lines with no test coverage: 14, 15, 23, 45–52, 67

### Partially covered branches
| Line | Covered branches | Total branches |
| ---- | ---------------- | -------------- |
| 30   | 1                | 2              |
| 61   | 0                | 2              |

ファイルが完全にカバレッジされている場合は、"このファイルのすべての行がカバレッジされています。" と伝えます。

mcp__sonarqube__get_file_coverage_details が利用できない場合は、sonar api にフォールバックします。

sonar api get "/api/sources/lines?key=<file-key>[&pullRequest=<id>]"

返された各行にはカバレッジのフィールド(カバレッジ済み/未カバレッジ、ブランチのヒット数)が含まれます。それらから、カバレッジされていない行の一覧と、一部のみカバレッジされているブランチの表を作成します。

これも失敗した場合は、上記の標準メッセージを表示します。それ以上のコマンドを推測してはいけません。

Step 4: 次のステップ
  • カバレッジされていない行のテストを作成するには:"上記のカバレッジされていない行のテストを追加するよう依頼してください。"
  • 同じファイルの品質上の問題を確認するには:"--component <file> を指定して sonar-list-issues スキルを呼び出してください。"
  • 品質ゲートを確認するには:"sonar-quality-gate スキルを呼び出してください(連携のデフォルトを使用していない場合に限り、プロジェクトキーを追加してください)。"

コメント