search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

UnityでRoslyn Analyzerが使えるようになるので使ってみる

はじめに

この記事はUnity #3 Advent Calendar 2020の23日目の記事です。
Unity2020.2でRoslyn Analyzerが使用できるようになったらしいので、使ってみるという内容です。

Roslyn Analyzer

Roslyn Analyzerは簡単に言うとコーディングスタイルなどをチェックできるものです。
用意したアナライザー、ルールセットに基づいて、IDE上などでエラーや警告を表示してくれたりします。
Unityではコンパイル時にコンソールに表示されるようになっています。

Microsoft公式のFxCopAnalyzersや、サードパーティのStyleCopAnalyzersなどのアナライザーが用意されているので、これを使用し、自分で必要に応じてルールセットを記述していく、という使い方が良いかと思います。

VisualStudioなどのIDEで使えば、書きながらその場で指摘してくれて便利ですが、人によっていろんなエディタを使う場合もありますし、Unity上に一覧で表示させることで、統一したコーディングスタイルを意識することに繋がると思います。

環境

  • MacBook Pro (Retina, 13-inch, Late 2013)
  • macOS Catalina 10.15.7
  • Unity 2020.2.0b14

使用方法

アナライザーの用意

DLLのインポート

今回はサードパーティのStyleCopAnalyzersを使用してみます。
上のリンクの画面右の方にある[Download package]ボタンから、nupkgファイルをダウンロードします。
stylecop.analyzers.{Version}.nupkgの拡張子をzipにし、展開を行います。
(自分の環境だとうまく行かなかったので、unzipコマンドで展開を行いました。)

analyzers/dotnet/csフォルダ内のStyleCop.Analyzers.dllをUnityプロジェクトにインポートします。

インポートしたDLLの設定

上画像の赤枠の部分をクリックして、インポートしたDLLにRoslynAnalyzerのAssetLabelを追加します。
アイコンが出ていない場合、Asset Labelsの部分をクリックすることで表示されるようになります。

また、ランタイムにDLLが含まれないように、Select platforms for pluginの部分の全てのチェックを外しておきます。

ここでプロジェクトに含まれているスクリプトに大してアナライザーが実行され、場合によってエラー、警告が表示されます。

ルールセットの用意

ルールセットの配置ルール

ルールセットは全体に対してとアセンブリに対しての設定が行えます。
全体の場合はDefault.ruleset
アセンブリごとの場合は{アセンブリ名}.ruleset、Assembly-CSharp.dllに対してであればAssembly-CSharp.ruleset
という風に作成し、Assetsフォルダのルートに配置します。

ルールセットの作成

今回はDefault.rulesetを作成してみます。

現在、デフォルト設定だと、Unity上で新規ファイルを作成した時点で以下のような警告が表示されます。

まずテストとして、警告として表示されていたものをエラーとして出してみます。

Default.ruleset
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
    <Rule Id="SA1028" Action="Error" />
    <Rule Id="SA1400" Action="Error" />
    <Rule Id="SA1505" Action="Error" />
    <Rule Id="SA1508" Action="Error" />
    <Rule Id="SA1633" Action="Error" />
  </Rules>
</RuleSet>

作成したスクリプトファイルをReimportしてみると

全てエラーとして表示されることが確認できました。

この際、コンパイルエラーとしてエラーが出ている訳ではないので、このまま問題なく実行することは可能です。

また、今度はこれら全ての警告を取り除いてみます。

Default.ruleset
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
    <Rule Id="SA1028" Action="None" />
    <Rule Id="SA1400" Action="None" />
    <Rule Id="SA1505" Action="None" />
    <Rule Id="SA1508" Action="None" />
    <Rule Id="SA1633" Action="None" />
  </Rules>
</RuleSet>

再度スクリプトファイルをReimportしてみると、警告が出なくなったことを確認できるかと思います。

今回はDefault.rulesetしか作成しませんでしたが、上で述べたようにアセンブリに対してもルールセットを作成することができます。その際、アセンブリに対応するルールセットの方が優先され、対応するものがない場合のみDefault.rulesetが使用されることになります。

補足 StyleCopの設定ファイル

StyleCopではいろいろな設定を行うことができます。
例えばインデントでタブを使用するか、スペースを使用するか。などを設定しておくことができます。
その際にstylecop.jsonというファイルを作成、記述します。

この設定は.csprojファイルに特定の記述を行うことで有効になるのですが、
今回Unityにおいて、これをうまく設定することができませんでした・・・

おそらく、AssetPostProcessorOnGeneratedCSProjectというイベントを使用することで、.csprojファイルを書き換えることができるので、それでうまくいくかもしれません。
(現状VSCodeを使用していると、OnGeneratedCSProjectは呼び出されないようになっている)

まとめ

今回はUnity2020.2にてRoslyn Analyzerが使えるようになったという話の紹介を行いました。
ちょうど最近2020.2の正式版がリリースされました。
Roslyn Analyzerの使い方自体は割とシンプルで、どこにどういったファイルを配置するかが分かれば、それほど詰まる点もなく設定ができそうでした。
StyleCop Analyzerに関しては、ちょっと調査が必要そうです。
以下にも貼っているマニュアルのMore analyzersの項目で紹介されているアナライザーを使用するのが、間違いないのかなとも思います。

参考

Unity - Manual: Roslyn analyzers and ruleset files
Roslyn アナライザーを使用したコード分析 - Visual Studio

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3