EditorConfigを使ってC#のコーディングルールを統一させる

f:id:tanabebe:20210420190419p:plain

1. 背景

いきなりですが,皆さんが業務でプログラムを書くにあたり,コーディングルールは定められていますか?
過去にはありましたが,今は使われていないですとか,ルールはないですねなど.割と思い当たる節があるのではないでしょうか?私も身に覚えがあります.
では,どう解決するべきだろうと考えた結果,EditorConfigを使用してコーディングルールを統一することにしました.タイトルでも触れている通り,言語はC#です.

2. EditorConfigとは

EditorConfigGoogle翻訳にブチ込むと以下とあり,コーディングスタイルを統一するのにうってつけですね.

EditorConfigは、さまざまなエディターやIDEで同じプロジェクトに取り組んでいる複数の開発者に対して一貫したコーディングスタイルを維持するのに役立ちます。 EditorConfigプロジェクトは、コーディングスタイルを定義するためのファイル形式と、エディターがファイル形式を読み取って定義されたスタイルに準拠できるようにするテキストエディタプラグインのコレクションで構成されています。 EditorConfigファイルは読みやすく、バージョン管理システムでうまく機能します。

3. EditorConfig for VS Codeのインストール

EditorConfig for VS Codeをインストールします.

f:id:tanabebe:20210419130455p:plain

4. VS CodeでOmnisharpを有効化する

拡張機能C#にはOmnisharpが搭載されているので関連設定を有効化します.VS Code⌘ + ,もしくはCode→基本設定→設定からOmnisharpで検索します.以下の2項目にチェックを入れます.

  • Omnisharp: Enable Editor Config Support
  • Omnisharp: Enable Roslyn Analyzers

f:id:tanabebe:20210419130613p:plain

チェックを入れたら⌘ + shift + pもしくはF1でコマンドパレットにreloadと入力してReload Windowを選択,VS Codeの再読み込みを行います.

5. ビルド時に有効とさせる

実はこれについては設定がわからなくて少しハマりましたが,Microsoft Docsに書いてありました.目を凝らさないと見落としてしまうので気を付けなければ...
ビルド時にIDEコードスタイルのルールを有効としたいので,対象の.csprojファイルに以下を追加します.

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

これで準備完了です.あとは.editorconfigファイルを作成して設定していきます.

6. コーディングルールを設定していく

EditorConfig for VS Codeをインストールされていると,エクスプローラー上で右クリック時にGenerate .editorconfigの項目が出るので選択します.私はプロジェクトのルートに置きました.

f:id:tanabebe:20210420140535p:plain

一部を抜粋しました.コーディングルールについてはこちらを参考に記載していきましたが,ルールの量も多いので完成への道のりはまだ遠いです.ちなみに前述のビルド有効時の設定値としてIDE0055だけ記載しています.ルールIDは多いのでドキュメントを眺めて適宜設定しましょう.

# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# All files
[*]
indent_style = space

# JSON files
[*.json]
indent_size = 2

# CSharp code style settings:
[*.cs]
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false

# IDE0055: Fix formatting
dotnet_diagnostic.IDE0055.severity = warning

# 改行オプション
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true

# インデントオプション
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents_when_block = true

# varの設定
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion

例えばdotnet_diagnostic.IDE0055.severity = warningに絞って見ていくと,このルールに該当した場合は以下のように警告が表示されます.

f:id:tanabebe:20210419130749p:plain

インデント,スペース,および改行が統一されていない場合はこれに該当します.この例では無駄なスペースが入っているのが原因です.このようにEditorConfigで,動作に関わらない小さなノイズも検知出来ます.
ここではwarningとしていますが,errorと記述することでビルド時のエラー対象としても扱うことが出来ます.委ねられている感じがありがたい.

7. まとめ

VS CodeでEditorConfigを使用してコーディングルールを定義する方法について書きました.今回はC#で進めましたが,もちろん他の言語にも対応しています.作成した.editorconfigファイルをリポジトリ管理すればチーム共有も非常に楽です.
とはいえ記載した内容では完成には程遠いので,今後も理解を深めながら進めます.C#で言うとroslynが参考になりそうでした.こういったルールはついおろそかにしてしまうので,いつでも引き出せるように事前準備が大事ですね.

8. 参考

www.neputa-note.net

editorconfig.org

docs.microsoft.com

docs.microsoft.com

docs.microsoft.com

github.com