はじめに
プロダクト開発が長期化してくると、追加機能が当初の設計とそぐわなかったり、チームメンバの入れ替わりによって、コードのメンテナンス性が悪くなってくる。そこで、静的解析ツールの一つである SonarQube をCI環境に組み込み、コード品質を常に評価できる仕組みを構築する。CI環境には Jenkins を使用する。
環境構築
以下のインスタンスを用意する。
- SonarQube
- Jenkins (slave)
- Jenkins (master)
SonarQube
以下の作業を行う。
- SonarQube のインストール
- アクセストークンの発行
- プロジェクトの作成
インストールから起動まで
SonarQube の立ち上げについてはここを参照。
アクセストークンの発行
初期状態では admin アカウントでログインできる。
username : admin
password : admin
admin アカウントでログインしたら、Jenkins 用にアクセストークンを発行する。
メニューから Administration
-> Security
-> Users
に移動する。
トークン名を入力し、 Generate
ボタンを押す。
発行されたトークンをコピーする。このページを閉じるとトークンを再確認できなくなるので注意すること。
プロジェクトの作成
Unityプロジェクトのコード解析を行うには、SonarQube 側に対応するプロジェクトを作成する必要がある。
Administration
-> Projects
-> Management
に移動して、Create Project
ボタンをクリックする。
プロジェクト名とキーを入力して(Branch は空欄で問題ない)、 Create
ボタンを押す。
Jenkins (slave)
Jenkins のスレーブとして動作させるインスタンス。
このインスタンス上で SonarQube Scanner が動作してコード解析を行う。
なお、このインスタンスは他のインスタンスと異なり、 MSBuild を実行する必要があるため、Windows 環境であることが必須になる。
以下のソフトウェアをインストールする。
- Unity
- MSBuild 14.0
MSBuild のインストール
SonarQube Scanner は MSBuild 14.0 を要求するため、chocolatey からインストールするのが簡単。
以下のコマンドを PowerShell で実行する。管理者モードの PowerShell で実行する必要がある。
choco install microsoft-build-tools
Jenkins (master)
Jenkins のコントロール用インスタンス。
あらかじめJenkinsスレーブマシンを登録しておくこと。
以下の Jenkins プラグインをインストールする必要がある。
- SonarQube プラグイン
- Unity プラグイン
- MSBuild プラグイン
SonarQube プラグインの設定
Jenkins のシステム設定で SonarQube の設定を行う。
SonarQube の URL とアクセストークンを貼り付ける。

MSBuild プラグインの設定
MSBuild のパスを指定する。
SonarQube Scanner for MSBuild の設定
MSBuild 用の SonarQube Scanner のインストールを行う。
こちらも Jenkins の設定から行うことができる。github から自動でインストールするように設定しておく。
Jenkins ジョブの設定
Jenkins ジョブを作成する。
以下のビルドステップを追加する必要がある。
- sln ファイルの生成
- SonarQube Scanner の起動
sln ファイルの生成
Sonar Scanner を実行するには Unity プロジェクトの sln が必要になる。しかし、Unity プロジェクトでは sln はバージョン管理しないので、動的に生成する必要がある。
以下のコードを Batch.cs
として、 Unity プロジェクトのEditor フォルダ以下に配置する。
using UnityEditor;
public class Batch
{
public static void OpenProject()
{
EditorApplication.ExecuteMenuItem("Assets/Open C# Project");
}
}
jenkins 側で Unity をバッチ起動して、上記の OpenProject メソッドを呼び出すと、解析に必要な sln ファイルや proj ファイルが自動生成される。
Add Build Step
で Invoke Unity3d Editor
を追加して、コマンド引数に以下のように指定する。
-batchmode -quit -projectPath "${BuildPath}" -logFile .\build.log -executeMethod Batch.OpenProject
SonarQube Scanner の起動
SonarQube Scanner for MSBuild を動作させるには、Begin Analysis
-> MSBuild
-> End AnalySis
の順序でビルドステップを組み立てる必要がある。
まずは Begin Analysis
のビルドステップを追加して、以下のように設定する。
引数に /d:sonar.verbose=true
を指定すれば、 jenkins のログに SonarQube Scanner の全てのログが出力されるので、最初のうちは指定おいたほうがよい。
次に MSBuild
のビルドステップを追加し以下のように設定する。
最後に End AnalySis
のビルドステップを追加する。
これでジョブを走らせれば、SonarQube 側に解析結果が反映される。