mcpField
D
dotnet-editorconfig

dotnet-editorconfig

github.com/wshaddix開発8669 回インストール35 週間前に更新
リポジトリ

dotnet-editorconfig について

`.editorconfig` と `.globalconfig` を使った Roslyn のコード分析・スタイルルール設定を解説する .NET 向けガイドです。ルールの重大度や優先順位、プロジェクト間のビルド時適用を調整できます。

主な機能

  1. 01IDE・CA ルールの設定
  2. 02ルールの重大度と優先順位
  3. 03AnalysisLevel とビルド時適用
  4. 04階層的な EditorConfig 設定
  5. 05グローバル AnalyzerConfig の解説

活用シーン

  1. 01リポジトリ全体で分析ルールを統一
  2. 02CI ビルドでスタイル診断を適用
  3. 03ディレクトリごとの重大度調整
  4. 04複数プロジェクトで設定を共有

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wshaddix/dotnet-skills --skill dotnet-editorconfig

インストール後、Claude Code で/dotnet-editorconfigを入力して読み込まれたか確認します。

詳細

dotnet-editorconfig

.editorconfig およびグローバル AnalyzerConfig ファイルを使用して、.NET のコード分析ルールを設定するための包括的なガイドです。コードスタイルルール(IDE*)、コード品質ルール(CA*)、重大度レベル、AnalysisLevel、EnforceCodeStyleInBuild、ディレクトリ階層の優先順位、.globalconfig ファイルを扱います。

対象範囲の境界: このスキルでは、アナライザールールの設定と調整を扱います。プロジェクトへのアナライザーパッケージの追加については、[skill:dotnet-add-analyzers] を参照してください。カスタムアナライザーの作成については、[skill:dotnet-roslyn-analyzers] を参照してください。プロジェクトレベルのビルド構成(Directory.Build.props、ソリューションの構成)については、[skill:dotnet-project-structure] を参照してください。

相互参照:アナライザーパッケージの追加と AnalysisLevel の設定については [skill:dotnet-add-analyzers]、カスタムアナライザーの作成については [skill:dotnet-roslyn-analyzers]、Directory.Build.props とソリューションの構成については [skill:dotnet-project-structure]、EditorConfig ルールで適用される命名規則と書式規則については [skill:dotnet-csharp-coding-standards] を参照してください。


EditorConfig の概要

.editorconfig は、.NET プロジェクトでコードスタイルと分析ルールの動作を制御するための標準構成ファイルです。.NET コンパイラー(Roslyn)は .editorconfig を読み取り、次の項目を判断します。

  • コードスタイルの設定 -- 命名、書式、式レベルのパターン(IDE* ルール)
  • コード品質ルールの重大度 -- CA* および IDE* の診断を抑制、引き下げ、または引き上げます
  • 書式ルール -- インデント、空白、新しい行
ディレクトリ階層と優先順位

EditorConfig ファイルは階層的に適用されます。コンパイラーはソースファイルからファイルシステムのルートに向かって検索し、見つかった各 .editorconfig の設定を統合します。最も近いファイルが優先されます。つまり、src/MyApp/.editorconfig の設定は、リポジトリルートの .editorconfig にある同じ設定を上書きします。

repo-root/
  .editorconfig              # Shared baseline (root = true)
  src/
    .editorconfig            # Overrides for production code
    MyApp.Api/
      .editorconfig          # API-specific overrides (if needed)
  tests/
    .editorconfig            # Relaxed rules for test projects

最上位のファイルに root = true を設定すると、上位への検索を停止できます。これを設定しないと、エディターはリポジトリルートより上のユーザーレベルまたはシステムレベルの EditorConfig ファイルまで検索するため、再現性のない動作が発生します。

# repo-root/.editorconfig
root = true

[*.cs]
indent_style = space
indent_size = 4
ファイルの Glob パターン

EditorConfig のセクションでは、Glob パターンを使用して設定の適用対象となるファイルを指定します。

パターン対象
[*.cs]すべての C# ファイル
[*.{cs,vb}]C# ファイルと Visual Basic ファイル
[**/test/**/*.cs]任意の test ディレクトリ以下にある C# ファイル
[Program.cs]ファイル名が完全に一致するファイル

コードスタイルルール(IDE*)

IDE ルールは、Roslyn コンパイラーおよび IDE によって適用されるコードスタイルの設定を制御します。dotnet_style_*、csharp_style_*、および dotnet_diagnostic.IDE*.severity のエントリを使用して設定します。

主な IDE ルールのカテゴリ
範囲カテゴリ例
IDE0001-IDE0009簡略化IDE0001(名前を簡略化)、IDE0003(this. 修飾を削除)、IDE0005(不要な using を削除)
IDE0010-IDE0039式の設定IDE0016(throw 式)、IDE0017(オブジェクト初期化子)、IDE0018(変数のインライン化)、IDE0028(コレクション初期化子)、IDE0034(default を簡略化)、IDE0039(ローカル関数を使用)
IDE0040-IDE0069修飾子とアクセスの設定IDE0040(アクセシビリティ修飾子を追加)、IDE0044(readonly を追加)、IDE0062(ローカル関数を static にする)
IDE0070-IDE0090+パターンマッチングと最新の構文IDE0071(補間を簡略化)、IDE0078(パターンマッチングを使用)、IDE0090(new 式を簡略化)
IDE0100-IDE0180その他の簡略化IDE0130(名前空間をフォルダーに合わせる)、IDE0160/IDE0161(ブロック形式とファイル スコープ形式の名前空間)
IDE0200-IDE0260ラムダとメソッドの設定IDE0200(不要なラムダを削除)、IDE0230(UTF-8 文字列リテラルを使用)
IDE1005-IDE1006命名ルールIDE1006(命名ルール違反)
コードスタイルの設定
[*.cs]
# Expression-level preferences
csharp_style_expression_bodied_methods = when_on_single_line:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_expression_bodied_constructors = false:silent

# Pattern matching
csharp_style_prefer_pattern_matching = true:suggestion
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion

# Null checking
csharp_style_prefer_null_check_over_type_check = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion

# var preferences
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion

# Namespace style (.NET 6+)
csharp_style_namespace_declarations = file_scoped:warning

# Using directives
csharp_using_directive_placement = outside_namespace:warning
dotnet_sort_system_directives_first = true
dotnet_diagnostic による IDE ルールの重大度

各 IDE ルールの重大度は個別に設定できます。

[*.cs]
# Enforce removal of unnecessary usings as a build warning
dotnet_diagnostic.IDE0005.severity = warning

# Enforce file-scoped namespaces as a build error
dotnet_diagnostic.IDE0161.severity = error

# Demote new-expression simplification to suggestion
dotnet_diagnostic.IDE0090.severity = suggestion

# Disable this. qualification rule entirely
dotnet_diagnostic.IDE0003.severity = none

コード品質ルール(CA*)

CA ルールは、設計、パフォーマンス、セキュリティ、信頼性、使用方法に関する問題を検出します。.NET SDK に同梱されており、AnalysisLevel で制御します。CA ルールのカテゴリ一覧と AnalysisLevel の設定方法については、[skill:dotnet-add-analyzers] を参照してください。

主な CA カテゴリは次のとおりです。設計(CA1000s)、グローバリゼーション(CA1300s)、相互運用性(CA1400s)、保守性(CA1500s)、命名(CA1700s)、パフォーマンス(CA1800s)、信頼性(CA2000s)、セキュリティ(CA2100s、CA3xxx、CA5xxx)、使用方法(CA2200s)。

CA ルールの重大度設定
[*.cs]
# Suppress rules not applicable to your project type
dotnet_diagnostic.CA1062.severity = none          # Nullable handles parameter validation
dotnet_diagnostic.CA2007.severity = none          # ConfigureAwait not needed in ASP.NET Core apps

# Escalate important rules
dotnet_diagnostic.CA1822.severity = warning       # Mark members as static
dotnet_diagnostic.CA1848.severity = warning       # Use LoggerMessage delegates
dotnet_diagnostic.CA2016.severity = warning       # Forward CancellationToken

# Error-level for security rules
dotnet_diagnostic.CA2100.severity = error         # SQL injection review
dotnet_diagnostic.CA5350.severity = error         # Weak cryptographic algorithms

重大度レベル

5 つの重大度レベルによって、診断の報告方法が決まります。

重大度ビルド出力IDE の波線エラー一覧ビルド失敗(TreatWarningsAsErrors)
errorはい(エラー)赤エラータブ常に
warningはい(警告)緑警告タブはい(TreatWarningsAsErrors を指定した場合)
suggestionいいえ灰色の点メッセージタブいいえ
silentいいえいいえいいえいいえ(コード修正は利用できますが、ビルドやエラー一覧には表示されません)
noneいいえいいえいいえいいえ(ルールは完全に無効になります)
重大度の一括設定

カテゴリ全体の既定の重大度を設定します。

[*.cs]
# Set all design rules to warning
dotnet_analyzer_diagnostic.category-Design.severity = warning

# Set all performance rules to error
dotnet_analyzer_diagnostic.category-Performance.severity = error

# Set all naming rules to suggestion
dotnet_analyzer_diagnostic.category-Naming.severity = suggestion

dotnet_analyzer_diagnostic.category-{Category}.severity で使用できるカテゴリ名は、Design、Documentation、Globalization、Interoperability、Maintainability、Naming、Performance、SingleFile、Reliability、Security、Usage です。IDE* ルールはカテゴリ単位の一括設定の対象外です。dotnet_diagnostic.IDE*.severity で個別に設定してください。

ルールごとの設定はカテゴリ単位の設定より優先されます。カテゴリ単位の設定は AnalysisLevel の既定値より優先されます。

優先順位(高い順):

  1. ルール単位:dotnet_diagnostic.CA1822.severity = error
  2. カテゴリ単位:dotnet_analyzer_diagnostic.category-Performance.severity = warning
  3. AnalysisLevel の基準値(MSBuild プロパティで設定)

AnalysisLevel と EnforceCodeStyleInBuild

AnalysisLevel は、有効になる組み込み CA ルールとその既定の重大度を制御します。値は latest(既定。正確性に関するルールのみ)から latest-all(すべてのルール)まであります。SDK のアップグレード後もルールセットを固定するには、特定の .NET SDK メジャーバージョン(例:8-all、10-all)を指定してください。実験的なルールも含めて最も広範にカバーするには、preview-all を使用してください。AnalysisLevel の値一覧と設定方法については、[skill:dotnet-add-analyzers] を参照してください。

EnforceCodeStyleInBuild

既定では、IDE* ルールは IDE 内でのみ実行され、dotnet build の実行時には実行されません。ビルド時にも適用するには、次のように設定します。

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

これは CI で適用するうえで非常に重要です。有効にしないと、.editorconfig で警告またはエラーとして設定していても、コードスタイル違反が見逃されます。厳密に適用するには、TreatWarningsAsErrors と組み合わせます。

<PropertyGroup>
  <AnalysisLevel>latest-all</AnalysisLevel>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
  <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

グローバル AnalyzerConfig ファイル(.globalconfig)

グローバル AnalyzerConfig ファイル(.globalconfig)は、アナライザー設定において .editorconfig の代替となります。ディレクトリに対する相対的な配置は不要で、コンパイル内のすべてのファイルにグローバルに適用されます。

.globalconfig と .editorconfig の使い分け
項目.editorconfig.globalconfig
範囲ディレクトリ相対(ファイル glob セクション)コンパイル全体(ファイルセクションなし)
階層ディレクトリをさかのぼってマージフラット(ディレクトリをたどらない)
IDE サポート完全対応(書式設定、リファクタリング、分析)分析ルールのみ
用途ディレクトリ単位の書式設定と分析プロジェクト間、または NuGet パッケージ間で共有するルール設定
.globalconfig の構文
# Filename: .globalconfig (or any name with is_global = true)
is_global = true

# Global level determines priority (higher number = higher priority)
global_level = 100

# Configure rules (same syntax as .editorconfig, without [*.cs] sections)
dotnet_diagnostic.CA1822.severity = warning
dotnet_diagnostic.CA2007.severity = none
dotnet_diagnostic.IDE0005.severity = warning
.globalconfig をプロジェクトに含める

MSBuild の GlobalAnalyzerConfigFiles 項目を使用して参照します。


<ItemGroup>
  <GlobalAnalyzerConfigFiles Include="$(MSBuildThisFileDirectory).globalconfig" />
</ItemGroup>

NuGet アナライザーパッケージは、buildTransitive/ に .globalconfig ファイルを含めることで、利用側に既定の重大度を適用できます。

global_level の優先順位

複数の .globalconfig ファイルが適用される場合、global_level の値によってどのファイルが優先されるかが決まります。値が大きいほど優先されます。SDK の既定のグローバル構成では global_level = -1 が使用されます。ユーザー構成では global_level = 0 以上を使用してください(省略した場合の既定値は 0 です)。NuGet に含まれる構成では、ユーザーによる上書きを可能にするため、負の値を使用します。

優先順位の全体像(高い順):

  1. ルール単位の .editorconfig エントリ
  2. カテゴリ単位の .editorconfig エントリ
  3. global_level が最も高い .globalconfig
  4. global_level が低い .globalconfig
  5. SDK の既定構成(AnalysisLevel)

命名規則(IDE1006)

EditorConfig は、ビルド時に命名規則を適用するカスタム命名ルールをサポートしています(EnforceCodeStyleInBuild が有効な場合)。

[*.cs]
# Define symbol groups
dotnet_naming_symbols.public_members.applicable_kinds = property, method, field, event
dotnet_naming_symbols.public_members.applicable_accessibilities = public

dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

dotnet_naming_symbols.interfaces.applicable_kinds = interface

# Define naming styles
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.underscore_prefix.capitalization = camel_case
dotnet_naming_style.underscore_prefix.required_prefix = _

dotnet_naming_style.interface_prefix.capitalization = pascal_case
dotnet_naming_style.interface_prefix.required_prefix = I

# Bind rules (lower number = higher priority)
dotnet_naming_rule.interfaces_must_start_with_i.symbols = interfaces
dotnet_naming_rule.interfaces_must_start_with_i.style = interface_prefix
dotnet_naming_rule.interfaces_must_start_with_i.severity = warning

dotnet_naming_rule.public_members_pascal_case.symbols = public_members
dotnet_naming_rule.public_members_pascal_case.style = pascal_case
dotnet_naming_rule.public_members_pascal_case.severity = warning

dotnet_naming_rule.private_fields_underscore.symbols = private_fields
dotnet_naming_rule.private_fields_underscore.style = underscore_prefix
dotnet_naming_rule.private_fields_underscore.severity = warning

一般的な構成テンプレート

推奨ベースライン(.editorconfig)
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.cs]
# Namespace and using preferences
csharp_style_namespace_declarations = file_scoped:warning
csharp_using_directive_placement = outside_namespace:warning
dotnet_sort_system_directives_first = true

# Code style enforcement in build
dotnet_diagnostic.IDE0005.severity = warning
dotnet_diagnostic.IDE0161.severity = warning
dotnet_diagnostic.IDE0090.severity = suggestion

# CA rule adjustments
dotnet_diagnostic.CA1848.severity = warning
dotnet_diagnostic.CA2016.severity = warning
テストプロジェクトのオーバーライド(tests/.editorconfig)

テストの可読性と競合するルールを緩和するには、tests/ ディレクトリに別の .editorconfig を配置します。プロジェクトの種類(ASP.NET Core アプリ、ライブラリ、テストプロジェクト)ごとの一般的な抑制パターンについては、[skill:dotnet-add-analyzers] を参照してください。

[*.cs]
# Relax rules for test readability
dotnet_diagnostic.CA1707.severity = none          # Allow underscores in test names
dotnet_diagnostic.CA1822.severity = none          # Test methods often not static
dotnet_diagnostic.IDE0058.severity = none         # Expression value is never used

生成コードの構成

ソースジェネレーターやスキャフォールディングツールが生成するコードでは、IDE/CA の警告が発生することがよくあります。生成ファイルの解析を抑制するには、generated_code = true の設定またはファイルのグロブパターンを使用します。

# Suppress warnings in generated code files
[*.g.cs]
generated_code = true

[*.generated.cs]
generated_code = true

generated_code = true を設定すると、Roslyn はそのファイルを生成コードとして扱い、各アナライザーで構成されている GeneratedCodeAnalysisFlags を適用します(多くのアナライザーは既定で生成コードをスキップします)。これは、ソースジェネレーターを使用する場合に特に重要です。詳しくは [skill:dotnet-csharp-source-generators] を参照してください。


参考資料

コメント