7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

StyleCop.AnalyzersをCLIで使いたい

Last updated at Posted at 2019-03-07

結論から言うと

今はできませんが、動くものを開発中です

StyleCop.Analyzers とは

RoslynベースのC#のコードに対する静的解析ツールです。
コーディング規約に違反していないかをチェック/修正まで行ってくれます
.NET Core/Roslyn などと同じくOSSとして公開されています
StyleCop.Analyzers

使用方法

VisualStudio/Rider などの統合開発環境を使用している場合は容易に使用できます
導入方法は VisualStudioであれば、NuGet Package Manager などから導入可能です
残念ながらVS Codeはサポートされていません

CLIで動かす同期

CIやgit commit hookなどでチェックしたいからです
その他に筆者はVS Code派なので...
特にコーディング規約に関わることはレビューで指摘するのは不毛ですので、
出来る限りPull/Merge Requestなどが上がった時点で自動的にチェックしたいという思いがあります

CLIで動くStyleCopのツール郡は存在している

StyleCop.Analyzersの前身プロジェクトで、StyleCopというものがあります
StyleCop

StyyleCop自身はCLIで動作し、静的解析としては必要十分な条件を満たしています
ただし、既に死んでいるプロジェクトです
StyleCop.Analyzersは開発が続けられており、新しいルールなども追加されています
また、StyleCopにはコードを修正する機能はありませんが、StyleCop.Analyzersにはあります

StyleCop.AnalyzersのCLIツールはあるのか

現時点ではありません
ただし、以下のようなIssuも上がっており、そのうち正式にサポートされるかもしれません
CLI?

ですが、いつ実装されるかもわからないものを待つのは辛いです

何度かトライして諦めていた

実は結構前からトライしていたのですが、StyleCop.Analzyersをビルドするために .NET Framework が必要でした
.NET FramworkはWindowsしかサポートしておらず、Mac/LinuxではStyleCop.Analyzersと依存しているライブラリ群をビルドしようとするとエラーとなり諦めていましたが、ようやく周辺環境も整ってきてビルドできるようになりました
Microsoft.Build.Locator はβ版ではありますが使用できます

なので作ってみた (まだ出来上がっていない)

進捗率は50%程度ですが、以下のように出力することができました
試しに解析してみたのは、gRPCのC#のソースコードです

dotnet StyleCopAnalyzersCmd.dll -d ./grpc/src/csharp

というようなコマンドで使えるようにしたいなと思ってますが、コマンド名がダサいので何か良い案があれば...

22abbc5e9839723ace571c8413a1ca31.png

余談

まだチェックだけで、コードの修正までは出来ていませんが、チェック処理がある程度ものになった時点で公開したいと思います
CLIツールを作るのに、CySharpさんのMicroBatchFrameworkが非常に便利です

GitHubに公開する際にはこのツールを作るための苦労話なども記載しないと思います
StyleCop.Analyzersの機能の全てがinternalで容易にアクセスできないのが非常に辛い。。。

7
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?