👌

Roslyn Analyzerを使ってみよう

に公開

登壇してお話しました

.NETラボ 勉強会 2026年03月でお話してきました.
アーカイブもあります.

資料はこちら.
https://speakerdeck.com/htkym/roslynanalyzerwotukatutemiyou

内容

AI(Coding Agent)がコードを書く時代において,コード品質を担保する「ガードレール」としてRoslyn Analyzerをどう活用するかについてお話しました.

1. Roslyn(.NET Compiler Platform)とは

Roslynは,C#およびVBのコンパイラのオープンソース実装です.従来のコンパイラはコードを解析してバイナリを出力するまでの過程が「ブラックボックス」でしたが,Roslynではコンパイラの内部状態がAPIとして公開されています.構文ツリーや型の解決結果に自由にアクセスでき,IDEとコンパイラがメモリを共有することでリアルタイム解析が実現されています.

2. Roslyn AnalyzerとCode Fix

IDE上でリアルタイムにコードを検査し,波線でフィードバックを返すのがAnalyzer,電球マークから1クリックでコードを自動修正するのがCode Fixです.

Analyzerには以下の分類があります.

  • IDE系(コードスタイル): .editorconfigで制御する不要なキャストの削除などのルール
  • CA系(コード品質): .NET SDKに標準同梱.パフォーマンスやセキュリティの問題を検出
  • サードパーティ製: NuGetパッケージで導入
  • カスタム: チーム独自のルールを自作

3. Analyzerが動く仕組み

ソースコードが書かれると,以下の順序で解析が進みます.

  1. 構文解析(Syntax Tree) — ソースコードの「形」をツリー化.SyntaxNode(構造),SyntaxToken(キーワード等),SyntaxTrivia(空白・コメント等)から成り,スペースやコメントも含めて完全再現できる不変(Immutable)のツリー
  2. 意味解析(Semantic Model) — 識別子がどの型か,どのオーバーロードかなどを特定
  3. Analyzerによる検証 — 構文ツリーやセマンティックモデルを元に追加ルール検査
  4. .editorconfigによる表示制御 — 診断IDの表示レベル(error, warning, suggestion, silent, none)を制御

4. BannedApiAnalyzersでAPI制限

C#のコードを1行も書かずに,テキストファイル1つで特定のAPIを禁止できる仕組みです.

NuGetからMicrosoft.CodeAnalysis.BannedApiAnalyzersを追加し,BannedSymbols.txtを配置します.対象のプロパティ(P:),メソッド(M:),型(T:)をフルネームで記述し,セミコロンに続けてエラーメッセージを書きます.

例えばDateTime.Nowを禁止して「代わりにTimeProviderを使ってください」と警告を出したり,Thread.Sleepの使用を禁止したりできます.

5. カスタムAnalyzerとCode Fixの自作

より細かいルールを強制したい場合はAnalyzerを自作します(netstandard2.0ターゲット).

Analyzerの実装:
DiagnosticAnalyzerを継承し,Initializeメソッド内で解析タイミングを登録します.

  • RegisterSyntaxNodeAction: if文など構文の「形」を見たい場合
  • RegisterSymbolAction: メソッドのシグネチャ(async voidか?)やフィールド(publicか?)などシンボルの宣言を見たい場合
  • RegisterOperationAction: メソッド呼び出しなどを見たい場合

Code Fixの実装:
CodeFixProviderを継承します.構文ツリーは不変なので直接書き換えることはできません.SyntaxFactoryで新しいノードを生成し,ReplaceNodeで丸ごと置き換えて新しいツリーを作ります.元のTrivia(空白・改行)を保持しないとレイアウトが崩れるため注意が必要です.

6. Coding Agent時代のガードレールとしての活用

GitHub CopilotなどのAIは「チーム独自のルール」を知らないため,規約違反のコードを生成してしまうことがあります.人間が毎回レビューで指摘して直させるのは非効率ですが,Roslyn Analyzerを導入しておけばAIが書いたコードに対してもIDEが即座にエラーや警告を出してくれます.

「警告やエラーがなくなるまで修正して」とAIに指示するだけで,AIが自らIDEのエラーを読み取り自動修正してくれるようになります.

理想のワークフロー:

  1. Agent がコードの骨格を高速に生成
  2. Analyzer がチームの規約違反を即座に検出(ガードレール)
  3. Agent がAnalyzerの警告を読んで自らコードを修正
  4. 開発者 はビジネスロジックや意図の差分レビューに集中
  5. CI/CD が最終的な品質ゲートとして機能

結論

Roslyn AnalyzerはAIコーディングの生産性を損なうことなく,品質を一定水準に保つための強力な仕組みです.BannedApiAnalyzersのようにテキストファイル1つで始められるものから,カスタムAnalyzerの自作まで,チームの成熟度に合わせて段階的に導入できます.レガシーシステムのリファクタリングにおいても非常に効果的なアプローチとなります.

Discussion