sonar-integrate について
sonar-integrateは、sonarqube-cliの導入・更新、認証、複数のコーディングエージェント向けのSonarQube設定を案内するスキルです。エージェントに応じた設定を行い、コンテナランタイムの稼働も確認します。
主な機能
- 01sonarqube-cliの確認と更新
- 02SonarQube認証の案内
- 03エージェント別の連携設定
- 04コンテナランタイムの確認
- 05MCPとセキュリティフックの設定
活用シーン
- 01新しい環境でCLIを導入・設定
- 02CLIを更新してエージェントを再連携
- 03MCPツールが読み込まれない原因となるランタイム問題の確認
MCP 対応
Claude Code、Copilot CLI、Codex、Cursorなどで使うSonarQube MCPサーバーを設定します。サーバーはコンテナランタイム内でsonar run mcpにより起動します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sonarsource/ sonarqube-agent-plugins --skill sonar-integrateインストール後、Claude Code で/sonar-integrateを入力して読み込まれたか確認します。
詳細
SonarQube を統合する
必要に応じて sonarqube-cli をインストールし、すでにインストールされている場合は最新バージョンに更新して、認証を行い、エージェント固有の統合を完了するまでユーザーを案内します。SonarQube 自体はすでにセットアップ済みであるものとします。このスキルでは、アシスタントとの接続のみを設定します。
手順
対話ルール:選択が必要な場合はすべて、自由入力を求める代わりに、あらかじめ定義された選択肢を提示してください(必要に応じて単一選択または複数選択)。ユーザーの回答が無効な場合は、同じ選択肢を再表示してください。
手順 1 — sonarqube-cli を確認して更新する
which sonar(macOS/Linux)または Get-Command sonar(Windows)を自分で実行し、sonar が PATH 上で利用できるか確認します。
見つかった場合: まずインストール方法を特定してください。アップグレード方法はインストール方法によって異なります。
- パッケージまたはバージョン管理ツールで管理されている場合(Homebrew や mise 経由でインストールされ、バイナリが
~/.local/share/sonarqube-cli/binではなく管理ツールのプレフィックス配下にある場合など):管理ツールと競合するため、sonar updateは実行しないでください。代わりに管理ツールのアップグレードコマンドを自分で実行し(Homebrew:brew upgrade --cask sonarqube-cli、mise:mise upgrade aqua:SonarSource/sonarqube-cli)、その後、手順 2 に進みます。アップグレードに失敗した場合は出力を表示しますが、sonarが引き続き使用可能であれば、手順 2 に進んでください。 - シェル/PowerShell スクリプトでインストールされている場合、または不明な場合: 自分で
sonar updateを実行し、完了するまで待ちます。- 成功した場合: CLI が最新である(またはアップグレードされた)ことを簡潔にユーザーに伝え、手順 2 に進みます。
- 失敗した場合: 関連する出力を表示し、(オフラインやネットワークの問題などが原因であれば)
sonar updateを手動で実行するよう提案します。その後も、sonarが引き続き使用可能であれば、手順 2 に進みます。バイナリが存在しないか壊れている場合を除き、以降の手順を中断しないでください。
見つからない場合: 以下の表からインストールコマンドを選び、ユーザーに表示して、実行する前に明示的な確認を求めてください。ユーザーが確認するまで、コマンドを実行しないでください。
シェル/PowerShell スクリプトがデフォルトで、どの環境でも使用できます。ユーザーが CLI をすでに Homebrew または mise で管理している場合は、今後のアップグレードもそのツールで管理できるため、そちらを優先してください。その場合、手順 1 の更新では管理ツールを使用します。
| プラットフォーム/方法 | インストールコマンド |
|---|---|
| macOS / Linux(スクリプト) | curl -o- https://raw.githubusercontent.com/SonarSource/sonarqube-cli/refs/heads/master/user-scripts/install.sh | bash |
| macOS / Linux(Homebrew) | brew install --cask sonarqube-cli |
| すべての OS(mise) | mise use -g aqua:SonarSource/sonarqube-cli |
| Windows(PowerShell) | irm https://raw.githubusercontent.com/SonarSource/sonarqube-cli/refs/heads/master/user-scripts/install.ps1 | iex |
ユーザーが確認した場合: シェルコマンドを使って、自分でコマンドを実行します。完了後、続行する前に、PATH の確認(which sonar または Get-Command sonar)を自分で再実行し、インストールを検証してください。
ユーザーが拒否した場合: このスキルを終了し、sonarqube-cli を手動でインストールしてから sonar-integrate スキルを再度呼び出すようユーザーに依頼してください。
手順 2 — 認証状態を確認する
シェルコマンドを使って、自分で sonar auth status を実行します。
すでに認証済みの場合: 出力に表示された接続先サーバーと組織を伝え、手順 4 に直接進みます。
未認証の場合: 手順 3 に進みます。
ステップ 3 — 認証する(sonar auth login)
このステップではユーザーの操作が必要です。自分で実行しないでください。
まず、次の選択肢を持つ単一選択セレクターを使って接続タイプを確認します。
- SonarQube Cloud - EU(デフォルト)
- SonarQube Cloud - US
- セルフホストの SonarQube Server
この選択について、自由回答形式の質問はしないでください。
次の情報を収集します。
| シナリオ | 必要な情報 |
|---|---|
| SonarQube Cloud — EU(デフォルト) | organization key(例:my-org) |
| SonarQube Cloud — US | organization key + US リージョンの確認(https://sonarqube.us) |
| SonarQube Server | server URL(例:https://sonarqube.yourcompany.com) |
ログインコマンドを組み立て、ユーザーに表示します。
| シナリオ | コマンド |
|---|---|
| SonarQube Cloud — EU | sonar auth login -o <org-key> |
| SonarQube Cloud — US | sonar auth login -o <org-key> -s https://sonarqube.us |
| SonarQube Server | sonar auth login -s <server-url> |
ユーザーに次のように伝えます。
"以下のコマンドを実行してください。ログインするためにブラウザーが開きます。トークンは システムのキーチェーンに安全に保存され、このチャットに表示されることはありません。"
ユーザーがログインしたことを確認するまで待ち、その後、自分で sonar auth status を実行して確認してから続行します。
ステップ 4 — エージェント固有の統合
コンテナーランタイムの要件: SonarQube MCP Server はコンテナー内で実行され、
sonar run mcp(Docker、Podman、Nerdctl を検出します)によって起動します。MCP ツールを読み込むには、コンテナーランタイムがインストールされ、実行中である必要があります。そうでない場合、統合は正常に完了しても、セッションにmcp__sonarqube__*ツールが表示されません。必ず自分で確認してください:docker psを実行し、失敗した場合はpodman ps/nerdctl psを実行します。いずれかが成功すればランタイムは起動しています。そのまま続行してください。どれも成功しない場合は、コンテナーランタイムが実行されていないことをユーザーに伝え、起動するよう依頼してください。その後、ツールを読み込むにはエージェントセッションを再起動する必要があることを伝えます(デーモンの起動とセッションの再起動だけは、ユーザーに代わって実行できません)。
以下から、自分が使用しているエージェントに応じてブランチを正確に 1 つ選択してください。他のブランチは実行しないでください。
- Claude Code -> 4.a
- Copilot CLI -> 4.b
- Codex -> 4.c
- Cursor -> 4.d
- Antigravity -> 4.e
- Gemini CLI -> 4.f
- Factory Droid -> 4.g
4.a — Claude Code(sonar integrate claude)
sonar integrate claude を実行します。このコマンドは、SonarQube MCP Server、シークレットスキャンフック、および CLI が適用するその他のサポート対象の統合を設定します。
これにより、MCP(sonar-quality-gate、sonar-analyze、sonar-coverage、sonar-duplication、sonar-dependency-risks などのスキル用)とシークレットスキャンフックがユーザーの Claude Code 設定に組み込まれ、このマシン上のすべての Claude Code セッションに適用されます。利用可能な場合は、SonarQube Vortex の分析フックもインストールされます。
シェルコマンドを使って、このコマンドを自分で実行してください。
sonar integrate claude --non-interactive
4.b — Copilot CLI(sonar integrate copilot)
sonar integrate copilot を実行します。このコマンドは、SonarQube MCP Server、シークレットスキャンフック、および CLI が適用するその他のサポート対象の統合を設定します。
これにより、MCP(sonar-quality-gate、sonar-analyze、sonar-coverage、sonar-duplication、sonar-dependency-risks などのスキル用)とシークレットスキャンフックがユーザーの Copilot CLI 設定に組み込まれ、このマシン上のすべての Copilot CLI セッションに適用されます。
シェルコマンドを使って、このコマンドを自分で実行してください。
sonar integrate copilot --non-interactive
4.c — Codex (sonar integrate codex)
sonar integrate codex を実行すると、SonarQube MCP Server、シークレットスキャンのフック、さらに SonarQube Cloud の組織で Vortex 分析が有効な場合は、編集後に検出結果をインラインで表示する apply_patch の PostToolUse フックが設定され、このマシン上のすべての Codex セッションに適用されます。
シェルコマンドを使って、このコマンドを実行してください。
sonar integrate codex --non-interactive
4.d — Cursor (sonar integrate cursor)
sonar integrate cursor を実行すると、シークレットスキャンのフック(beforeSubmitPrompt、beforeReadFile、preToolUse)、MCP、コンテキスト拡張(利用資格がある場合)、Vortex 分析の指示(利用資格がある場合)が設定され、このマシン上のすべての Cursor セッションに適用されます。注意:Cursor のクラウド/バックグラウンドエージェントが認識するのは、プロジェクト自体にインストールされたフックのみであり、マシン全体にインストールされたフックは認識しません。そのため、これらのエージェントにはインストールされたフックが表示されません。
シェルコマンドを使って、このコマンドを実行してください。
sonar integrate cursor --non-interactive
integrate の完了後、Cursor で MCP サーバーを手動で有効にするようユーザーに伝えてください。Settings → MCP を開き、sonarqube エントリを見つけてオンに切り替えます。また、コンテナランタイム(Docker、Podman、または Nerdctl)が実行中であることを確認するよう伝えてください。ツールを表示するには、Cursor セッションの再起動が必要な場合があります。
4.e — Antigravity (sonar integrate antigravity)
sonar integrate antigravity を実行すると、シークレットスキャンのフック、prompt-secrets および Vortex 分析の指示、コンテキスト拡張(利用資格がある場合)、MCP が Antigravity ハーネスに設定され、このマシン上のすべての Antigravity セッションに適用されます。
シェルコマンドを使って、このコマンドを実行してください。
sonar integrate antigravity --non-interactive
コンテナランタイム(Docker、Podman、または Nerdctl)が実行中であることを確認するようユーザーに伝えてください。また、integrate の完了後に MCP ツールが表示されない場合は、Antigravity セッションを再起動するよう伝えてください。
4.f — Gemini CLI (レガシー)
Gemini CLI は sonar run mcp を介して SonarQube MCP Server を起動します。このコマンドはコンテナランタイム(Docker、Podman、Nerdctl)の検出と認証を自動的に処理します。認証は手順 2~3 で完了しています。
統合の準備ができていることを確認してください。Gemini CLI が gemini-extension.json を読み込むと、MCP サーバーが自動的に起動します。
Antigravity(4.e)への移行を推奨してください。agy plugin import gemini を実行し、続いて sonar integrate antigravity を実行します。Gemini CLI は SonarQube のフックや Vortex 分析の連携をサポートしていません。
4.g — Factory Droid
Factory Droid は、プラグインの mcp.json から sonar run mcp を介して SonarQube MCP Server を起動します。このコマンドはコンテナランタイム(Docker、Podman、Nerdctl)の検出と認証を自動的に処理します。認証は手順 2~3 で完了しています。
Factory Droid に適用される sonar integrate コマンドはありません。Factory Droid は SonarQube のフックや Vortex 分析の連携をサポートしていません。
まとめメッセージ
すべての手順が完了したら、次のまとめを出力します。
✅ SonarQube integration is ready.
sonarqube-cli: up to date
Authentication: token stored in system keychain
MCP Server: configured (ensure a container runtime (Docker, Podman, or Nerdctl) is running, then restart the agent session if tools do not appear)
You can verify at any time with: sonar auth status
To refresh CLI + wiring later: invoke the sonar-integrate skill again
パス 4.a(Claude Code)を選択した場合は、次の行をまとめに追加します。
Secrets scanning: hooks registered via sonar integrate claude
パス 4.b(Copilot CLI)を選択した場合は、次の行をまとめに追加します。
Secrets scanning: hooks registered via sonar integrate copilot
パス 4.c(Codex)を選択した場合は、次の行をまとめに追加します。
Hooks & MCP: wired via sonar integrate codex
パス 4.d(Cursor)を選択した場合は、次の行をまとめに追加します。
CLI integrate: wired via sonar integrate cursor
MCP Server: enable manually in Cursor Settings → MCP (ensure a container runtime (Docker, Podman, or Nerdctl) is running; restart may be needed)
また、デフォルトの MCP Server 行は省略してください(上記の Cursor 専用の行に置き換わります)。
パス 4.e(Antigravity)を選択した場合は、次の行をまとめに追加します。
CLI integrate: wired via sonar integrate antigravity
パス 4.f(Gemini CLI)を選択した場合は、デフォルトの MCP のまとめ以外に追加の行は必要ありません。
パス 4.g(Factory Droid)を選択した場合は、デフォルトの MCP のまとめ以外に追加の行は必要ありません。
手順 1 で sonarqube-cli を新規インストールした場合は、まとめの sonarqube-cli の行を sonarqube-cli: installed に置き換えます。
手順 1 で sonar update が失敗した場合は、まとめを調整します。sonarqube-cli の行を省略するか、CLI が更新されなかったことを記載し、ターミナルで sonar update を実行するよう提案します。
その他の手順で失敗した場合は、失敗したことを明確に記載し、修正方法を提案してください。