こんにちは、サイオステクノロジーの佐藤 陽です。
今回はVisualStudio上でソースコードのチェックをおこなってくれる、コードアナライザーの機能をご紹介します。
はじめに
皆さんMicrosoftのVisual Studio使ってますか?
個人的には非常に便利で、洗練されているIDEで気に入っています。(重たいのは否めないですが。)
そんなVisual Studioには自分の書いたコードを分析し、検査してくれる機能があります。
この機能を使う事で、以下のようなメリットが考えられます。
- 潜在リスクの除外
- レビュー前の一定の品質担保
- 無駄な指摘を防ぐことでレビュアー、レビューイの負担軽減(大事!)
- チーム内でのコーディング記法の統一化
Visual Studio使っている方には是非使ってもらいたい機能なのでご検討ください!
環境
今回利用する環境は以下の通りです。
- .NET 6
- Microsoft Visual Studio Enterprise 2022 Version 17.3.3
.NETのバージョンは`5`以上であれば標準対応ですが、.NET Coreや.NET Frameworkでもパッケージを導入することで対応可能です。
また、VisualStudioに関しては2019 version 16.8以降が必要になります。
設定
Visual Studioの
ソリューションエクスプローラー->csprojファイルで右クリック->プロパティ
を開きます。
すると以下のようなプロパティ設定画面が開くので、
Code Analysis->.NET Analyzer
を選択します。
.NET Analyzerを有効にし、分析レベルを選択します。
分析レベルに関してはMSのサイトにて細かく紹介されているので
チーム内で協議し、どのレベルでの分析・検査を行うかを決めるとよいかと思います。
今回は.NET6を利用しているので、「6.0 推奨」を選択します。
ここで設定を行うと、csprojファイルのコードでも設定が行われています。
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<RootNamespace>Function</RootNamespace>
<AnalysisLevel>6.0-recommended</AnalysisLevel>
<EnableNETAnalyzers>True</EnableNETAnalyzers>
</PropertyGroup>
PropertyGroupに、EnableNETAnalyzersとAnalysisLevelが追加されていることが分かります。
動作確認
実際に分析を行ってみます。
ASP.NET CoreでもAzure Functionsでもなんでもいいので適当にプロジェクトを作成します。
そこで以下のようなメソッドを定義します。
何の意味もないコードですが、この状態でビルドします。
private static bool Equal(string a, string b)
{
return a.Equals(b);
}
すると、以下のようなwarningが発生するかと思います。
warning CA1309: 序数の文字列比較を使用してください
また、コード上のEqualsのところに波線が書かれ、同様の文言も表示されていることが分かります。
これが、指定した条件(6.0-recommended)で分析を行い、リスクがある記述が検出された結果です。
ご丁寧に検出項目の詳細が書かれたリンクまで貼ってあり、MSのページへ飛ぶことができます。
そこには
- なぜこの規則があるのか
- 修正方法
- 抑制できるケース
などの記載があり、これを見てどのように修正するかを判断することが可能です。
今回は、「string.Equalsのメソッドに、System.StringComparisonの引数を追加してください」ということでしたので、早速修正したいと思います。
なお、VisualStudio上で「考えられる修正内容を表示する」という項目から、自動で修正する方法もありますね。便利!
今回は、以下のように修正しました。
private static bool Equal(string a, string b)
{
return a.Equals(b, StringComparison.Ordinal);
}
この状態でビルドすることで、先ほど出ていたwarning CA1309が解消されていることが分かります。
まとめ
今回はVisual StudioのCode Analysis機能を使って、検出および修正を行ってみました。
簡単に設定を行うだけで、リスクのあるコードを検出できるのは頼もしいですね。
ただ現状の設定だけだとカスタマイズ性に欠け、チームの目的との乖離がある場合があります。
次回のブログでは、検出レベルのカスタマイズや、warningの抑制方法などについてご紹介したいと思います。
お楽しみに!