今までのソースの静的解析ツールと言えば、FxCop/CheckStyle/FindBugsなどの個別ツールを使って確認する感じでしたが、TFS2015 Update1で連携できるようになった「SonarQube」なるツールがいいらしいとの噂。
なんと単純な静的解析だけでなく、解析の履歴を蓄積してどれだけ改善できたかが簡単にわかるとのこと。
個別ツールだと前回との比較が面倒(前回の解析結果との比較を人がしないといけない)なところがありますが、SonarQubeだと一目でわかるので、継続的に使用するにはすごくいいツールだと思います。
以前から触ってみたいとは思っていましたが、間でいろいろあってなかなか触ることができなかったのですが、ようやく時間が取れるようになったのでUpdate3が出てきたタイミングで今更感がありますが、お試しでASP.NETのプロジェクトで実際に使ってみようとしたらまんまとハマってしましました。
なんとなくですが、日本語でのSonarQubeのビルドタスクに関する話があまり流れていないようなので、簡単な設定手順とバグ回避策についてまとめてみます。
※2016/07/03時点の情報です。最新の情報は自身で確認をお願いします。
ちなみに、英語ではMSとSonarQubeの両方に設定手順があります。
(SonarQube側の方が「MSBuild」という枠でTFS2013やコマンドラインでの実行方法も併せてまとまっているので、そちらを見ていただくほうがよさそうです)
○Build Tasks for SonarQube Analysis
https://blogs.msdn.microsoft.com/visualstudioalm/2015/08/24/build-tasks-for-sonarqube-analysis/
○Analyzing with SonarQube Scanner for MSBuild
http://docs.sonarqube.org/display/SONARQUBE53/Analyzing+with+SonarQube+Scanner+for+MSBuild
あと、ビルドエージェントにJava 7u75以上と.NET Framework 4.5.2以上が必要です。
さて、TFS2015日本語版での手順です。
事前準備として、SonarQubeへの接続情報(サービスエンドポイント)を登録します。
ブラウザでチームプロジェクトに移動した状態で、画面右上にある(歯車みたいな)サーバの管理アイコンをクリックしてコントロールパネル画面を表示します。
タブの中に「サービス」があるのでクリックし、左側に表示される「新しいサービスエンドポイント」から「汎用」を選択します。
「新しい汎用接続の追加」という子画面が表示されるので、各項目を入力します。
・接続名:ビルド定義でSonarQubeの接続先を指定するときに使う名前です。適当でかまいません。
・サーバーURL:接続先SonarQubeサーバのURLを指定します。
・ユーザ名:解析結果を登録するSonarQubeのプロジェクトにログイン可能なユーザ名を指定します。
・パスワード/トークンキー:上記ユーザに対するログインパスワード、もしくはSonarQubeサーバの「MyAccount」の「Generate Tokens」で発行したトークンを入力します。
次に、普通のビルド定義に対して、先頭に「MSBuild用のSonarQube – 分析開始」を、最後に「MSBuild用のSonarQube – 分析終了」を追加します。
一番最後にタスクが追加されますが、タスクをドラッグすると順番は変更てきます。
「MSBuild用のSonarQube – 分析開始」に対して、SonarQube側の情報を設定します。
・SonarQubeエンドポイント:事前準備のところで指定した「接続名」を指定します。(コンボボックスから選択)
・プロジェクトキー
SonarQubeのプロジェクト作成時に「Key」に指定した内容を設定します。
分からないときは、SonarQubeのメニューの「設定」から、「Projects」-「Management」で表示されるプロジェクト一覧の真ん中あたりに出てくるのがキーです。(イメージだと青枠のところ)
・プロジェクト名
SonarQubeのプロジェクト名を設定します。
・プロジェクト バージョン
とりあえず、「1.0」としておきます。
・DB接続文字列/DBユーザー名/DBユーザーパスワード
SonarQubeが5.2以上であれば、設定不要です。5.1以下の場合は、sonar.propertiesで指定した「sonar.jdbc.url」「sonar.jdbc.username」「sonar.jdbc.password」の内容を設定します。
・詳細設定
個別にパラメータを指定する場合、「/d:[パラメータ名]=[設定内容]」と設定します。
・設定ファイル
各種設定をまとめた「SonarQube.Analysis.xml」を使用する場合は、ここで設定します。
※設定時はバージョン管理に登録されている内容から選択するので、あらかじめSonarQube.Analysys.xmlはバージョン管理に登録しておく必要があります。
・品質ゲートのエラー時にビルドを失敗とする(SQ 5.3+)
SonarQubeの品質ゲート(Quality Gate)が「Failed」となったときにTFSのビルドを失敗とする場合は、これをONにします。
※この項目はTFS2015 Update1/2/2.1では存在しません。
ここまで設定してビルドを実行すれば、SonarQubeの静的解析が実行されて・・・のはずだったんですが...続きは次のブログで。