×

VSCodeでもStyleCopを使いたい【C#】

2020/10/10

目次 [隠す]

VSCodeロゴ

StyleCopAnalyzersとは?

VisualStudioでC#を記述する際に「StyleCopAnalyzers(以降StyleCop)」というコード解析ツールを使用しています。

github:DotNetAnalyzers/StyleCopAnalyzers

C#コーディングルール_#13_StyleCopAnalyzersについて|ピーコックアンダーソン

前回まででローカルルールのお話は終わりです。今回からはStyleCopAnalyzers(スタイルコップアナライザー)と

記事画像

StyleCopはNugetパッケージ管理で追加できるプラグインで、上の記事にある通り、

例えば「プロパティ」と「コンストラクタ」ではどちらを上に書くのが正しいか?とか,XMLコメントが漏れている箇所とか,そういったものを全部まとめて警告にしてくれます。

という、チーム開発ではもちろん、個人開発においても整ったコーディングを支援してくれる強力なツールです。

※VisualStudioでの使い方は上の記事にインストールから設定方法まで詳しく説明があります。

VSCodeでStyleCopを使うには

StyleCopのインストール

で、本題です。

StyleCopはVSCodeの拡張機能には対応していないので、NugetPackageを管理する拡張機能を使用するか、以下のように、.csprojファイルに記述し、restoreを実行します。

インストール手順

  • StyleCopを適用したいプロジェクトの「.csproj」ファイルを開きます。
  • <Project>タグ内に、<ItemGrcup>タグを追加します。
  • 追加した<ItemGroup>タグ内に以下のコードを貼り付けます。
.csproj
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>

  • ※最新バージョンのパッケージのコードは、こちらのページの「PackageReference」タブから取得できます。
  • コンソールで、「dotnet restore」を実行します。
terminal

PS C:\Users\xxxx\> dotnet restore
  復元対象のプロジェクトを決定しています...
  C:\Users\takuma\source\repos\TestApp\TestApp.csproj を復元しました (188 ms)。

不要なアラートを除去する

StyleCopのインストールが完了すると、コード解析が始まり、一斉に警告が表示されます。

記事画像

警告の中には不要なものもあると思います。

その場合は、「.editorconfig」にignore対象のCheckIDを追加します。(.editorconfigを有効化する手順は後述します)

.editorconfig
  [*.{cs}]
    ### StyleCop Ignore ###
    # PrefixLocalCallsWithThis
    dotnet_diagnostic.SA1101.severity = none
    # UsingDirectivesMustBePlacedCorrectly
    dotnet_diagnostic.SA1200.severity = none
    # FieldNamesMustNotBeginWithUnderscore
    dotnet_diagnostic.SA1309.severity = none
    # PropertySummaryDocumentationMustMatchAccessors
    dotnet_diagnostic.SA1623.severity = none
    # DocumentationTextMustEndWithAPeriod
    dotnet_diagnostic.SA1629.severity = none
    # FileMustHaveHeader
    dotnet_diagnostic.SA1633.severity = none
    # ConstructorSummaryDocumentationMustBeginWithStandardText
    dotnet_diagnostic.SA1642.severity = none
  

CheckIDは波線にマウスをかざすか、「問題」ウインドウで参照できます。(下記画像のマーキング箇所)

記事画像

追加した後は、ctrl + shift + p から Reload Window を呼び出し、VSCodeを再読み込みすると反映されます。

上記では、下記のCheckIdを無効にしています。

SA1101

クラス内のインスタンスメンバの接頭辞にthisが付いていない場合に警告。
C#では、ローカルメンバのthisを省略できるので無効にしています。

SA1200

usingディレクティブがnamespaceエリア外に記述されている場合に警告。
usingディレクティブはnamespaceの外側に書くものだと思って生きてきたので無効にしています。

SA1309

フィールド名が_(アンダースコア)で始まる場合に警告。
ローカルメンバであることを表すためにアンダースコアを付けるようにしています。よって無効に。

SA1623

プロパティのXMLドキュメントヘッダーのコメント内に、プロパティのアクセサと一致した記述がない場合に警告。
例えば、GetとSetを持つプロパティの場合、XMLコメントの先頭が「Gets or set」で始まっていないと怒られます。
英語圏での作法でしょうか。私は無効にしています。

SA1629

XMLドキュメントヘッダーの文章がピリオドで終了していない場合に警告。
これも英文におけるルールだと思うので、無効にしています。

SA1633

ファイルのヘッダーコメントがない場合に警告。
ヘッダコメントは書かないので無効にしています。

SA1642

コンストラクターのXMLドキュメントヘッダーに適切な要約テキストが含まれていない場合に警告。
これも英文でコメントが書かれることを前提に警告しているので、無効としています。

この他のCheckIDについては、githubに各CheckID毎の.mdファイルが用意されています。

StyleCopAnalyzers/documentation

VSCodeで.editorconfigを使えるようにする手順

拡張機能のインストールにより、editorconfigが使えるようになりますが、C#では別途、OmniSharpの設定変更をする必要があります。

参考サイト:Using the .editorconfig in VS2019 and VSCode

  1. 拡張機能「EditorConfig for VS Code」をインストールします。
    記事画像
  2. エクスプローラーで右クリックをすると「Generate .editorconfig」が表示されるようになるので、クリックするとファイルが生成されます。
    記事画像
  3. C#でeditorconfigを有効化するには、さらに以下の作業が必要です。
  4. 「メニュー→ファイル→ユーザ設定→設定」または ctrl + , で設定画面を開きます。
  5. 「Enable Editor Config Support」で検索し、チェックボックスにチェックを入れます。
    記事画像
  6. 続いて「Enable Roslyn Analyzers」で検索し、同様にチェックボックスにチェックを入れます。
    記事画像
  7. VSCodeを再読み込みすると.editorconfigが使用可能になります。

.editorconfigでも、いろいろとコーディングを規定するルールを設定できます。

私はStyleCopと併用しています。

詳細はそれなりのボリュームとなってしまいそうなので、後日、別途記事を書こうと思います。

最後に まとめ

VSCodeでNugetパッケージ「StyleCop」を使用する手順を紹介しました。

VisualStudioでStyleCopを使い始めた当初は、一行書くたびにアラートが出て、とてもうざったいように感じていました。

しかし、気づくといつの間にか警告が出ないようにコーディングをする癖が身についていました。

本当に良いコードを書くには、多くを学ぶ必要があると思いますが、最低限記述のルールを整えることで、チームであれば互いのレビューが効率化されると思いますし、個人であっても見直したときに可読性が増すと思います。

コーディングはできるだけ余計なことをしない、できれば仕組みでさせない様に環境を整えたほうが良いと思っています。

StyleCopは、あくまで警告をしてくれるツールですが、今回簡単に触れた.editorconfigも併せて使用するとより強力にコーディングルールを規定でき、かつリファクタリングの支援を受けることができるようになります。

詳細はまた後日書きます。

長文おつきあいありがとうございました。

VSCode・VisualStudio関連の記事

VSCodeの背景画像を設定してテンションを上げる(拡張機能を使用) | neputa note

本記事の目的 VSCodeのエディタ背景に好きな背景画像があるとテンションが上がるからそうしよう。 ※VSCodeサポート対象外の拡張機能を使用します。試す際は自己責任に於いて行ってください。

blog card

「Ubuntu 20.04LTS(日本語Remix)」にアプリをインストールする(LibreOffice、VSCode、Joplinなど) | neputa note

先日、購入した中古のノートPCに「Ubuntu 20.04LTS(日本語Remix版)」をインストールした。続けてOS周りの設定作業を行った。今回は必要なアプリケーションをインストールした作業の備忘録

blog card

多階層の要素を一括削除したい【VSCode - Vim】 | neputa note

例えばこんなHTMLコードがあった場合、大外のdivを含む全コードを少ない手数で削除したい。Vimの場合matchit.vim をONにしていれば、Visualモードで開始タグを選択し、終了タグまで「

blog card

editorconfig for VSCode でコーディングルールを 統一する【C#】 | neputa note

前回記事のStyleCopは、C#や.NETのコーディングスタイルを規定するため、警告を表示してくれるツールでした。今回のeditorconfigは、C#や.NETはもちろん、VSCodeのエディタ全

blog card

MoqでExpressionを引数に取るメソッド をセットアップする メモ | neputa note

引数に条件式(Expression)を取るメソッドをMoqにSetupしようとした際に少しハマったのでメモ。C# Moq

blog card

Unit Test が実行できなくなった 原因と対処 【 VisualStudio 2019 / xUnit 】 | neputa note

xUnitを使っています。Visual Studio 2019 で突然 UnitTest が実行できない状況に。原因と対処を備忘録としてノートする。Visual Studio 2019.NET

blog card

コメント