🔎
Unreal EngineのプロジェクトをInspectCode Command-Line Toolで静的解析する
はじめに
CIでUnity向けの静的コード分析を走らせるを読んでReSharperのコマンドラインツールならInspectCodeによる静的解析が無料で使えることを知ったのですが、ドキュメントを読んでいると、C++もサポートされていました。
それならUnreal Engineでも使えるのでは?となって試してみたらちゃんと使えたというメモになります。
参考資料
導入
配布ページからReSharper Command line toolsをダウンロードしてください。
解凍した中身をプロジェクトの中に移動させれば導入完了です。
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