Version: Unity 6.0 (6000.0)
言語 : 日本語
Additional files for Roslyn analyzers and source generators
アナライザーのスコープと診断

ルールセットファイルの作成

プロジェクトのアナライザーが発行するさまざまな警告やエラーを処理する方法を独自のルールで定義するには、ルールセットファイルを作成します。カスタムルールセットの作成方法の詳細については、カスタムルールセットの作成方法に関する Microsoft Visual Studio のドキュメントを参照してください。

Assets ルートフォルダーに、Default.ruleset という名前のルールセットファイルを配置します。Default.ruleset で定義するルールは、定義済みのすべてのアセンブリ (Assembly-CSharp.dll など)、および .asmdef ファイルを使用して構築されたすべてのアセンブリに適用されます。

Default.ruleset のルールを定義済みのアセンブリにオーバーライドするには、ルートフォルダーに .ruleset ファイルを作成し、[PredefinedAssemblyName].ruleset という名前にします。例えば、Assembly-CSharp.ruleset でのルールは、Assembly-CSharp.dll のコードに適用されます。これらの .ruleset ファイルのみがルートフォルダー内で許可されます。

  • Default.ruleset
  • Assembly-CSharp.ruleset
  • Assembly-CSharp-firstpass.ruleset
  • Assembly-CSharp-Editor.ruleset
  • Assembly-CSharp-Editor-firstpass.ruleset

ワークフロー: Unity でルールセットファイルをテストする

Unity でルールセットファイルをテストするには、以下を行います。

ステップ 1: ルールセットファイルの設定

  1. プロジェクトの Assets フォルダーの中に “Subfolder” というサブフォルダーを作成します。
  2. Subfolder 内で以下の処理を実行します。
    1. .asmdef ファイルを新しく作成します。
    2. RethrowError.cs の複製を保存します。
  3. 以下のコードを使用して、Assets の中に Default.ruleset ファイルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
    <Rule Id="ERP021" Action="Error" />
  <Rule Id="EPC12" Action="None" />
  </Rules>
</RuleSet>

Default.ruleset ファイルでは、以下のルールが定義されています。

  • EPC12 の抑制。疑わしい例外処理についての警告です。
  • ERP021 の発生。不正な例外伝播に関する警告です。

ステップ 2: プロジェクトの再ロード

プロジェクトにルールセットファイルを追加した後、ルールを適用するアセンブリ内にあるスクリプトをすべて再インポートします。これを行うと、Unity は新しいルールセットファイルを使用してアセンブリを再コンパイルします。再コンパイルの後、コンソールウィンドウに以下の 2 つのメッセージが表示されます。

Assets\Subfolder\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.

Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.

Unity は Default.ruleset で定義されたルールを Assets/RethrowError.csAssets/Subfolder/RethrowError.cs の両方に適用します。

ステップ 3: カスタムルールセットの追加

Assets/Subfolder に .ruleset ファイルを作成し、任意の名前を付けます (この例では exampleHello.ruleset とします)。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
  <Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
    <Rule Id="ERP021" Action="Info" />
    <Rule Id="EPC12" Action="Info" />
  </Rules>
</RuleSet>

この新しい Hello.ruleset ファイルは、Unity に EPC12 と ERP021 の両方を警告やエラーとして扱わずに、コンソールに出力するように指示します。

Unity がプロジェクトを再度コンパイルすると、コンソールウィンドウに以下のメッセージが表示されます。

Assets\Subfolder\RethrowError.cs(14,23): info EPC12: Suspicious exception handling: only e.Message is observed in exception block.

Assets\Subfolder\RethrowError.cs(15,19): info ERP021: Incorrect exception propagation. Use throw; instead.

Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.

Default.ruleset 内のルールは Assets\RethrowError.cs にも適用されますが、Hello.ruleset 内のルールはオーバーライドされるため、Assets\Subfolder\RethrowError.cs には適用されなくなります。

許可されているすべてのルールセットアクションファイルの詳細については、Visual Studio のドキュメントでコード分析ルールセットエディターの使用を参照してください。

追加リソース

Additional files for Roslyn analyzers and source generators
アナライザーのスコープと診断