SonarQubeでSpringプロジェクトのソース解析、テストカバレッジを確認してみる

## はじめに

業務でSonarQubeを使用していますが、日本語のドキュメントが少ないと感じるので、
ローカルでSonarQubeの環境構築からSpring Boot + Kotlinで作成したアプリのソース解析とテストカバレッジの確認まで記事としてまとめてみました。

## SonarQubeとは
ざっくり簡単に言うと、ソースの静的解析を行うオープンソースツールです。
ソースをレビューしてくれて、重複コードの検出や脆弱性のある箇所を教えてくれます。

公式サイト
[https://www.sonarsource.com/](https://www.sonarsource.com/)

## 環境
macOS Ventura : 13.3.1
SonarQube : 9.9.0
JaCoCo : 0.8.9
Docker : 20.10.24
Gradle : 8.1.1
Spring boot : 3.0.6
kotlin : 1.8.20 
IntelliJ IDEA : 2022.2.3 (Community Edition)

## DockerでSonarQubeのコンテナを作成する

SonarQubeは各バージョンのイメージが公開されており環境構築が楽なので、
SonarQubeを試してみるならDockerがおすすめです。
[https://hub.docker.com/_/sonarqube](https://hub.docker.com/_/sonarqube)

```bash
docker run -d --name sonarqube -p 9000:9000 sonarqube:9.9.0-community
```

docker runでコンテナを作成できます。
オプションについては以下の通りです。
`-d`：バッグラウンド実行
`—name`：コンテナ名
`-p`：ポート指定
`sonarqube`：使用したいバーション（今回は最新のを使用）
※developerは有償なので、communityを選択してください。

Dockerのインストールがまだの方は下記を参考にしてみてください。
Mac：[https://docs.docker.com/desktop/install/mac-install/](https://docs.docker.com/desktop/install/mac-install/)
Windows：[https://docs.docker.com/desktop/install/windows-install/](https://docs.docker.com/desktop/install/windows-install/)

## SonarQubeへログイン

コンテナが正常に作成されるとSonarQubeへ以下のURLでアクセスできます。
初期アカウントはid、Passwordともに`admin`です。
ログインするとPasswordの変更を求めれらので、変更してください。
[http://localhost:9000](http://localhost:9000/projects/create)

![スクリーンショット 2023-04-22 3.16.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/e956cfc4-d909-dbb3-6801-dc41aca1a874.png)

![スクリーンショット 2023-04-22 3.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/a0e505df-88c6-afaf-112f-72d2ebac4d08.png)

Passwordを更新するとダッシュボードが表示されます。
ダッシュボード上でプロジェクトを作成することも可能ですが、
今回はローカルで作成したdemoアプリをアップロードします。
![スクリーンショット 2023-04-22 11.04.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/584480b5-eb7e-77de-d135-dd5456609521.png)


## Token作成

garadleの設定にTokenが必要なので作成していきます。
![スクリーンショット 2023-04-22 16.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/f09a7145-999f-b9b7-6223-9748f5185008.png)
![スクリーンショット 2023-04-22 16.49.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/a91b5376-8052-81b1-7724-7d4a0ac68ece.png)

## gradleの設定

`Hello World!`を返すだけのシンプルなAPIですが、
サンプルソースとして以下のリポジトリからクローンできます。

[https://github.com/h-i-ist/sonarqube-sample](https://github.com/h-i-ist/sonarqube-sample)

gradle.propertiesへTokenの設定を行います。

```bash
systemProp.sonar.login=Token
```

sonarqubeの各設定はbuild.gradle.ktsで行います。

プロパティについては公式サイトでまとまっています。

[https://docs.sonarqube.org/9.9/analyzing-source-code/analysis-parameters/](https://docs.sonarqube.org/9.9/analyzing-source-code/analysis-parameters/)

```bash
sonarqube {
	properties {
    　　　　　　　　　// プロジェクトキー
		property("sonar.projectKey", "demo")
    　　　　　　　　//　サーバーURL
		property("sonar.host.url", "http://localhost:9000")
    　　　　　　　　// xml形式のテストレポートの場所を指定
		property("sonar.junit.reportPaths", "build/test-results/test")
    　　　　　　　　//　JaCoCoカバレッジレポートの場所を指定
		property("sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml")
	}
}
```

## SonarQubeで解析結果を確認

gradleの設定が完了したらいよいよSonarQubeで解析結果を確認します。

IntelliJで実行する場合
![スクリーンショット 2023-04-23 0.38.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/5d893d12-ecf2-c46f-0281-be9f29f4c0a5.png)

コマンドで実行する場合

```bash
./gradlew sonarqube
```

実行が成功すると[http://localhost:9000/projects](http://localhost:9000/projects)に`demo` プロジェクトが作成されていることが確認できると思います。
![スクリーンショット 2023-04-25 0.16.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/6edca255-dddc-ed96-54d5-5cde7f6db120.png)

サマリの画面からテストカバレッジやUnitTestの件数も確認できます。
![スクリーンショット 2023-04-25 0.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3330132/23ea79db-9b36-049d-f6cf-cd44bccd9d90.png)

5分もあればSonarQubeをローカルで実行して、サンプルプロジェクトを解析することができると思います。
今回は簡単なものでしたが、自分で作成したプロジェクトを解析してみたり遊んでみてください。
少しでもSonarQubeの理解の助けになれば幸いです。