sonarqube について
SonarQube と SonarCloud によるコード分析を扱うスキルです。スキャンや品質ゲートを設定する開発チーム向けに、CI 連携、指標、ファイル除外、トラブルシューティングをまとめています。
主な機能
- 01SonarCloud と SonarQube の設定
- 02品質ゲート条件の設定
- 03GitHub Actions と Maven の連携
- 04バグ、脆弱性、コードスメルの確認
- 05カバレッジとファイル除外の設定
活用シーン
- 01プルリクエストで品質ゲートを確認
- 02CI パイプラインへのコード分析追加
- 03カバレッジレポート未認識の調査
- 04既存プロジェクトの問題を段階的に修正
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill sonarqubeインストール後、Claude Code で/sonarqubeを入力して読み込まれたか確認します。
詳細
SonarQube / SonarCloud
このスキルを使用しない場合
- JavaScript/TypeScript のリント - より速くフィードバックを得るには、
eslint-biomeスキルを使用してください - セキュリティスキャン -
owasp-top-10または security-scanner MCP を使用してください - テストの実行 - テストを実行するには、Vitest/Playwright スキルを使用してください
- コードカバレッジの生成 - カバレッジには、JaCoCo/Vitest スキルを使用してください
詳細な知識:包括的なドキュメントを参照するには、technology に
sonarqubeを指定してmcp__documentation__fetch_docsを使用してください。
公式ドキュメント
| リソース | リンク |
|---|---|
| SonarQube ドキュメント | https://docs.sonarsource.com/sonarqube/latest/ |
| SonarCloud ドキュメント | https://docs.sonarsource.com/sonarcloud/ |
| ルールリポジトリ | https://rules.sonarsource.com/ |
| API リファレンス | https://sonarcloud.io/web_api/ |
クイックセットアップ
SonarCloud(オープンソースにおすすめ)
# 1. Connect repo at sonarcloud.io
# 2. Create sonar-project.properties
# sonar-project.properties
sonar.projectKey=org_project
sonar.organization=your-org
sonar.sources=src
sonar.tests=tests
sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.coverage.exclusions=**/*.test.ts,**/*.spec.ts
SonarQube(セルフホスト)
# docker-compose.yml
services:
sonarqube:
image: sonarqube:lts-community
ports:
- "9000:9000"
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
品質ゲート
デフォルトの品質ゲート条件
| メトリクス | 条件 | 目標 |
|---|---|---|
| カバレッジ | 新規コード | ≥ 80% |
| 重複行 | 新規コード | ≤ 3% |
| 保守性評価 | 新規コード | A |
| 信頼性評価 | 新規コード | A |
| セキュリティ評価 | 新規コード | A |
| セキュリティホットスポットのレビュー | 新規コード | 100% |
カスタム品質ゲート
# Create via API
curl -X POST "https://sonarcloud.io/api/qualitygates/create" \
-H "Authorization: Bearer $SONAR_TOKEN" \
-d "name=Strict"
CI/CD 統合
GitHub Actions
# .github/workflows/sonar.yml
name: SonarCloud
on: [push, pull_request]
jobs:
sonarcloud:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
Maven(Java)
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.10.0.2594</version>
</plugin>
mvn sonar:sonar \
-Dsonar.projectKey=project \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.token=$SONAR_TOKEN
主なメトリクス
| メトリクス | 説明 | 良好な値 |
|---|---|---|
| バグ | 信頼性の問題 | 0 |
| 脆弱性 | セキュリティの問題 | 0 |
| コードスメル | 保守性の問題 | 最小限にする |
| カバレッジ | テストカバレッジ % | > 80% |
| 重複 | 重複コード % | < 3% |
| 認知的複雑度 | コードの理解しやすさ | < 15/関数 |
言語固有のルール
| 言語 | ルール | リンク |
|---|---|---|
| JavaScript/TS | 422 | https://rules.sonarsource.com/javascript/ |
| Java | 733 | https://rules.sonarsource.com/java/ |
| Python | 300+ | https://rules.sonarsource.com/python/ |
| C# | 400+ | https://rules.sonarsource.com/csharp/ |
| Go | 100+ | https://rules.sonarsource.com/go/ |
ファイルの除外
# sonar-project.properties
sonar.exclusions=**/node_modules/**,**/dist/**,**/*.test.ts
sonar.coverage.exclusions=**/tests/**,**/__mocks__/**
sonar.cpd.exclusions=**/generated/**
API の例
# Get project status
curl "https://sonarcloud.io/api/qualitygates/project_status?projectKey=KEY" \
-H "Authorization: Bearer $SONAR_TOKEN"
# Get issues
curl "https://sonarcloud.io/api/issues/search?componentKeys=KEY&types=BUG" \
-H "Authorization: Bearer $SONAR_TOKEN"
# Get metrics
curl "https://sonarcloud.io/api/measures/component?component=KEY&metricKeys=coverage,bugs,vulnerabilities" \
-H "Authorization: Bearer $SONAR_TOKEN"
アンチパターン
| アンチパターン | 問題点 | 正しいアプローチ |
|---|---|---|
| PR に品質ゲートがない | 問題のあるコードがマージされる | PR デコレーションを有効にし、失敗時にブロックする |
| すべてのテストをカバレッジ対象から除外する | カバレッジ数値が実態より高くなる | テストユーティリティのみを除外する |
| コードスメルを無視する | 技術的負債が蓄積する | 修正するか、コメントで理由を説明する |
| カバレッジレポートがない | 品質の傾向を追跡できない | CI でカバレッジレポートを設定する |
| デフォルトの品質ゲートを使用する | ほとんどのプロジェクトには基準が緩すぎる | より厳しいカスタムゲートを作成する |
| セキュリティホットスポットをレビューしない | 脆弱性を見逃す可能性がある | リリース前にすべてのホットスポットをレビューする |
トラブルシューティング
| 問題 | 考えられる原因 | 解決策 |
|---|---|---|
| 品質ゲートが予期せず失敗した | 新規コードのカバレッジが 80% 未満 | テストを追加するか、カバレッジ目標を調整する |
| 分析が実行されない | SONAR_TOKEN がない | CI のシークレットにトークンを追加する |
| カバレッジが常に 0% | レポートパスが間違っている | sonar.javascript.lcov.reportPaths を確認する |
| 重複コードの誤検知 | 定型コード | sonar.cpd.exclusions に追加する |
| 報告される問題が多すぎる | レガシーコードに対する初回スキャン | 「新規コード」に焦点を当て、段階的に修正する |
| PR デコレーションが機能しない | GitHub App の連携がない | SonarCloud GitHub App を設定する |
関連スキル
コメント
Markdown 対応