🔍

Unity/C#の無料で使える静的解析ツール

2024/11/27に公開

Unity/C#の無料で使える静的解析ツール

いくつか導入してみたメモ。

事前準備

Win/Macどちらの環境でも可能です。

UnityプロジェクトにRiderのPackageをインストールする

静的解析にはプロジェクトのソリューションファイル(.sln)が必要になります。
UnityをEditorで開ける環境ならPreferences-ExternalToolsで生成できます。

CI環境の場合はPackageのJetBrains Rider Editorで生成するのが楽です。
https://docs.unity3d.com/Packages/com.unity.ide.rider@3.0/manual/index.html
Package追加のみで、コードを変更する必要はありません。

{Unity} -batchmode -quit -projectPath {ProjectPath} -executeMethod Packages.Rider.Editor.RiderScriptEditor.SyncSolution

静的解析を行うマシンに.Netをインストールする

dotnetコマンドが必要なので.Net 8.0インストールしておいてください。
toolsはデフォルトで$HOME/.dotnet/toolsに配置されるので必要ならパスを通しておいてください。

dotnetビルドできるか確認

Unityプロジェクトでソリューションファイルを出力しておいてください。

dotnet build ${hoge.sln} --no-incremental

--no-incrementalはクリーン再ビルドのオプションです。

ReSharper Command Line Tools

https://www.jetbrains.com/resharper/features/command-line.html

JetBrainsの静的解析とクリーンアップ(書式の修正、構文スタイルの適用、冗長性の削除など)が行えるCLIツールです。
https://www.jetbrains.com/help/resharper/ReSharper_Command_Line_Tools.html
Unity向けの静的解析にはPlugin(JetBrains.Unity)を指定します。
https://plugins.jetbrains.com/plugin/11629-unity-support
JetBrains.Unityとこのツールは、バージョンを合わせて使う必要があります。

静的解析

出力結果の形式は指定可能なのでJenkinsなどのCIと連携可能です。

jb inspectcode --project=${pj_name} -x=JetBrains.Unity ${hoge.sln}

--project: 解析するプロジェクトを制限可能。slnのProjectに含まれる名前を指定
もっと絞りたい場合は--include=Assets/Hoge/**/*.csで制限も可能。
-x: JetBrainsのPluginを使用できる。PluginIDを指定。

クリーンアップ

自動でコードが整形/変更されるので実行/対象の指定には注意してください。

jb cleanupcode -x=JetBrains.Unity ${hoge.sln}

--include/--excludeで制限可能です。

VS Code向け拡張機能

静的解析、クリーンアップが行え、解析結果を一覧で表示してくれます。

https://marketplace.visualstudio.com/items?itemName=dev-land.resharpervscode

dev-land.resharpervscode

SonarQube

サーバーにインストールして使用できる静的解析ツールです。
さまざまな言語やCI/CDとの連携に対応しています。
機能を絞ったCommunityBuildなら無料で使用できます。
https://www.sonarsource.com/open-source-editions/sonarqube-community-edition/
インストール&プロジェクト作成は簡単なので公式ドキュメントを参考にしてください。
https://docs.sonarsource.com/sonarqube-server/latest/try-out-sonarqube/

C#の静的解析を行う場合は.Net版の解析ツールもダウンロードしておいてください。
SonarScanner for .NET

# 解析準備を行う
dotnet-sonarscanner begin \
/k:\"${pj_name}\" \
/d:sonar.scanner.scanAll=false \
/d:sonar.host.url=\"${sonarqube_host_url}\" \
/d:sonar.token=${sonarqube_token}
# プロジェクトをビルド
dotnet build ${hoge.sln} --no-incremental
# 解析結果を送信
dotnet-sonarscanner end /d:sonar.token=${sonarqube_token}

VS Code向け拡張機能

SonarQubeサーバーを介さず、単独で静的解析が行えるようになります。
作成したSonarQubeのプロジェクトと連携することも可能です。
ちょっと時間かかるように思えますが、開いているファイルを自動で解析してくれます。
簡単に解析が行えるのでオススメです。
https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode
VSCode上で内容を表示してくれるのが良い。
SonarSource.sonarlint-vscode

Roslynator

https://josefpihrt.github.io/docs/roslynator/

Roslynで動作するC#用のコード解析ツールセットです。
静的解析以外にもいろいろとできます。

roslynator analyze ${hoge}.sln -o ${output_xml}

UnityがRoslynを公式に対応しているのはVisual StudioJetBrains Riderのみです。
https://docs.unity3d.com/Manual/roslyn-analyzers.html
VS Codeで動かすにはC# Dev KitをDisableにする必要があります=Unityへのデバッグ接続ができなくなります。

参考ページ

https://zenn.dev/masakura/articles/60e502a275e9c3

https://zenn.dev/aya/articles/5a1eeb0e07fdff

Discussion