知識マップ: Roslynとは何か ── C#コードをコンパイラの視点で読む・直す・生成する
記事「Roslynとは何か ── C#コードをコンパイラの視点で読む・直す・生成する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、C#/VBのコンパイラ基盤であるRoslynを、構文を表すSyntax Treeと意味を表すSemanticModelという2つのAPIを軸に整理した入門記事です。Compilationは複数のSyntax Treeと参照アセンブリからSemanticModelを解決するための材料をまとめ、Workspaceはソリューション・プロジェクト単位の操作をMSBuildWorkspaceなどの実装で提供します。この土台の上に、警告を出すAnalyzer、修正案を提示するCode Fix、コンパイル時にコードを追加するSource Generatorという3つの使い方が乗り、Analyzerの重大度は.editorconfigで構成でき、.NET 5以降で既定有効になる.NET SDK同梱Analyzerも同じ仕組みの上に成り立ちます。Source Generatorは複雑さゆえに、.NET Frameworkの既存資産への最初の導入手段としては推奨されません。
flowchart LR
accTitle: Roslyn(.NET Compiler Platform)の知識マップ
accDescr: RoslynがSyntax Tree・SemanticModel・Workspaceという3つのAPIの上に成り立ち、そこからAnalyzer・Code Fix・Source Generatorという3つの使い方が枝分かれし、.editorconfigやMSBuildWorkspace、.NET SDK同梱Analyzerとどう関係するかを示す図です。
roslyn["Roslyn(.NET Compiler Platform)"]
syntax_tree["Syntax Tree"]
semantic_model["SemanticModel"]
roslyn_workspace["Workspace(Roslyn)"]
roslyn_compilation["Compilation(Roslyn)"]
roslyn_symbol["Symbol(Roslyn)"]
msbuild_workspace["MSBuildWorkspace"]
roslyn_analyzer["Analyzer(Roslyn)"]
editorconfig[".editorconfig"]
roslyn_code_fix["Code Fix(Roslyn)"]
roslyn_source_generator["Source Generator(Roslyn)"]
incremental_generator["IIncrementalGenerator"]
net_sdk_analyzer[".NET SDK同梱Analyzer"]
dotnet_framework[".NET Framework"]
dotnet[".NET(Core以降)"]
roslyn -->|"利用する"| syntax_tree
roslyn -->|"利用する"| semantic_model
roslyn -->|"利用する"| roslyn_workspace
semantic_model -->|"前提とする"| roslyn_compilation
semantic_model -->|"前提とする"| syntax_tree
semantic_model -->|"利用する"| roslyn_symbol
msbuild_workspace -->|"実装を担う"| roslyn_workspace
roslyn_analyzer -->|"利用する"| syntax_tree
roslyn_analyzer -->|"利用する"| semantic_model
roslyn_analyzer -->|"で構成できる"| editorconfig
roslyn_code_fix -.->|"前提とする"| roslyn_analyzer
roslyn_source_generator -->|"利用する"| roslyn_compilation
incremental_generator -->|"実装を担う"| roslyn_source_generator
net_sdk_analyzer -->|"利用する"| roslyn_analyzer
net_sdk_analyzer -->|"で構成できる"| editorconfig
roslyn_workspace -->|"利用する"| roslyn_compilation
roslyn_source_generator -.->|"用いるのは非推奨"| dotnet_framework
roslyn_code_fix -->|"利用する"| syntax_tree
net_sdk_analyzer -.->|"前提とする"| dotnet
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Roslyn(.NET Compiler Platform)はSyntax Treeを利用します。
- Roslyn(.NET Compiler Platform)はSemanticModelを利用します。
- Roslyn(.NET Compiler Platform)はWorkspace(Roslyn)を利用します。
- SemanticModelはCompilation(Roslyn)を前提とします。
- SemanticModelはSyntax Treeを前提とします。
- SemanticModelはSymbol(Roslyn)を利用します。
- MSBuildWorkspaceはWorkspace(Roslyn)の実装を担います。
- Analyzer(Roslyn)はSyntax Treeを利用します。
- Analyzer(Roslyn)はSemanticModelを利用します。
- Analyzer(Roslyn)は.editorconfigで構成できます。
- Code Fix(Roslyn)はAnalyzer(Roslyn)を前提とします。
- Source Generator(Roslyn)はCompilation(Roslyn)を利用します。
- IIncrementalGeneratorはSource Generator(Roslyn)の実装を担います。
- .NET SDK同梱AnalyzerはAnalyzer(Roslyn)を利用します。
- .NET SDK同梱Analyzerは.editorconfigで構成できます。
- Workspace(Roslyn)はCompilation(Roslyn)を利用します。
- Source Generator(Roslyn)を.NET Frameworkに用いることは推奨されません。
- Code Fix(Roslyn)はSyntax Treeを利用します。
- .NET SDK同梱Analyzerは.NET(Core以降)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。