【Unity】Unityに既存のRoslyn Analyzerを導入する手順まとめ

Unity に既存の Roslyn Analyzer を導入する手順についてまとめました。

Roslyn Analyzerとは

Unity では、コードにエラーがあると、以下のように Console ウィンドウにエラーが表示されます。

エラー

Roslyn Analyzer を使うと、コードを静的解析して独自のエラーや警告などを作成することができます。
例えば、「Update メソッド内で Time.fixedDeltaTime アクセスしていたらエラーにする」といったルールを作れます。

また、Roslyn Analyzer は自作することもできますが、世の中には既にルールを設定済みの Roslyn Analyzer が多数公開されており、それらを使うこともできます。
本記事ではこの既存の Roslyn Analyzer をUnity に導入するまでの手順についてまとめます。

既存のAnalyzerのdllを取得する

それではまず Roslyn Analyzer の dll を取得します。
なんでも良いのですが、今回は Microsoft.Unity.Analyzers を使用します。
これは Microsoft により開発されている、Unity 向けのオープンソースのアナライザです。

github.com

アナライザは dll の形で提供されます。
この dll は以下の Nuget のページから取得します。

www.nuget.org

右側の Open in Nuget Package Explorer を押下し、 analyzers > dotnet > cs > Microsoft.Unity.Analyzers.dll をダブルクリックしてダウンロードするのが簡単だと思います。

ダウンロード

UnityにAnalyzerのdllを導入する

次に前節の dll を Unity にインポートします。
インポートするとエラーが出るかもしれませんが、気にせず dll の Inspector から以下の通り設定します。

  1. Select platforms for plugins の Any Platform のチェックを外す
  2. 1.の下にある Include Platforms のすべての項目のチェックを外す
  3. RoslynAnalyzer という名前のラベルをつける

設定

動作確認

次にアナライザが正常に適用されているか確認します。
Microsoft.Unity.Analyzer が対応している項目は以下のページから確認できます。

github.com

UNT0004 を見ると、 Update() 内で Time.fixedDeltaTime を使っていると指摘してくれるようです。

github.com

実際にUpdate() 内で Time.fixedDeltaTime を使っているスクリプトを書くと、下図のようにRider のヒントとして表示されることを確認できました。

動作確認

ルールセットを設定して警告やエラーにする

次にこれを警告として Unity のコンソールに表示します。
これを行うには、以下のようなルールセットと呼ばれるファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Example Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="Microsoft.Unity.Analyzers" RuleNamespace="Microsoft.Unity.Analyzers">
    <Rule Id="UNT0004" Action="Warning" />
  </Rules>
</RuleSet>

上記を見ると、Microsoft.Unity.Analyzer を対象として、UNT0004Warning にするよう設定していることがわかります。
このファイルは Default.ruleset という名前で Assets フォルダ直下に保存します。

この状態で前節で作成したスクリプトを Reimport すると、コンソールに警告が表示されることを確認できます。

警告

なお、ルールセットの WarningError に書き換えるとエラーとして扱われるようになります。

エラー

参考

github.com