きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

CIでUnity向けの静的コード分析を走らせる

あのResharperやRiderで使われている静的コード分析をCI(=コマンドライン)で、それも無料で使えちゃうんです。 CIで実行することで、PullRequestの自動チェックで走らせて未然に事故を防ぐことが出来ます。

静的コード分析って?

コードを分析して、以下のようなことを教えてくれる機能です。

  • nullの可能性がある変数にアクセスしている
  • 実行効率の悪い書き方になっている(同じGetComponentを複数回呼んでいるなど)
  • ネーミングルールの間違い(lowerCamelで書くべきメンバ変数をUpperCamelで書いている等)
  • UnityEngine.Objectに対して?.とか書いちゃってる
  • 絶対true/falseになるif文がないか

などなど。
何よりUnityならではの分析もしてくれるのがめちゃめちゃ便利です。

注意点

  • 2021/04/13現在、UnityExtensionはWindows環境でしか動作しません。
  • 2021/04/13現在、UnityExtensionはCommandLineTool 2020.3(最新版は2021)でしか動作しません。

対応中のようなので、時間が解決してくれるでしょう。

インストール

公式の手順

公式のインストール手順はこちら。
いくつか注意点があるので、この記事では細かく説明していきます。
早速ですが、公式手順では.NET Core ツールとしての ReSharper コマンドラインツールをインストールして、jb コマンドで InspectCode を実行することもできます。 と書いてありますが、Extensionの導入が出来ないため手動でインストールしましょう。

ダウンロード

本来のCommandLineToolのダウンロードページはこちらですが、
注意点に書いたように最新版では動作しないため、過去のリリースからダウンロードします。
「ReSharper CLTコマンドラインツールのVersion 2020.3」をダウンロードしてください。

zipの解凍

適当にzipの解凍をすると、解凍は出来るが正しく動作しない状況になります。
こちらの記事などを参考にして、zipファイルのブロックを解除してから解凍してください。
解答すると、お目当てのinspectcode.exeが入っています。

UnityExtensionの導入

Resharper UnitySupportの最新版をダウンロードし、nupkgをinspectcode.exeと同じディレクトリに突っ込みます。

使い方

あとはドキュメント通り使うだけです!
最小ではこんな感じです。

inspectcode.exe Project.sln --output=inspectcode.txt

突っ込んでるPluginのコードは対象外にしたい、みたいな時は

--exclude="Assets/**/Generated/**/*.cs"

などとしてやれば除外出来ます。