ツール / SonarQube
SonarQube — Maven プラグインによる実行・確認
Maven プロジェクトで sonar:sonar ゴールを使って SonarQube 解析を実行する方法を解説します。
pom.xml への設定追加から JaCoCo によるカバレッジ計測、Quality Gate の確認、解析後の対応まで
Maven ユーザー向けにまとめます。
1. 前提条件
| 項目 | 要件 |
|---|---|
| Maven | 3.6 以上 |
| JDK | JDK 17 以上(SonarQube 10.x の要件) |
| SonarQube | SonarQube サーバー(Docker / ZIP 版で別途起動済みであること) |
| SonarQube トークン | SonarQube UI でプロジェクト作成 + 解析用トークンを発行済みであること |
2. pom.xml の設定
Maven の SonarQube プラグインは pom.xml に依存関係として記述するか、
コマンドラインから直接 mvn sonar:sonar として実行できます(pom.xml の記述は任意)。
ただし JaCoCo プラグインは pom.xml に設定が必要です。
JaCoCo プラグインの設定
<properties>
<!-- SonarQube 接続設定(コマンドラインでの上書きも可)-->
<sonar.projectKey>my-project</sonar.projectKey>
<sonar.host.url>http://localhost:9000</sonar.host.url>
<!-- JaCoCo レポートのパス -->
<sonar.coverage.jacoco.xmlReportPaths>
${project.build.directory}/site/jacoco/jacoco.xml
</sonar.coverage.jacoco.xmlReportPaths>
<!-- 解析除外(自動生成コードなど)-->
<sonar.exclusions>**/generated/**,**/dto/**</sonar.exclusions>
</properties>
<build>
<plugins>
<!-- JaCoCo:カバレッジ計測 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
settings.xml へのトークン設定(推奨)
トークンをコマンドラインに直接記述するとシェル履歴に残るリスクがあります。
~/.m2/settings.xml に記述することでより安全に管理できます。
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation><activeByDefault>true</activeByDefault></activation>
<properties>
<sonar.host.url>http://localhost:9000</sonar.host.url>
<sonar.token>sqp_xxxxxxxxxxxxxxxx</sonar.token>
</properties>
</profile>
</profiles>
</settings>
💡 CI 環境ではシークレット変数を使用
settings.xml にトークンを書く方法は個人環境向けです。 CI では
settings.xml にトークンを書く方法は個人環境向けです。 CI では
SONAR_TOKEN 環境変数またはシークレット変数として設定し、
コマンドラインで -Dsonar.token=$SONAR_TOKEN として渡します。
3. 実行基準 — Quality Gate / Quality Profile
Quality Gate と Quality Profile の設定は SonarQube サーバー側(Web UI)で行います。 Maven プラグイン側では設定不要です。
| デフォルト条件(Sonar way Gate) | 閾値 |
|---|---|
| 新規コードのバグ | 0 件 |
| 新規コードの脆弱性 | 0 件 |
| 新規コードのセキュリティホットスポット | 100% レビュー済み |
| 新規コードのカバレッジ | 80% 以上 |
| 新規コードの重複率 | 3% 以下 |
4. 実行方法 — sonar:sonar ゴールの実行
標準的な実行(カバレッジあり)
# テスト実行 + カバレッジ計測 + SonarQube 解析を一括実行
mvn clean verify sonar:sonar \
-Dsonar.token=<発行したトークン>
settings.xml にトークンを設定している場合
mvn clean verify sonar:sonar
マルチモジュールプロジェクトの場合
# ルート pom.xml があるディレクトリで実行(サブモジュールも自動的に解析対象になる)
mvn clean verify sonar:sonar \
-Dsonar.token=<発行したトークン> \
-Dsonar.projectKey=my-multi-project
✅ 解析のみ実行(テストをスキップする場合)
ただしカバレッジ情報は取得されません。カバレッジを含めたい場合は
mvn sonar:sonar -DskipTests -Dsonar.token=<トークン>ただしカバレッジ情報は取得されません。カバレッジを含めたい場合は
verify フェーズまで実行してください。
5. 実行後の確認
解析完了後、コンソールに以下のようなログが出力され、SonarQube の URL が表示されます。
[INFO] ANALYSIS SUCCESSFUL, you can find the results at:
[INFO] http://localhost:9000/dashboard?id=my-project
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
URL からプロジェクト画面を開き、以下を確認します。
| 確認項目 | 確認方法 |
|---|---|
| Quality Gate ステータス | プロジェクト概要に「Passed」/「Failed」が表示される。 |
| Bugs / Vulnerabilities | Issues タブで深刻度・件数を確認する。 |
| Security Hotspots | Security Hotspots タブで未レビュー件数を確認する。 |
| Coverage | Measures → Coverage でカバレッジ率を確認する。 |
| Duplications | Measures → Duplications で重複率を確認する。 |
問題の深刻度
| 深刻度 | 意味 | 対応優先度 |
|---|---|---|
| BLOCKER | 即時修正必須のバグ。 | 最高 |
| CRITICAL | セキュリティ・データ整合性に影響する重大問題。 | 高 |
| MAJOR | 機能障害・パフォーマンス劣化を招く欠陥。 | 中 |
| MINOR | 可読性・保守性の問題。 | 低 |
| INFO | 参考情報。 | 最低 |
6. 確認後の対応
-
BLOCKER / CRITICAL を優先対処
Issues 画面で深刻度フィルターを使い、優先度の高い問題から修正します。 -
誤検知のマーク
意図的なコードや誤検知は「Won't Fix」または「False Positive」にマークし、理由をコメントします。 -
Security Hotspots のレビュー
各 Hotspot を確認し、問題なければ「Safe」に変更します。 -
修正後に再解析
mvn clean verify sonar:sonarを再実行し、Quality Gate が Passed になることを確認します。
解析除外の設定
<properties>
<!-- 解析対象の除外 -->
<sonar.exclusions>
**/generated/**,**/vendor/**,**/*Test.java
</sonar.exclusions>
<!-- カバレッジ計測の除外 -->
<sonar.coverage.exclusions>
**/entity/**,**/dto/**,**/config/**
</sonar.coverage.exclusions>
</properties>
7. CI/CD への組み込み(GitHub Actions)
name: SonarQube Analysis
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
sonar:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 差分解析のためフルクローンが必要
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Maven Verify + SonarQube Scan
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} # 例: http://your-sonarqube-server:9000
run: |
mvn clean verify sonar:sonar \
-Dsonar.token=$SONAR_TOKEN \
-Dsonar.host.url=$SONAR_HOST_URL
💡 GitHub Secrets の設定
Repository → Settings → Secrets and variables → Actions から
Repository → Settings → Secrets and variables → Actions から
SONAR_TOKEN と SONAR_HOST_URL を登録してください。
8. まとめ
| フェーズ | 内容 | ポイント |
|---|---|---|
| 設定 | pom.xml に JaCoCo プラグインを追加 | sonar.* プロパティは settings.xml に記述が推奨。 |
| 実行基準 | SonarQube UI で Quality Gate / Profile 確認 | Maven 側からの設定は不要。 |
| 実行 | mvn clean verify sonar:sonar | verify フェーズでカバレッジも同時生成。 |
| 確認 | コンソールの URL → SonarQube UI で確認 | BLOCKER / CRITICAL を最優先で対処。 |
| CI 組み込み | GitHub Actions 等でパイプラインに追加 | SONAR_TOKEN をシークレットで管理。 |