LoginSignup
11
10

More than 5 years have passed since last update.

Unity のソースコードを SonarQube で静的解析する

Last updated at Posted at 2016-08-21

はじめに

プロダクト開発が長期化してくると、追加機能が当初の設計とそぐわなかったり、チームメンバの入れ替わりによって、コードのメンテナンス性が悪くなってくる。そこで、静的解析ツールの一つである SonarQube をCI環境に組み込み、コード品質を常に評価できる仕組みを構築する。CI環境には Jenkins を使用する。

環境構築

以下のインスタンスを用意する。

  • SonarQube
  • Jenkins (slave)
  • Jenkins (master)

SonarQube

以下の作業を行う。

  • SonarQube のインストール
  • アクセストークンの発行
  • プロジェクトの作成

インストールから起動まで

SonarQube の立ち上げについてはここを参照。

アクセストークンの発行

初期状態では admin アカウントでログインできる。

username : admin
password : admin

Screen_Shot_2016-08-21_at_10_26_54__2_.png

admin アカウントでログインしたら、Jenkins 用にアクセストークンを発行する。
メニューから Administration -> Security -> Users に移動する。

Screen_Shot_2016-08-21_at_10_28_56__2_.png

トークン名を入力し、 Generate ボタンを押す。

Screen_Shot_2016-08-21_at_10_31_00__2_.png

発行されたトークンをコピーする。このページを閉じるとトークンを再確認できなくなるので注意すること。

Screen_Shot_2016-08-21_at_10_33_48__2_.png

プロジェクトの作成

Unityプロジェクトのコード解析を行うには、SonarQube 側に対応するプロジェクトを作成する必要がある。

Administration -> Projects -> Management に移動して、Create Project ボタンをクリックする。

Screen_Shot_2016-08-21_at_10_48_29__2_.png

プロジェクト名とキーを入力して(Branch は空欄で問題ない)、 Create ボタンを押す。

Screen_Shot_2016-08-21_at_10_51_05__2_.png

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 とアクセストークンを貼り付ける。

Screen_Shot_2016-08-13_at_12_46_00.png

MSBuild プラグインの設定

MSBuild のパスを指定する。

Screen_Shot_2016-08-21_at_12_57_56__2_.png

SonarQube Scanner for MSBuild の設定

MSBuild 用の SonarQube Scanner のインストールを行う。
こちらも Jenkins の設定から行うことができる。github から自動でインストールするように設定しておく。

Screen_Shot_2016-08-21_at_13_01_48__2_.png

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 StepInvoke Unity3d Editor を追加して、コマンド引数に以下のように指定する。

-batchmode -quit -projectPath "${BuildPath}" -logFile .\build.log -executeMethod Batch.OpenProject

Screen_Shot_2016-08-21_at_13_09_52.png

SonarQube Scanner の起動

SonarQube Scanner for MSBuild を動作させるには、Begin Analysis -> MSBuild -> End AnalySis の順序でビルドステップを組み立てる必要がある。

まずは Begin Analysis のビルドステップを追加して、以下のように設定する。
引数に /d:sonar.verbose=true を指定すれば、 jenkins のログに SonarQube Scanner の全てのログが出力されるので、最初のうちは指定おいたほうがよい。

Screen_Shot_2016-08-21_at_13_14_49.png

次に MSBuild のビルドステップを追加し以下のように設定する。

Screen_Shot_2016-08-21_at_13_20_14.png

最後に End AnalySis のビルドステップを追加する。

Screen Shot 2016-08-21 at 13.20.20.png

これでジョブを走らせれば、SonarQube 側に解析結果が反映される。

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10