SonarQubeでTERASOLUNA5.xアプリを静的ソースコード解析する方法

## 1. はじめに
SonarQubeでTERASOLUNA5.xアプリを静的ソースコード解析する方法について説明します。SonarQubeのインストール方法については「[WindowsにPostgreSQL対応のSonarQubeをインストールする方法](https://qiita.com/5zm/items/c8b0119348803812462f)」を参照ください。

### 1.1. 検証環境
* Java 1.8.0_131
* SonarQube 5.6.6

## 2. TERASOLUNA5.xのサンプリアプリを静的ソースコード解析
### 2.1. ダウンロードとお試しビルド
今回はTERASOLUNA5.xのサンプルアプリケーションとして公開されている「[Tour Reservation Sample Application](https://github.com/terasolunaorg/terasoluna-tourreservation-mybatis3)」をSonarQubeで静的ソースコード解析してみたいと思います。

まずは[ここ](https://github.com/terasolunaorg/terasoluna-tourreservation-mybatis3/releases)からサンプリアプリをダウンロードして任意のディレクトリに展開します。
今回は`terasoluna-tourreservation-mybatis3-5.3.0.RELEASE.zip`で試してみます。

```console:お試しビルド
C:\Temp\terasoluna-tourreservation-mybatis3-5.3.0.RELEASE>mvn clean install -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Environment Layer
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Domain Layer
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Web Layer
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent 5.3.0.RELEASE
[INFO] ------------------------------------------------------------------------
... 省略 ...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent  SUCCESS [11.606s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Environment Layer  SUCCESS [2:11.820s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Domain Layer  SUCCESS [3.526s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Web Layer  SUCCESS [5.694s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:32.958s
[INFO] Finished at: Wed Sep 20 21:15:14 JST 2017
[INFO] Final Memory: 40M/339M
[INFO] ------------------------------------------------------------------------
C:\Temp\terasoluna-tourreservation-mybatis3-5.3.0.RELEASE>
```

### 2.2. SonarQubeで静的ソースコード解析
**静的ソースコード解析を行うには事前にSonarQubeサーバが起動している必要があります。**
SonarQubeサーバの起動方法が分からない方は[ここ](https://qiita.com/5zm/items/c8b0119348803812462f#22-%E8%B5%B7%E5%8B%95%E3%81%A8%E5%81%9C%E6%AD%A2)を参照ください。

今回はSonarQubeのリポジトリとして以下のPostgreSQLのデータベースを利用する前提とします。

| 項番 | 項目 | 値 |
|:---:|:-----|:---|
| 1 | ポート番号 | 5432 |
| 2 | データベース名 | sonarDb01 |
| 3 | ユーザID | sonarUser |
| 4 | パスワード | sonarPass |

```console:SonarQubeで静的ソースコード解析を行うmvnコマンド
mvn sonar:sonar ^
-Dsonar.host.url=http://localhost:9000 ^
-Dsonar.jdbc.username=sonarUser ^
-Dsonar.jdbc.password=sonarPass ^
-Dsonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonarDb01 ^
-Dsonar.scm.disabled=true
```

`sonar.scm.disabled=true`はエラーが発生した場合に付与してください。
SonarQube 4.5.2を利用していた時は付与していませんでした。
`sonar.scm.disabled=true`の説明については[こちらの記事](https://qiita.com/kazuki43zoo/items/51ea8dad7384b988599f)が参考になりますので参照ください。

```console:サンプルアプリを静的ソースコード解析してみる
C:\Temp\terasoluna-tourreservation-mybatis3-5.3.0.RELEASE>mvn sonar:sonar ^
More? -Dsonar.host.url=http://localhost:9000 ^
More? -Dsonar.jdbc.username=sonarUser ^
More? -Dsonar.jdbc.password=sonarPass ^
More? -Dsonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonarDb01 ^
More? -Dsonar.scm.disabled=true
[INFO] Scanning for projects...
... 省略 ...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent  SUCCESS [25.761s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Environment Layer  SKIPPED
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Domain Layer  SKIPPED
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Web Layer  SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.544s
[INFO] Finished at: Wed Sep 20 21:24:10 JST 2017
[INFO] Final Memory: 42M/732M
[INFO] ------------------------------------------------------------------------
C:\Temp\terasoluna-tourreservation-mybatis3-5.3.0.RELEASE>
```

`BUILD SUCCESS`と表示されれば完了です。
Webブラウザで http://localhost:9000/ にアクセスします。
既に表示している場合は画面を更新（F5ボタンを押下等）してください。

右側の Projects に
「TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent」 
が表示されていると思います。
このリンクをクリックすると静的ソースコード解析結果の詳細画面が表示されます。
SonarQubeの解析結果の見方については以下の記事が参考になります。

* [SonarQubeでソースコードの品質チェック](https://qiita.com/teradonburi/items/776e4735395af872320a)
* [[実験] 静的コード解析ツールはどの程度バグや脆弱性を検出できるのか？ ～ SonarQube編](https://qiita.com/tamura__246/items/0fd6ba732cb94e85589d)
* [SonarQube を構築してプロジェクトを数値化する](https://qiita.com/yo1000/items/0af36c8bc5e944c1e42a)

## 3. さいごに
今回はTEARSOLUNA5.xのサンプルアプリを利用してSonarQubeによる静的ソースコード解析の方法について説明しました。
**静的ソースコード解析はソースコードの品質を確保するうえで非常に重要になります。といっても、実際に解析するには今回説明した通り、mavenのコマンドで手軽に実行できます。ぜひ利用してみてください。**