C#でSonarQubeでカバレッジを表示する

# 1. はじめに
* SonarQube（自動コードレビューツール）にカバレッジを表示したい
* カバレッジはOpenCoverで解析して、その内容をSonarQubeへ反映したい

# 2. 開発環境
* C#
* .NET 6
* Visual Studio 2022
* SonarQube
* OpenJDK 17
* OpenCover
* ReportGenerator 

# 3. SonarQubeのインストール
* SonarQube(Community Edition)を下記サイトよりダウンロードしてインストールする

https://www.sonarsource.com/products/sonarqube/downloads/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/75b61d3d-34da-1563-baea-331baea0ac7b.png)

# 4. JDK17のインストール
* SonarQubeを起動するためJavaを使用するため、下記サイトよりダウンロードしてインストールする

https://jdk.java.net/java-se-ri/17

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f7767f94-a80d-8b26-bd50-ca189db5b1f9.png)


# 5. SonarQubeを起動
* SonarQubeをインストールしたフォルダ内のStartSonar.batを起動する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a8f4cee3-2a48-5b40-fe09-6fb720da851e.png)

* ```http://localhost:9000\``` へアクセスしてLogInボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d24cc54b-74ab-7c91-5257-570943f69a3b.png)
    * 初期ID: admin
    * 初期パスワード：admin

* 初期パスワードを変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a5297738-df92-9367-900f-c13395d02ee4.png)


* SonarQubeのTOPページが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/33d25b83-c8d8-3389-37aa-3ed092e0cb46.png)

# 6. SonarQubeのプロジェクトを作成
* ```Manually```ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/33acf926-4461-34c6-13a1-8ad748337214.png)

* プロジェクト名を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2861f929-b9c6-36d3-03a4-72d2a1eb0c21.png)

* Topページの```Locally```ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9778873f-bb23-504b-38ed-49e05215f31d.png)

* トークンをジェネレートする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/0048d594-c204-1130-96c1-ded56c8a5110.png)

* SonarQubeのコード解析コマンドを表示する
    　![image.pg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/753bbdb4-6d96-f06a-f7a5-6c77e9faee87.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/401ff57e-1dac-fa6c-09b3-70c6a89bfb46.png)


# 6. SonarQubeのコード解析実行
* コマンドプロンプトでソリューション直下でSonarQubeのコード解析コマンドを実行する

    * SonarScannerをインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/63e5ee29-6068-2cca-65f8-691254391745.png)

    * SonarScanerを実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/06299dfc-d29a-18fb-ded2-067d41433279.png)

    * MSBuildを実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/30065a7b-9ff2-b715-5e78-28fc358d709c.png)

    * SonarScanner(End)を実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/ef3c8121-7ad9-46f8-f372-f22660b8147f.png)


# 7. カバレッジ取得の取得
* 下記を参考にOpenCoverでカバレッジを取得する
 
https://qiita.com/YoshijiGates/items/2e4c7910316b1a39a3d6

# 8. SonarQubeへのカバレッジ反映
* SonarScanerのコマンドのパラメータにOpenCoverの出力ファイルの指定を追加する
```csharp
 /d:sonar.cs.opencover.reportsPaths="CoverageReport.xml"![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/236cd5c4-9030-735b-61b9-51e19c9c75f8.png)
dotnet sonarscanner begin /k:"SampleProject" /d:sonar.host.url="http://localhost:9000"  /d:sonar.login="sqp_31ab32de8ba66a395d52a08602f0fe6a98b673f6" /d:sonar.cs.opencover.reportsPaths="CoverageReport.xml"
```

* SonarQubeへカバレッジ結果が反映される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/926c0c37-015d-8d6a-81d4-4ebf17ef4462.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d8908b2c-9c71-2e2c-446b-eb96f2fbb773.png)

# 9. 参考文献

https://kuttsun.blogspot.com/2017/12/sonarqube-net.html