ReSharper 2026.1 Help

コードインスペクション:冗長な属性の使用(冗長な「SerializeField」属性)

このインスペクションは、以下の条件において [SerializeField] 属性が冗長であることをハイライトします。

  • フィールドに [SerializeField] 属性と [NonSerialized] 属性の両方が設定されている場合、 [NonSeralized] 属性が優先され、Unity は [SerializeField] 属性を無視します。 両方の属性がフィールドに適用されている場合、 [SerializeField] 属性は冗長とみなされます。

  • このインスペクションは、 [SerializeField] 属性がシリアル化できないフィールドに適用されている場合、そのフィールドが static または readonly である場合、あるいはフィールドのクラスがシリアル化できない場合(MonoBehaviour などの Unity 基底クラスから派生していない、または [System.Serializable] 属性を持たない通常の .NET クラスである場合など)に、その属性を冗長としてマークします。

このインスペクションは、冗長な属性を削除する迅速な修正も提供します。 また、通常の .NET クラスに対しては、クラスに [System.Serializable] 属性を付与する迅速な修正も提供します。

コメント

Unity は、 JsonUtility.ToJson などの明示的なシリアル化 API を使用する場合、 [System.Serializable] を持たないクラス上の [SerializeField] でマークされたフィールドをシリアル化します。 ただし、同じクラスが MonoBehaviour ベースのクラス内のフィールドなど、Unity 派生クラス内で暗黙的なシリアル化に使用されている場合は、そのフィールドはシリアル化されません。 つまり、クラスが明示的なシリアル化のみに使用されている場合、誤った冗長属性の警告が表示される可能性があります。

これはイレギュラーケースと見なされます。クラスが明示的なシリアル化のみに使用されているかどうかを検出することは現実的ではなく、暗黙的なシリアル化が失敗する可能性が高い場合に警告する方が重要です。 イレギュラーケースの回避策として、クイックフィックスを使ってクラスに [System.Serializable] 属性を追加してください。

SerializeField(英語) に関する Unity のドキュメントも参照してください。

2026 年 6 月 12 日