TL;DR
.editorconfigをプロジェクトのルートに置くだけで、Rider / Visual Studio / VS Code が命名規約やコードスタイルを自動チェックしてくれます。
FUnity では private/protected フィールドはm_+ PascalCase を標準に。既存シリアライズは[FormerlySerializedAs]で安全に移行。
なぜ .editorconfig なの?
- IDE横断(Rider / VS / VS Code すべて対応)
- リポジトリ同梱で誰が触っても同じルール
- C# の Roslyn アナライザーと連携して命名・スタイルを警告/提案
- Unity特有の「シリアライズ名変更」も、運用ルール化しやすい
置き場所(最重要)
- Unityプロジェクトのルート
Assets/,Packages/,ProjectSettings/と同じ階層に.editorconfigを配置
→ 全サブフォルダへ自動適用されます - パッケージ側(FUnityリポジトリ)も同様にルートに配置
→ パッケージ単体開発のときも同じルールが効く
サブフォルダに別の
.editorconfigを置けば上書きできます(例:Assets/FUnity/Editorだけ別ルール)。
FUnity推奨:命名の中核ルール
- private/protected フィールド:
m_+ PascalCase(例:m_UIDocument,m_Ticker) - public(クラス/メソッド/プロパティ/イベント/フィールド):PascalCase
- 定数 / static readonly:PascalCase(Unity慣習に合わせ ALL_CAPSは使わない)
既存フィールド名を変更する場合は、必ず
[FormerlySerializedAs("旧名")]を付与してシリアライズ互換を維持します。
そのまま使える .editorconfig
プロジェクトのルートに保存してください(ファイル名は
.editorconfig)。
# FUnity code style
# Place this file at the Unity project root (next to Assets/, Packages/, ProjectSettings/).
root = true
[*.cs]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
# General C# style
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
csharp_prefer_braces = true:suggestion
csharp_new_line_before_open_brace = all
csharp_style_var_elsewhere = true:suggestion
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
# ===== Naming rules =====
# Private/Protected instance fields must start with m_ and use PascalCase after it.
dotnet_naming_rule.private_fields_m_prefix.severity = warning
dotnet_naming_rule.private_fields_m_prefix.symbols = private_fields
dotnet_naming_rule.private_fields_m_prefix.style = m_prefix_style
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal
dotnet_naming_symbols.private_fields.applicable_modifiers =
dotnet_naming_style.m_prefix_style.required_prefix = m_
dotnet_naming_style.m_prefix_style.capitalization = pascal_case
# Public members should be PascalCase
dotnet_naming_rule.public_members_pascal.severity = suggestion
dotnet_naming_rule.public_members_pascal.symbols = public_members
dotnet_naming_rule.public_members_pascal.style = pascal_style
dotnet_naming_symbols.public_members.applicable_kinds = field, property, method, event
dotnet_naming_symbols.public_members.applicable_accessibilities = public, internal
dotnet_naming_style.pascal_style.capitalization = pascal_case
# Constants: PascalCase (Unity convention; avoid ALL_CAPS)
dotnet_naming_rule.constants_pascal.severity = suggestion
dotnet_naming_rule.constants_pascal.symbols = constant_fields
dotnet_naming_rule.constants_pascal.style = pascal_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
# Static readonly fields: PascalCase
dotnet_naming_rule.static_ro_pascal.severity = suggestion
dotnet_naming_rule.static_ro_pascal.symbols = static_readonly_fields
dotnet_naming_rule.static_ro_pascal.style = pascal_style
dotnet_naming_symbols.static_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.static_readonly_fields.applicable_accessibilities = *
dotnet_naming_symbols.static_readonly_fields.required_modifiers = static, readonly
# (Optional) Encourage XML docs for public APIs (if StyleCop installed)
dotnet_diagnostic.SA1600.severity = suggestion
dotnet_diagnostic.SA1604.severity = suggestion
実際の運用(FUnity/プロジェクト両対応)
- **FUnity(パッケージ側)**のリポジトリにも
.editorconfigを置く
→ パッケージ単体で開発しても統一スタイル - **ゲームプロジェクト(FUnityProject)**側にも置く
→ プロジェクト全体のコンポーネントやゲームロジックも同じ規約で統一
どちらか一方にだけ置くと、もう一方の環境で規約適用漏れが起きやすいです。両方に置くのが堅実。
既存コードの“安全な”リネーム
_foo→m_Fooなどに変更- シリアライズ互換のため、必ず
[FormerlySerializedAs("_foo")]を付与 - Editor拡張で
SerializedObject.FindProperty("uiDocument")のような旧名参照があれば新名に置換(例:"m_UIDocument")
これでシーンやPrefabの値が消えないまま、命名規約を段階導入できます。
IDE設定の反映
.editorconfig保存後、IDEを再読み込み- Rider:
File → Sync/Invalidate Caches - Visual Studio:ソリューション再読み込み
- VS Code:再起動 or ウィンドウ再読み込み
- Rider:
- 以後、命名違反があると波線や警告で気づけます
よくある質問
Q. 複数の .editorconfig があるとどれが効く?
A. もっとも近い階層の設定が優先。最上位で root = true を付けて“ここが起点”と宣言するのが定石。
Q. 既存の ALL_CAPS 定数は?
A. Unity慣習に合わせPascalCase推奨です。移行は影響範囲を見て段階的に(constの参照はビルド時展開されるため注意)。
Q. CIで落とせる?
A. dotnet format や Roslyn アナライザーによるスタイルチェックをCIに入れられます(プロジェクト構成に応じて導入)。
まとめ
.editorconfigをルートに置けば、チーム全員のIDEで同じルールが効く- FUnity標準は
m_+ PascalCase(private/protected フィールド) - 既存データは
[FormerlySerializedAs]で壊さず移行 - FUnity と FUnityProject の両方に置いて、どの環境でも同じ開発体験に 🎯

コメント