SonarQube＋WindowsでPHPソースをスキャンする

間があいてしまいましたが、[前回](https://qiita.com/beeeegle/items/b662fc97cb697a49f542) に引き続きSonarQubeで静的解析を行うための手順を書いていきたいと思います。
今回はDockerコンテナでSonarQube立ち上げて、Windows10(ホスト)にあるCakePHPプロジェクトをSonar Scannerでスキャンしてみようと思います。

参考にした記事
https://qiita.com/takao-takass/items/5d54768ad0d315d3dad4

# 環境

- Windows10 Pro<br>
Windows10 へDockerインストールについては [コチラ](https://docs.docker.jp/docker-for-windows/install.html) を参照
- コンテナ作成については [コチラ](https://qiita.com/beeeegle/items/b662fc97cb697a49f542)  の記事を参照
- PHP：PHP 7.4.4
- Cake：4.x系


# SonarQubeの設定

1. SonarQubeへアクセス
ブラウザを開いて、SonarQubeへアクセスします。
`http://{IP or ホスト名}/`
特に設定していなければ`http://localhost:9000/`でアクセスできると思います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/26fd0514-72a0-19c1-d294-b62292a03fd0.png" width=70%>



1. ログイン
ID：`admin`
Password：`admin`
でログイン可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/f2468648-9242-7142-4be6-aeaad7332b80.png" width=70%>


1. プロジェクトの作成
画面中央付近にある『Create new project』をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/8f1fd05f-8f56-645b-44a1-b8a1c2bd059d.png" width=70%>

次に『Project key』、『Display name』を入力し、『Set up』をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/6a2ca7de-e542-8d3e-40f3-e0e88d42b9dc.png" width=70%>

そして、SonarQube ScannerからSonarQubeへログインするためのTokenを生成します。
ある程度の文字列の長さが必要です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/507c51ce-49c9-7b89-960a-484de836dbff.png" width=70%>

Tokenが生成できたら、『Continue』をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/c61a9f78-ded0-a5e5-82e2-eff4535f9323.png" width=70%>

# Scannerの設定
Scannerはソースコードをスキャンするプログラムなり、スキャン結果をSonarQubeへ返します。
[こちらを参考にしました](https://dev.classmethod.jp/articles/sonarqube-source-analytics-1/)

1. プログラム言語などの選択
今回はPHPのプロジェクトをスキャンするので、『Other』選択します。
次にScannerを動かすOSを選択しますが、『Windows』を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/72d7c1a8-47c0-472a-a813-7a5fb0888fd5.png" width=70%>

1. Scannerのダウンロードと設定
zipファイルがダウンロードされるので、適当なフォルダで解答します。
サンプルとして下記ファイルパスで実行します。

- PHPプロジェクト：`C:\tmp\{PHPプロジェクト}`
- Scanner：`C:\tmp\{Scanner}`

# スキャンしてみる

1. コマンドプロンプトを開きディレクト移動
PHPプロジェクト配下へ移動します。

```cd C:\tmp\{PHPプロジェクト}```

2.　スキャン実行
『Execute the Scanner from your computer』に表示されているコマンドをちょっと変えて実行
環境変数にbinまでのパスを通した方がいいと思うのですが、それは割愛してbatまでのフルパスを指定する形にしました。
なので、下記を参考にScannerまでのパスだけ修正してください。

■変更前

```
sonar-scanner.bat -D"sonar.projectKey=php-test" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.login=トークンが表示されます"
```

■変更後

```
C:\tmp\sonar-scanner-4.6.2.2472-windows\bin\sonar-scanner.bat -D"sonar.projectKey=php-test" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.login=トークンが表示されます"
```
※Scanner解凍時のフォルダ名は読み替えをお願いします。

3.　スキャン結果を見る（まずは成功 or 失敗）
プロンプト上にログがバーッと流れます
（ちょいちょいWARNINGがあるのは気になりますが・・・今はまぁいいでしょうｗ）

最終的に『EXECUTION SUCCESS』が表示されていることを確認してください。

```
INFO: Analysis total time: 28.439 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 30.419s
INFO: Final Memory: 14M/57M
INFO: ------------------------------------------------------------------------
```

# SonarQubeでの結果確認
上記までの手順が順調にいけば、SonarQube側がこんな感じで表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588937/436d30df-f2b2-2059-870e-161579950005.png" width=70%>

# あとがき
あとは、デフォルトの解析設定だとちょっと物足りない感じですが、『Rules』、『Quality profile』、『Quality Gates』などで解析についての設定が行えそうなので、今後調査していこうと思います。

そして、お気づきの方もいらっしゃるかと思いますが、実はちょっと日本語化してあります。
別記事で記載していこうと思います。

# 関連記事
- [SonarQubeをDockerで立ち上げた時の話](https://qiita.com/beeeegle/items/b662fc97cb697a49f542)