【C#】初心者におすすめ!コードアナライザーを使おう!【.NET】
コードアナライザーとは
初心者がやりがちな 「良くないC#の書き方」を教えてくれるツール です!
「良くない」とはこういうのです!
- 遅い
- バグりやすい
- 危ない(セキュリティリスク)
- 書き方がバラバラ
あー、それ!初心者が最初に教えてほしいやつ!
しかも!教えてくれるだけじゃなくて自動で直してくれます…!!(リファクタリング)
(一部だけだけど…)
タダで最初から使える
.NET SDKをインストールすると使えるようになります。
しかも無料!
無料ってことはつまり…タダ、ってコト!?
VS Codeでも使える
「初心者は本家Visual Studio(特にVS Comunity)を使おう」って言われるのですが、
Visual Studio Code (VS Code) + C# Dev Kit拡張でもコードアナライザーは使えます。
本家VSはクソデカでインストールも遅いので、軽めのVS Codeが個人的にはオススメです!
AIが教えてくれないことも教えてくれる!
最近ならAIに教えてもらうことも多いと思いますが…コードアナライザーの方がいいことがあります。
AI(Chat GPTくんとかCopilotくんとか)が教えてくれるのは、次の書き方です。
- みんなが良く書く書き方
- 少し前までの書き方
みんなが良く書く書き方…ということは、みんながよくやる間違いをおすすめしてくることもある、ってことです。
ヒエッ。
AIは正しいかを判断してるんじゃなくて、「みんなが使ってるかどうか」で判断してるからね…
また、最新の情報に対応してないので、
たとえば最近出たばっかのC# 12.0の「コレクション式」とかは教えてくれません
(とくにChat GPTくん)。めっちゃ便利なのにね。
これに限らず、AIくんのコード、なんか微妙に古臭いコードになるんですよね…。
流行ってると思ってムリに「なぁぜなぁぜ」を使ってくるオジサンみたいだぁ…。
コードアナライザーだとコレクション式も教えてくれます。
💡アイコンを押すと、直すこともできます。
AIくんだけにまかせるんじゃなくて、AIくんにざっくりかかせてコードアナライザーで直す、みたいなのだと速いかも?
設定方法
プロジェクトごと
C#のプロジェクトをつくると「【プロジェクト名】.csproj
」っていうファイルができます。
たとえばコンソールアプリ(黒い画面で動かすやつ)をdotnet new console
で作るとこうなります。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
このcsproj
をVSCodeで開いて2行追加します!(PropertyGroup
の中。)
1行目:コードアナライザーを有効にする
.NET SDKに標準のコードアナライザーを有効にするのはこの1行。
+ <EnableNETAnalyzers>true</EnableNETAnalyzers>
これだけでも使えます!
2行目:うるささを調整する
2行目を追加することでもう少し調整します!
+ <AnalysisLevel>latest-All</AnalysisLevel>
こうすると、嫁に対して指でほこりチェックして
「あ~ら、全然掃除できてないじゃないの!一体、どんなしつけを受けてきたのかしらねぇ?」
っていう姑ぐらいうるさくなります!!!
ウワー!!!!やめーや!!!!
latest-Recommended
かlatest-Minimum
くらいがいいかも?
AnalysisMode | うるささレベル |
---|---|
Minimum |
ミニマムっていうから少ないのかな?と思いますが、Default よりは指摘してくれるらしい… |
Recommended |
これが一応推奨らしい |
All |
"あ~ら、全然掃除できてないじゃないの!一体、どんなしつけを受けてきたのかしらねぇ?" |
latest
は最新の.NETバージョンを指します(.NET 8.0で作ってれば 8.0 = C# 12.0)。6.0
にすれば.NET 6.0(=C# 10.0)相当の指摘にすることもできます。
設定後
追加したら保存してください。
場合によってはすぐ反映されないかも?
(VSCodeなら「開発者:ウィンドウの再読み込み」コマンドとかで有効になることが多いです)
追加したcsproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-Minimum</AnalysisLevel>
</PropertyGroup>
</Project>
ソリューションごと
上の設定はプロジェクトそれぞれのcsproj
に追加する必要があります!面倒!
なのでいっぱいプロジェクトがある場合はまとめて設定しましょう。
上の階層にDirectory.Build.props
やDirectory.Build.targets
というファイルを作って、
さっきの中身を書いておきます。そうすると下の階層のプロジェクトでは自動でよんでくれるようになります。
.props
は.csproj
より先に読まれるのでコードアナライザーの場合は.props
がいいかも。
<Project>
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-Minimum</AnalysisLevel>
</PropertyGroup>
</Project>
抑える
方法はいくつかあります!
素晴らしい記事に解説はまるなげ!
以下補足です!
- EditorConfigで抑える
- 属性をつかってクラスやメソッド単位で抑える
- 指定範囲で抑える
EditorConfigで抑える
プロジェクト全体とかで設定できます。
単に抑えるだけじゃなくてsuggestion
とかerror
とかに調整できるのがいいですね!
suggestion
にして場合場合で判断するのがいいかも。
# こっちは完全に抑える
dotnet_diagnostic.CA1707.severity = none
# これ直さなくていい?って聞いてもらえる
dotnet_diagnostic.CA1707.severity = suggestion
# エラーにする
dotnet_diagnostic.CA1707.severity = error
属性をつかってクラスやメソッド単位で抑える
次に良く使うのがこれ。
SuppressMessageAttributeでクラスとかメソッド単位で指定して抑えることができます。
引数とか戻り値とかもできるはず。
using System.Diagnostics.CodeAnalysis;
[SuppressMessage("カテゴリ", "ID")]
void MyFunction(int arg1, string arg2)
{
//...
}
-
カテゴリはコードアナライザーの名前とか
- カテゴリは指定しなくても効くようです
-
IDは短いの(
CAXXXX
とか)でOK- IDが合えば抑えられます
指定範囲で抑える
VSCodeでは💡アイコンから使えますが、意外と使いにくいです。
#pragma warning disable CA1303 // ローカライズされるパラメーターとしてリテラルを渡さない
Console.WriteLine("Hello, World!");
#pragma warning restore CA1303 // ローカライズされるパラメーターとしてリテラルを渡さない
もっと教えてほしい…
標準のコードアナライザー(.NET Analyzer)以外にも追加で教えてくれるようにできます!
標準以外のアナライザーはnuget経由でライブラリみたいに追加します。
Directory.Build.props
に書いておけば子階層全部で有効にできます。
<ItemGroup>
<PackageReference Include="Roslynator.Analyzers" Version="4.7.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
Roslynator
これだけあれば いいかんじ になるすごいやつ!
公式+これだけでもじゅうぶんかも…
アナライザーは以下の3つに分かれてますので3つインストールしてみてください。
Roslynator.Analyzers
Roslynator.CodeAnalysis.Analyzers
Roslynator.Formatting.Analyzers
NetFabric.Hyperlinq.Analyzer
LINQ関係の事を色々おしえてくれます!
Meziantou.Analyzer
ちょっとうるさいけど色々指摘してくれるAnalyzerです!
部分的に有効にするのがオススメ!
Microsoft.Unity.Analyzer
Unity向けです!
xUnit / NUnit
テストライブラリ用のコードアナライザーもあります!ライブラリ公式のと、Microsoftが出してる2種類があります。
Roslynatorが出してる版もあります。
xUnit
NUnit
MSTest
まとめ!
- 初心者はコードアナライザーに色々教えてもらおう!
- ChatGPTやCoPilotはちょい古おじさん。組み合わせて使おう。
- うるささは調整しよう!
- 公式以外にも色々アナライザーがあるぞ!
Discussion