先日の以下記事の続きです。
VSCodeでもStyleCopを使いたい【C#】
VisualStudioでC#を記述する際に「StyleCopAnalyzers(以降StyleCop)」というコード解析ツールを使用しています。チーム開発ではもちろん、個人開発においても整ったコーディングを支援してくれる強力なツールです。VSCodeでStyleCopを使う手順をまとめています。
主に下記環境および言語を対象とした内容です。
editorconfigで実現できること
- StyleCopは、C#や.NETのコーディングスタイルを規定するため、警告を表示してくれる
- editorconfigは、C#や.NETはもちろん、VSCodeのエディタ全般におけるルールを設けるほか、強力なリファクタリング支援を受けることができる
ファイル種別毎の設定
.cs, .csproj, .configなど、ファイル毎にルールを分けることができます。
コードの種類によってインデントの数を変えたり、PascalCaseやcamelCaseなどの名前付け規則を振り分けたりできます。
プロジェクト単位での設定など
.editorconfigというファイルにルールを定義します。
つまり、プロジェクト毎に.editorconfigを設置することでプロジェクト別のルールを設けることができます。
設定の影響範囲については後述します。
コードの書き方も規定できる
C#以外は調べていないのでわかりません。(すいません)
インデントなどの他、thisの使用有無、ラムダ式にしなさいなど、その言語仕様に基づいた書き方を規定できます。
ルール通知の方法を調節できる
私の場合、規定したルールはすべて警告を出すようにしていますが、あくまで提案に留めたり、あるいはデフォルトで警告となっているものを一切警告しないようにするなど、ルールの通知方法を指定できます。
その他の特徴など詳細を説明します。
editorconfigを使えるようにする
拡張機能 EditorConfig for VS Code をインストールする
参考サイト:EditorConfig for VS Code
拡張機能「EditorConfig for VS Code」を検索し、インストールします。
エクスプローラーで右クリックをすると「Generate .editorconfig」が表示されるようになるので、クリックするとファイルが生成されます。
OmniSharpのeditorconfig の有効化
C#でeditorconfigを有効化するには、さらに以下の作業が必要です。
参考サイト:Using the .editorconfig in VS2019 and VSCode
「メニュー→ファイル→ユーザ設定→設定」または ctrl + , で設定画面を開きます。
「Enable Editor Config Support」で検索し、チェックボックスにチェックを入れます。
続いて「Enable Roslyn Analyzers」で検索し、同様にチェックボックスにチェックを入れます。
VSCodeを再読み込みすると.editorconfigが使用可能になります。
editorconfigの影響範囲
参考サイト:EditorConfig Specification
editorconfigのファイル処理は、「.editorconfig」という名前ですべての親フォルダを検索するというものです。
検索は、「root = true」を記述した .editorconfigが見つかると終了します。(あるいはファイルシステムのルートまで到達した場合)
ファイルは上から下階層の順に読み取られ、最新のルールが優先されます。
つまり複数の .editorconfigに同一のルールが定義されている場合、一番近いものが適用されます。
この仕様により、複数プロジェクトがある場合、各プロジェクト毎にeditorconfigを設置してルールを分けることができるほか、全プロジェクトのルートとなる階層に設置して全プロジェクト共通のルールを設けることも可能です。
ソースファイルを管理しているルート階層に .editorconfigを置くことで、すべてのプロジェクトの共通化を図る、といった使い方も可能です。
上位階層にある .editorconfigの影響をただ回避したいという場合、ルールを何も書かず、root=trueのみ記述した .editorconfigを配置します。
私は、すべてのソースファイルを置いているフォルダのルート階層に .editorconfigを置いて主にC#のルールを記述しています。
これにより、新規に作成したプロジェクトなどが、すべてこのルートの .editorconfigの影響を受けるようになります。
ちょっと一時的にサンプルコードを書きたくてプロジェクトを作成した場合、上記で説明した「root = true」のみを記述した .editorconfigをプロジェクトのルートに作成します。
ルール定義の書き方
言語・ファイル共通
ルールの影響範囲を指定するファイルの種別については、.gitignoreで使用できるものと同様のFilepath Globが使用できます。
参考サイト:EditorConfig Specification
以下は、editorconfig.orgにあるサンプルです。
C#のルール定義
そしてここからが本日書きたかったC#のコーディングルール定義です。
この作業に関しては以下のサイトを参考にしています。
前述した「OmniSharpのeditorconfigの有効化」により、dotnet、C#やVBに関するルールを、.editorconfigで定義できるようになります。
たとえば、C#ではthisを省略できますが、以下はこのルールを定義するケースです。
field, property, method, eventそれぞれにおいて、thisを不要(false)としている例です。
falseの後に、warningとあります。
これにより、this修飾子が記述されている箇所に警告が出るようになります。
warningの部分を、suggestionに変更すると、警告ではなく、情報として表示されるようになります。
この他、多くのルールを定義できます。
Microsoft Docsの「コード品質規則のルールオプション」、「コードスタイル規則のルールオプション」のページに、記述方法が掲載されています。
現在のところ、これらのページにあるルールを使用していますが、他にも参考になるものがありましたら教えていただけると嬉しいです。
まとめと現在使用中の.editorconfig
チームであれば、色々と話し合ってルールを設定していくのだと思いますが、私は一人で書く機会しかないので、ガッツリ警告を表示するようにしています。
そして、警告が出ないようにコーディングすることで、良いコードを書く癖が身につけばと考えています。
参考になるかわかりませんが、最後に、現在使用している .editorconfigを掲載しておきます。
みなさま良きコーディングライフを!