🔎

Unreal EngineのプロジェクトをInspectCode Command-Line Toolで静的解析する

2023/04/20に公開

はじめに

CIでUnity向けの静的コード分析を走らせるを読んでReSharperのコマンドラインツールならInspectCodeによる静的解析が無料で使えることを知ったのですが、ドキュメントを読んでいると、C++もサポートされていました。
それならUnreal Engineでも使えるのでは?となって試してみたらちゃんと使えたというメモになります。

参考資料

導入

配布ページからReSharper Command line toolsをダウンロードしてください。
https://www.jetbrains.com/resharper/download/#section=commandline

解凍した中身をプロジェクトの中に移動させれば導入完了です。

dotnetのコマンドラインツールからでもインストールできるので、お好きな方法でインストールしてください。

dotnet tool install -g JetBrains.ReSharper.GlobalTools

実行する

ではLyraStarterGameに対して静的解析をかけてみましょう。
LyraStarterGameプロジェクトのディレクトリでコマンドプロンプト起動して、以下のコマンドを実行してください。
解析に時間がかかるので、終わるまで待ちましょう。

.\JetBrains.ReSharper.CommandLineTools.2023.1\inspectcode.exe .\LyraStarterGame.sln --build --project=LyraStarterGame --output=result.xml

デフォルトだとエンジンコードも解析してしまったので、--projectオプションで解析対象のプロジェクト指定しています。
その他オプションについては公式ドキュメントを御覧ください。

出力結果

結果は以下のようなxml形式で出力されます。
全部で約2100件検出されたので、だいぶ端折っています。

<Report ToolsVersion="231.0.20230404.121117">
  <Issues>
    <Project Name="LyraStarterGame">
	<Issue TypeId="CppDeclarationHidesLocal" File="Source\LyraEditor\Utilities\CheckChaosMeshCollision.cpp" Offset="1022-1030" Line="30" Message="Declaration of 'Elements' hides previous local declaration" /> 
	<Issue TypeId="CppUnusedIncludeDirective" File="Source\LyraEditor\Private\LyraContextEffectsLibraryFactory.cpp" Offset="204-278" Line="8" Message="Possibly unused #include directive" />
	<Issue TypeId="CppUnusedIncludeDirective" File="Plugins\CommonGame\Source\Public\Messaging\CommonGameDialog.h" Offset="247-282" Line="10" Message="Possibly unused #include directive" />
    </Project>
  </Issues>
</Report>

--formatオプションで出力形式をテキストやHTMLに変更できます。
ただどれも人間が見やすい形式ではないので、xmlをExcelに突っ込んだり、自前でフロントを作ったりすると良さそうです。

Discussion