GitHub上のJavaScriptコードをSonarCloudで検査してみる

# 概要

このエントリでは、GitHub上のpublicなリポジトリのJavaScriptのコードを検査するため、「[SonarCloud](https://sonarcloud.io/)」を使用するための方法を紹介します。SonarCloudは、[SonarSource](https://www.sonarsource.com/)社のプロダクトの一つであり、同社がオンプレミス環境で静的検査を行うためにリリースしているプロダクトとして、[SonarQube](https://www.sonarqube.org/)があります。

サービスの形態や、利用ソフトウェアのバージョンは、2021年10月時点の内容になります。


## 想定読者

- GitHubでpublicなリポジトリを持っており、静的検査を実施してみたい方

## エントリの動機

- 筆者が趣味のプログラムを書くにあたり、手元にSonarQubeサーバを立てずにコード検査を行いたくなりました。
- SonarCloudは、(2021年10月時点では）publicなリポジトリに対する検査は無料で実施することができることも後押しになりました。

# 手順

## SonarCloudの利用を開始する

サイトのPricingのページにある、「Start Using SonarCloud」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/eb0c4db2-e734-f929-dbef-59afbc25abc0.png)

連携先のサービスを選択します。筆者の場合は「GitHub」を選択しました。エントリ執筆時点では、このほかにBitbucket, GitLab, Azure DevOpsが選択できるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/6bd4191d-8eb2-f6a4-8323-a26dc9fb92ac.png)

連携先のいくつかの情報を使ってよいか確認されます。Authorizeボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/7fcb70ee-91ec-b0dc-d3f5-52b3a4fee681.png)

自身のリポジトリを選択できるようになるので、「Analyze your first projects」に進みます。「Import an organization from GitHub」を押します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/9c443358-a703-2c92-4355-0f7adbfccbdd.png)

対象とするリポジトリをすべてにするか、一部分にするかを選べます。筆者は、一つ一つ指定も手間と考え、すべてを対象としました。「Install」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/09f4a56b-76ff-a787-a48f-44196de34e18.png)

SonarCloud上の"Organization"に関して、名前を決めます。Organizationには複数のユーザを参加させることができるようですが、このエントリでは筆者1名が使用する例を示しています。「Continue」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/898673c9-5345-48c2-4f78-57b382955ba3.png)

プランの選択で、このエントリでは"Free"を選択します。「Create Organization」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/d89d83cc-aa97-c8f1-00f5-eec7f4437889.png)

## 対象のリポジトリを選択する

対象のリポジトリを選択します。このエントリでは１つを選択し、「Set Up」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/abab73bb-786a-574d-e339-c67d5e2f555e.png)

なにやらセットアップが始まり、しばし待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/962caa6a-76dc-a218-c705-e898f95da34d.png)

## 検査の結果を確認する

画面が遷移し、リポジトリの状況がダッシュボードで確認できます。（12Bugsって。。。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/64f4b506-7a8d-bb48-fa06-3287e48879c9.png)

Bugが検出された場合には、数字部分をクリックすると「Issues」ページに遷移し、結果を閲覧できます。（あ、途中まで書いたけど放置してあったテストケースだ。。見つかったか。。。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/c039b324-3411-bbdd-5296-3a1610c7a393.png)

## 設定を加える

Overviewの上部で誘導された先のページで、何をもって新しいコードとするかを定義します。このエントリでは、リポジトリの前の状態との差分としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/94eaac09-8bc2-2ac8-8e3d-f3293baad7fc.png)

# できるようになること

このエントリの作業の結果として、できるようになることを紹介します。

## Measuresのページを眺めてみる

信頼性、セキュリティ、保守性など、いくつかの観点での分析結果が参照できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/dfc22c68-71bc-9eae-32b6-2f447d9cab75.png)

## GitHubのPullRequestへのコメント

GitHubでPullRequestを作った時、SonarCloudが差分の内容をチェックし、Botがチェック結果をPullRequestにコメントしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/95820e31-38ec-1a9c-a17a-0dd6b47a0bc5.png)

## マージ後の差分

対象としているブランチに対してマージが実行されたとき、マージ後の状態と、その差分に関する状態を合わせてみることができるようになります。図は、テストケース内で12個指摘されていたバグを10個直した後のものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/67c1f59f-f7aa-1b7d-dc85-dfe09a5f3c25.png)

## README.mdなどにbadgeをつける

プロジェクトのコンソールで「Ge project badges」を押して出てくる、マークダウンにそのまま貼り付けられるリンクを使うと、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/4b0f93b1-4d2d-3ba8-9301-c6c849e18536.png)

README.mdなどに、チェック状態を反映できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/6a40ae2e-1952-b858-5d9a-f2767030e1ea.png)

# おわりに

このエントリでは、GitHubのパブリックリポジトリのJavaScriptのコードに対し、SonarCloudで静的検査をするまでを紹介しました。