SANDFISH FACTORY

技術ブログです。python・vuejsを愛でる日々について綴ります

Macの環境で.NET ソース コード分析に入門してみる

お久しぶりです。
PyConJPの感想を書くだけのブログです。

そう言っておきながら、今回の記事のタイトルと整合性が取れていないのですが、いま興味持っているネタの起点はPyConJPなんです。

speakerdeck.com

こちら、去年のPyConJP2022のセッションです。
たまたま興味持ったセッションでASTを絡めた内容が多く、自分の環境でも試してみたくなりました。
Pythonで同じように試しても良いのですが、業務ではC#を使っているので、C#を題材に同じようにASTに絡めた内容としてコード分析をやってみようかなと思っています。

ただ、大きな問題として私の自宅環境のPCはMacなんですよね。

大抵、C#で開発を行う方の環境はWindowsだとは思いますが、まずはMac環境で.NET ソース コード分析がうまく動くところまでやってみたいと思います。

.NET ソース コード分析の概要を理解する

.NET FrameworkがサポートしているOSはWindowsです。
.NETはクロスプラットフォームオープンソース開発者用プラットフォームなので、Macの環境でも動かすことは可能です。

.NET (と .NET Core) - 概要 | Microsoft Learn

可能ではありますが、IDEであるVisual StudioWindows環境の方が便利な機能も多いので、普通に開発するのであれば、Windowsが良いと思います。

コード解析にはroslynを用いたものを利用します。
roslynは .NETコンパイラプラットフォームなので、.NET環境(つまりMacでも可)で実行可能です。

GitHub - dotnet/roslyn: The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.

基本的にはこちらの概要に書かれている内容をもとに検証していきたいと思います。

.NET のコード分析 | Microsoft Learn

環境を構築する

Visual Studio for Macをインストールする

手順はこちらです。
私はVisual Studio 2022 for Macをインストールしました。
そんなに困ることはないと思います。

Visual Studio for Mac をインストールする - Visual Studio for Mac | Microsoft Learn

検証用のプロジェクトを作る

Visual Studioを起動したら、新規を実行します。 プロジェクトテンプレートは検証用なので、コンソールアプリケーション(C#)を選択します。
コード分析は.NET5以降で標準で組み込まれているので、ターゲットフレームワークは.NET5以降の方が良いです。
ただ今回の検証はサクッと動かしたいので、該当のNuGetパッケージをインストールして環境構築するため、.NET5より前のバージョンで環境構築しました。(.NuGet追加するとコード分析するルールセットが簡単に手に入るため)
.NET5以降をターゲットとする場合は以下の一部の工程は無視しちゃってください。
プロジェクト名はSampleCodeとしました。

NuGetでコード分析のパッケージを追加する

この工程は.NET5より前のバージョンとしたので実施します。
.NET5以降であれば不要です。

前述の.NET ソース コード分析の概要にも記載がありますが、Microsoft.CodeAnalysis.NetAnalyzersを追加します。
ソリューション(もしくはプロジェクト)を選択して右クリックしてNuGetパッケージの管理を選択します。

Microsoft.CodeAnalysis.NetAnalyzersを検索し、該当のNuGetを選択してパッケージを追加します。

プロジェクトをビルドしてみる

ソリューションをビルドしてみます。 特に警告も出ることなく、ビルドが成功します。

.NET ソース コード分析を動かしてみる

ルールセットをプロジェクトに追加します。
ルールセットはNuGetパッケージ内に含まれています。ユーザーディレクトリ配下に.nugetディレクトリがあります。

.nuget/packages/microsoft.codeanalysis.netanalyzers/<パッケージのバージョン番号>/editorconfigにEditorConfigで定義されたコード分析のルール定義が入っています。
わかりやすくeditorconfig/AllRulesEnabledに入っている「.editorconfig」をプロジェクト配下にコピーします。

この状態でソリューションをクリーンし、ビルドし直すとコード分析された結果が警告として出力されます。

まとめ

今回はサクッと検証するための手順をまとめました。
意外とサクッとできたのですが、ルールセットも複数あるので、それらを検証したのちにコード分析の内容を深掘りしたいと思います。