【Unity】asmdefのRoot NamespaceとRiderのInspectionを設定して名前空間をいい感じに自動調整する

UnityでasmdefのRoot NamespaceとRiderのInspectionを設定して名前空間をいい感じに自動調整する方法についてまとめました。

Root Namespaceとは?

Root NamespaceとはUnityのAssembly Definition File(asmdef)の機能で、そのアセンブリ名前空間を指定するためのものです。
Unityでスクリプトを作成すると通常は名前空間がつきませんが、これを設定したアセンブリ以下に作ると設定した通りの名前空間が最初から付いた状態でスクリプトが生成されます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ExampleNamespace // 名前空間がついた状態でスクリプトが生成される
{
    public class Example : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
        
        }

        // Update is called once per frame
        void Update()
        {
        
        }
    }
}

なおこれはUnity2020.2で追加された機能となります。

unity.com

Riderの名前空間Inspection

次にRiderにおける名前空間の挙動について説明します。
Riderには名前空間を検証して違った場合に警告を出す機能があります。
これはデフォルトではフォルダの階層に応じて名前空間を検証します。

たとえば Assets/ExampleFolder/Core/Example.cs であれば、名前空間ExampleFolder.Core でない場合に警告が出ます。

警告

さらに、Riderの Explorer からフォルダを右クリックし、Property から Namespace provider のチェックを外すと、そのフォルダ名は名前空間から除外されます。
つまり上記の例で Core フォルダの Namespace provider のチェックを外すと、提案される名前空間ExampleFolder になります。

Namespace Provider

Riderと組み合わせたときの挙動

これらの仕組みを組み合わせることで、名前空間をいい感じに自動調整することができます。

Assembly Definition FileRoot Namespace を設定すると、Riderは自身が提案するNamespaceのルートにRoot Namespaceを付与するという挙動になります。
つまりスクリプトファイルを Assets/ExampleFolder/Core/Example.cs に配置して RootNamespaceRoot として設定すると、Root.ExampleFolder.Core という名前空間が提案されるということになります。

もし名前空間から除外したいフォルダ名があったら、前節のようにNamespace Providerのチェックを外せばOKです。
最終的にRoot.Coreという名前空間にしたければ、ExampleFolderのNamespace Providerを外すことで実現できます。

参考

unity.com