Graphify C# 0.1リリース – C#コーディングエージェント向けコンパイラ正確な「使用場所の検索」機能
TL;DR – Graphify C#の機能とその重要性
Graphify C#は、無料でヘッドレスなRoslyn/MSBuildインデクサであり、任意のC#ソリューションに対して、コンパイラによって解決されたシンボル、呼び出し、参照、継承、オーバーライドの決定論的JSONグラフを出力します。この意味的証拠を提供することで、コーディングエージェント(例:Claude Code、Codex、またはカスタムLLMボット)は、信頼性の低いテキスト検索ヒューリスティクスではなく、コンパイラ正確な「使用場所の検索」スタイルの質問に答えることができます。
コーディングエージェントへの即時価値
- 正確なオーバーロード解決 – グラフはバインドされたシグネチャを保持しているため、エージェントは
Foo(int)とFoo(string)を区別できます。 - プロジェクト認識型の関係 – 各エッジは元となるプロジェクトとターゲットフレームワークを記録しており、たとえば「テストプロジェクトでのみ使用されるメソッド」など、クエリが可能になります。
- 完全な言語カバレッジ – C# 14(Roslyn 5.9)およびC# 15プレビュー(.NET 11 SDK経由)をサポートし、ジェネリクス、パターンマッチング、async、コレクション式を含みます。
- ランタイム依存なし – IDEも、コンパイル済みDLLも、外部データベースも不要。出力は1つのJSONファイルであり、任意のコンシューマーが読み取ることができます。
ツールの動作方法
- インストール – .NETグローバルツールをインストールします:
dotnet tool install --global Graphify.CSharp --framework net10.0 - インデキシング – CLIをソリューション、プロジェクト、またはSDKスタイルのソースフォルダに対して実行します:
このコマンドは、graphify-csharp \ --input ./src/MyProduct.sln \ --root . \ --configuration Release \ --output ./graphify-out/csharp.jsonnodes、edges、hyperedgesの3つのトップレベル配列を持つJSONドキュメントを生成します。 - 消費 – エージェントはJSONを直接読み取ったり、
jqでクエリしたり、より広範なGraphifyワークフローに投入してパス検出、クラスタリング、説明を実行できます。 - インクリメンタル更新 –
--watchを追加するとRoslynワークスペースを常時保持し、ファイル変更時にJSONを更新します。--rebuildは完全な再構築を強制します。
意味的証拠 vs. テキスト検索
| Graphifyなし | Graphify C#あり |
|---|---|
| テキストマッチは名前文字列のみを検出します。 | Roslynが各使用箇所の正確な宣言を解決します。 |
| オーバーロードやジェネリクスは曖昧です。 | バインドされたシグネチャとプロジェクト/TFMの識別子が保持されます。 |
| テスト専用の使用は手動での確認が必要です。 | すべての呼び出し元にはプロジェクト、名前空間、ソース位置が付随します。 |
| 型の関係はテキストから推論しなければなりません。 | inherits、implements、overridesは明示的なエッジとして表示されます。 |
例:メソッド DeclarationCatalogBuilder.ForTesting は、テストプロジェクトからの単一の呼び出しエッジを持つ形でグラフに表示され、エージェントに信頼できる「テスト専用」のシグナルを提供します。
LLMエージェントへの素早い統合
リポジトリには、Codex互換エージェントおよびClaude Code用の準備済みスキルが同梱されています。スキルのインストールは1行で完了します:
mkdir -p .agents/skills/graphify-csharp
curl -fsSL https://raw.githubusercontent.com/zachsaw/graphify-csharp/main/.agents/skills/graphify-csharp/SKILL.md \
-o .agents/skills/graphify-csharp/SKILL.md
このスキルは、C#関連の質問に答える前にJSONを更新するようエージェントに指示し、callsおよびreferencesエッジをたどる際にはsymbol_key識別子を使用するように指示します。
スキルを使用したくない場合、プロンプトテンプレートに以下の指示を追加するだけでOKです:
C#の構造や使用に関する質問に対しては、回答前に
graphify-out/csharp.jsonをgraphify-csharpで更新してください。宣言はsymbol_keyで識別し、callsおよびreferencesエッジのインバウンドを確認してください。インバウンドエッジがゼロの場合は、実行時到達不能の証明ではなく、観測された静的証拠とみなしてください。
この文脈があれば、エージェントは以下の質問に答えることができます:
- コンストラクタのどのオーバーロードが呼び出されているか?
- どのクラスが指定されたインターフェースを実装しているか?
- どのメンバーが仮想メソッドをオーバーライドしているか?
- インバウンド参照がゼロの宣言はどれか?
Graphify C#のエコシステムにおける位置づけ
| ツール | 主な目的 | Graphify C#との重複 |
|---|---|---|
| Rider / ReSharper | インタラクティブなIDEナビゲーション、リファクタリング、インスペクション。 | 同じ意味的エッジを提供しますが、IDE UI内でのみ。 |
| NDepend | アーキテクチャ分析、メトリクス、ベースライン、可視化。 | 同様の呼び出し/依存関係データを提供しますが、商用で重量級なツールセットです。 |
| Graphify C# | エージェント向けのヘッドレス、言語レベルの意味的インデックス。 | 開放的なJSON形式でコンパイラ正確なエッジを提供。UIもライセンス制約もなし。 |
Graphify C#は意図的に限定的です:NDependのレポートやRiderのUIを代替しようとはしていませんが、信頼できる静的証拠が必要な自動化エージェントにとって欠けていたギャップを埋めています。
パフォーマンスとスケーラビリティに関する考慮事項
- JSONサイズ – 多百万行のソリューションでは出力が大きくなる可能性があります。SQLiteストアの方がスケーラブルかどうかの質問が寄せられています。現時点ではツールはJSONを出力していますが、必要に応じて下流のコンシューマーがデータベースにインポートできます。
- ランタイムオーバーヘッド – Roslynはインデキシング時のみロードされます。
--watchモードではワークスペースを常時保持しますが、インデキシングはオンデマンド操作であり、継続的なバックグラウンドサービスではありません。 - 静的解析の限界 – グラフはRoslynが静的に見ることができる内容のみを反映しています。リフレクション、DIコンテナ、ネイティブ相互運用、動的呼び出しはエッジとして表現されません。したがって、インバウンドエッジがゼロのノードは「静的参照がゼロ」という意味であり、実行時到達不能である保証ではありません。
Hacker Newsからのコミュニティフィードバック
bob1029: "私のVS Copilotはすでに一時的なRoslynスクリプトを書いているが、Graphify C#は、コミュニティがLLMエージェントにRoslynを十分に活用していないことを示している。"
spicyusername: "近い将来のC# 15のユニオンにワクワクしている。Graphify C#はすでにプレビューコンパイラをサポートしている。"
JFuzz: "Unityパッケージ開発用にスキルをカスタマイズした。CLI + JSONワークフローのおかげで、IDE外でも意味的データにアクセスできる。"
Merad: "数百万行のLOCでのJSONのスケーラビリティに懸念がある。SQLiteバックエンドを推奨する。" coverband: "出力形式が、より広範なGraphify‑Labsエコシステムと整合しているか尋ねた。"
quietraster: "インデキシングが保存時に実行されるのか、オンデマンドなのか知りたかった。このツールはオンデマンド(または
--watch経由)でインデキシングを行う。"
これらのコメントは、アプローチへの熱意と、スケーラビリティおよび統合に関する実用的な質問を浮き彫りにしています。
すぐに始めるためのチェックリスト
- 適切なランタイムをインストール – Roslyn 5.9(C# 14)には
net10.0、.NET 11 SDK(C# 15プレビュー)にはnet11.0を選択してください。 - インデクサを実行 –
graphify-csharpをソリューションに向け、生成されたcsharp.jsonにnodesとedgesが含まれていることを確認してください。 - エージェントに統合 – 提供されたスキルを追加するか、プロンプトに更新とクエリの手順を埋め込みます。
- 反復 – 開発中は
--watchを使用するか、CIパイプラインで定期的な更新をスケジュールします。
ライセンスと貢献
Graphify C#はMITライセンスでリリースされています。リポジトリにはビルドスクリプト(dotnet restore、dotnet build、dotnet test、dotnet pack)と、使用法、互換性、インクリメンタルインデキシング、リリース手順に関する豊富なドキュメントが docs/ フォルダ内に含まれています。
Sources
関連
- プロジェクト