GitHubの.NetプロジェクトにSonarCloudを導入する際に参考にした情報

## はじめに
GitHubのdotNetプロジェクトにSonarCloudを導入する際にいろいろと参考にした情報のメモです。

## SonarCloudについて

https://sonarcloud.io/documentation

>SonarCloudとは何ですか？
SonarCloudは、25の異なるプログラミング言語でコード品質の問題を検出するように設計されたクラウドベースのコード分析サービスであり、コードの保守性、信頼性、セキュリティを継続的に保証します。

コードの品質検査を行うツールでGitHubやAzureDevOpsなどと連携することができます。

## 導入手順
### 1. アカウント登録し、リポジトリと連携する。

https://sonarcloud.io/

①公式ページより、GitHubを選択しアカウントを紐づけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/4cd4f0cf-957f-ce98-a668-46a91843409d.png)

②その後、リポジトリをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/8a2781fa-1bad-281c-e029-c978fa3f969f.png)

補足：すでに組織が登録されていて組織内の他のリポジトリにも導入したい場合は
GitHubの「組織のパス/settings/installations」からInstalled GitHub Apps内のSonarCloudの**Configure**ボタンをクリックすることで下記③のようなインポートするリポジトリの選択が行えます。

③SonarCloudをリポジトリにインストールします。アカウントに紐づくすべてのリポジトリにインストールするか、選択したリポジトリのみにインストールするか選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/b09fd082-d7c4-1dd8-436a-8c525c00868b.png)

④組織を作成します。デフォルトのままで問題ないと思いますが、`Add additional info`より詳細な設定を開くとGitHubのメンバーを自動で追加しアクセスできるようにする設定があり、有用かもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/dd33df76-e3ec-bc61-9c41-03eb8851f597.png)

⑤プランについては今回は公開リポジトリのみだったので無料プランを利用しました。プライベートリポジトリに適用したい場合は有料プランにする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/46f83fe8-098d-97ab-f9a2-3af74f324de7.png)

### 2.GitHubにSonarCloudを導入する

①GitHubからSonarCloudの認証に必要なトークン取得します。
取得したトークンはGitHubのリポジトリの`Settings`-`Secrets`-`New repository secret`より追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/4f9c4f8f-87fa-fb89-7fc3-b366ab5303e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/0be8f264-644e-3e02-0447-b131fc447640.png)

②その後、リポジトリの`.github/workflows`にymlファイルを格納すれば動作するようになります。ymlファイルはサンプルが用意されていますが、リポジトリのメインブランチ名やワークフローの実行タイミングなど少々カスタマイズする必要があるかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/7bb845f6-4d94-9842-2aa2-209408b042fd.png)

③注意する点として、`<your clean build command>`と記載がある部分をビルドやテストのコマンドに置き換える必要があります。
（例えば`run: dotnet build src --configuration Release`など）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/220672ce-a427-124c-65a3-c61ba19998da.png)

これで設定は完了し、GitHub Actionsのワークフローが動作すればチェック結果がsonarcloudに出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/f2661ce9-c058-6257-ba45-b0c041c07c9f.png)

## 最後に

実際に解析結果をどう見ればいいの？どう使うの？といった疑問については以下の記事がわかりやすかったです。

https://blog.tagbangers.co.jp/ja/2019/09/30/sonar_analytics

カバレッジを含める設定については後日まとめようと思います。

## 2021/3/24 追記（カバレッジも含めたYML記述例）

カバレッジを含めたymlについてもまとめました

https://qiita.com/yusuke-sasaki/items/51b47b07690f76bad8e9

## 2021/3/25 追記（リポジトリの連携について補足）
- SonarColudにすでに登録した状態からリポジトリを連携する手順  
[公式ページ](https://sonarcloud.io/)より右上の + ボタンからAnalyze new projectを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/b025c949-80e5-ac02-6f7c-746b08061662.png)  
上記に出てこない場合は、[Gitの設定](https://github.com/settings/installations)よりSonarColudの対象にリポジトリを追加する必要がある。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/8b95f064-6fd3-58e2-59da-e587a616ad25.png)  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/ae74256f-3609-5f22-8920-48e25d8a88b5.png)

## 2021/3/26 追記（GitのreadmeからSonarCloudの参照）

readmeからSonarColudの結果ページを参照させたい場合は、単純にリンクでもいいですが、下図のようにかっこよく書くこともできるみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/84fd2d99-0b51-8fd3-76ca-5b7891f0059b.png)
やり方は表示したい箇所に以下を記述します。プロジェクト名（`yus-sasaki_NugetSample`）の部分を参照させたいSonarCloudのプロジェクトに置き換えてください。

```md
[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=yus-sasaki_NugetSample&metric=alert_status)](https://sonarcloud.io/dashboard?id=yus-sasaki_NugetSample) 
```