土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

#unity Microsoft.Unity.Analyzersを制御する

 おかげさまでシェーダー本5が無事リリースできました。BOOTHと技術書典オンラインマーケットで頒布中なので、よろしくご検討下さい。
s-games.booth.pm

techbookfest.org

 シェーダー本5の紙販は、9月に開催される技術書典13に合わせて頒布する予定です。非Unityテーマの新刊をもう一冊書ければと思っています(間に合うかは微妙)。
 本作りが一段落したこともあり、しばらくは基礎周りの検証が主になる予定です。今回はMicrosoft.Unity.Analyzersについて。

Microsoft.Unity.Analyzersとは何か

 Unityの標準開発環境であるVisualStudio2019には、Roslynアナライザと呼ばれるソースコードの静的解析機能が搭載されています*1。VisualStudioでは、この機能を使った「アナライザ(DLLファイル)」を追加することで、コードスタイルルール違反をリアルタイムに検出する事が出来ます。Microsoft.Unity.Analyzers(以下Unityアナライザ)はUnity用のアナライザで、Microsoftが開発しています。

Microsoft.Unity.Analyzersの導入と確認

 UnityアナライザはVisual Studio Tools for Unityというアプリの一部として適用されています。このアプリはUnityのインストール時に自動的に組み込まれるんじゃないかと思いますが(記憶が曖昧)、インストールされてない場合はVisual Studio Installerを起動して「変更」を選択し、「Unityによるゲーム開発」を追加インストールします。

 Unityアナライザはインストールされてると自動的にソースコードを解析し、エラー一覧ウィンドウに結果を表示します。

 「UNT」で始まるコードが、Unityアナライザの解析結果です。選択されている「UNT0001」は「コード内に空のUnity messagesがある」という指摘です。UnityにはOnDestroy()、Start()、Update()などの、messagesと呼ばれるメソッドがあり、これらは実装が空でも実行時に呼びだされます。実行コストを削減する為にこのメソッドを削除した方が良いという指摘が出ているわけです。
 ちなみに、電球アイコンをクリックすると、コードの改修提案(ここでは空メソッドの削除)が示され、クリックすると実行されます。

 なお、エラー一覧にはUnityアナライザ以外にも標準で搭載されているアナライザによる指摘もあります。アナライザはそれぞれ、以下のような固有のコードIDを持っています。

IDE コードスタイルルール
CA コード品質の分析
CS C#コンパイラ警告
UNT Unityアナライザ

 なお、コード解析が行われず、エラー一覧に何も表示されていない場合があります。その時は、ソリューションエクスプローラーのプロジェクトを右クリックし「分析とコードのクリーンアップ>コード分析の実行」を選択すると解析が行われます。


Unityアナライザのカスタマイズ

 さて、今回の記事を書く動機になった箇所に入ります。
 通常、この手のコード解析では、指摘項目を「通知/警告/エラー/無視(=指摘の抑制)」から選択して、自分が必要とする指摘の有無と指摘レベルを選択できます。
 説明した通り、Unityアナライザはインストールしておけば自動的に解析が始まるのですが、その挙動をカスタマイズする方法がデフォルトで用意されていません*2。以下、その方法を説明します。

 アナライザをカスタマイズするには.editconfigというファイルをソリューションのルートフォルダに配置する必要があります。初めてこのファイルを作成する際には、ソリューションウィンドウでソリューションを右クリックし「追加>新しいEditorConfig」を選択します。

 少し待った後に.ediorconfigファイルが生成されます。なお、ファイルが生成された途端にエラー一覧での指摘事項が一気に増える事があります。恐らく、このファイルが無いとアナライザーの処理が正しく行われないんじゃないかと勝手に思っています。

 以降は、ソリューションウィンドウ上でこのファイルをダブルクリックすると、アナライザのカスタマイズが出来る画面が開きます。ペインが3つあり、「アナライザー」ペインにUnityアナライザの設定が含まれます。


標準アナライザのカスタマイズ

 「書式設定」「コードスタイル」のペインには、標準アナライザの設定項目が並んでいます。

 見て分かる通り、標準アナライザが検出する項目は非常に多岐に渡ります。更に言うと、何故かこの画面ではカスタマイズが出来ない項目があります。例えば、メソッド名がパスカルケースになっていない事を指摘するIDE0016のカスタマイズが出来ません。これらについてはメニューの「ツール>オプション>テキストエディター>コードスタイル」内で設定します(下図例)。

 設定した後は「設定から.editconfigファイルを生成」ボタンをクリックし、ファイルを上書きした方が良いと思われます。
 ちなみに、オプション画面では.editconfigと設定が被る項目が幾つかあるのですが(例えばタブの空白個数など)、これらは設定しても無視されているようです*3

補足1:ハイパーリンクのヘルプについて

 エラー一覧ウィンドウで「UNT0001」などのコードが表示されている箇所はハイパーリンクになっていて、クリックするとコード毎のドキュメントが開きます。しかし、UNT系をクリックするとBingの検索結果に飛ばされてしまいます。

 「なぜヘルプに直接飛んでくれないんだ?」とも思いますが、大抵トップにヒットしているページをクリックするとドキュメントが表示されます(下図)。

 ちなみに、UNTコードの完全な一覧はこちらです。
github.com
 下側にある「Diagnostic Suppressors(診断結果の抑制)」は、「Unityプロジェクト上では問題ないが、標準アナライザがスタイル違反として指摘する項目」のリストです。Microsoft.Unity.Analyzersはこれらの指摘を抑制してエラー一覧に出力されないようにしてます。このリストの各項目についても制御可能な筈ですが、今の所UIを見つけられていません*4

補足2:StyleCopとの違い

 随分前に、StyleCop.Analyzersを使ったUnityのコード解析を試み、かつ失敗した記事をアップしました。
someiyoshino.info
 今回、改めてStyleCop.Analyzersの運用に挑戦してみたんですが、やはり上手く行きませんでした*5。簡単に確認した限りではUnityアナライザ(及び標準アナライザ)は、StyleCopの代替と考えて良いようです*6

補足3:ルールセット(*.ruleset)ファイルとエディター構成(.editorconfig)ファイルについて

 Visual Studioのコード分析の為の設定方法やUIは数回更新されています*7。.editorconfigファイルを使った方法は一番新しい物で、それ以前は拡張子".ruleset"のルールセットファイルが使われていました。現状は.editorconfigファイルの使用が推奨されています。
 ちなみに、ルールセットファイルはプロジェクトのプロパティから設定するのですが、Unity開発時の初期設定ではプロジェクトのプロパティが開けないようになっています*8。今後は.editorconfigを使っていくのが良いでしょう。

補足4:Microsoft.Unity.Analyzers.dllファイルの配置場所

 メニューの「ツール>拡張機能」で開いたウィンドウに、インストールしている拡張機能の一覧が表示されます。アナライザも拡張機能の一つなのでここに表示される筈なんですが、何故かMicrosoft.Unity.Analyzersは表示されません。その為、UnityアナライザがインストールされているかどうかをUI上で確認する方法は無いと思われます*9
 なお、Microsoft.Unity.Analyzers.dllファイル自体は、以下のフォルダに格納されています。

\\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers
 

*1:Roslynアナライザは、厳密には.NETコンパイラプラットフォームであり、ソースの解析だけでなく生成する機能もある

*2:理由は不明。土屋が見つけられていないだけの可能性もあるので知ってる方いたら情報求む

*3:繰り返しになるけどもどうしてこのような形式になっているのか不明。なにか見逃してる設定があるのか、それともVS2022になったら更新されているのかな?

*4:ご存知の方いたら情報求む

*5:Unityが勝手に.csprojを生成し直す為にStyleCop.Analyzersが正しく機能してくれない

*6:StyleCopの利用経験が無いので自信は無い

*7:例えばメニューの「分析>コード分析の設定>ソリューション用」を選択すると、「このプロパティページの使用は推奨されない」という旨の表示がでる

*8:Untyエディタが*.csprojファイルを自動的に再生成して設定をリセットするので、アクセス出来ないようにしているのだと思われます

*9:土屋が勘違いしている可能性があるので情報求む