C#リポジトリのセマンティックマップ
あるオープンソース開発者が、コーディングエージェントにC#プログラムについてコンパイラーが解決した情報を提供するよう設計されたヘッドレス型インデックス作成ツール、Graphify C#を公開した。このプロジェクトはMicrosoftのRoslynコンパイラープラットフォームとMSBuildを使用してソースを解析し、宣言とそれらの関係を含む決定論的なJSONグラフを出力する。
このツールは、エージェント支援プログラミングで繰り返し見られる弱点を対象としている。プレーンテキスト検索は一致する名前を見つけられるが、呼び出しがどのオーバーロードされたメソッドに解決されるか、シンボルが特定のプロジェクトに属するか、どの具象クラスがインターフェースを実装しているかを確実には判定できない。Graphify C#はRoslynにこれらの関係を解決させ、呼び出し、参照、実装、継承、オーバーライドを有向エッジとして記録する。
リポジトリによると、このインデクサーはVisual Studioソリューションファイル、C#プロジェクトファイル、SDK形式のファイルベースアプリケーションを受け付ける。関連するSDK、NuGetパッケージ、MSBuildの入力は、解析を行うマシン上で利用可能でなければならない。コンパイル済みのプロジェクトDLL、データベース、IDEは必要としない。このプロジェクトはMITライセンスで配布されている。
JSON出力と明示された制限
Graphify C#は、ノード、エッジ、ハイパーエッジを含む単一のJSON文書を生成する。開発者はその出力を直接確認したり、jqのようなコマンドラインツールで照会したり、別のプログラムから処理したり、別個のGraphifyグラフ解析アプリケーションに渡したりできる。ソース位置と来歴はグラフデータに付随したままなので、エージェントは証拠を元のコードまでたどることができる。
このプロジェクトには、対応するコーディングエージェントに、いつインデックスを更新し、セマンティックエッジをどうたどるかを説明するスキルファイルも含まれる。ウォッチャーモードはRoslynワークスペースを起動状態に保ち、変更されたプロジェクトをバックグラウンドで準備する。一方、通常の呼び出しは更新の同期点として機能し、完全なスナップショットが最新の状態になった後に終了する。再構築オプションは増分キャッシュを無効化する。
作者は、このグラフが静的なコンパイラー上の証拠を表すものであり、実行時の挙動を完全に記述するものではないと強調している。リフレクション、依存性注入、動的ディスパッチ、ネイティブコールバック、読み込まれたコンパイル単位外のコードによって、直接のエッジとして現れない関係が生じる可能性がある。そのため、流入エッジのないメソッドでも、自動的に安全に削除できるとは限らない。対応していないセマンティックパターンは、黙って省略されるのではなく診断情報として報告される。
Graphify C#が担う役割は、完全なIDEや広範な依存関係解析製品よりも限定的だ。エージェントやその他の自動化システムが利用できる形式で、セマンティックナビゲーション層をエクスポートすることに重点を置いている。その価値は、実際のリポジトリや進化するC#構文をどれほど正確に処理できるかに左右されるが、今回の公開によって開発者は、表記上の一致ではなくコンパイラー解析に基づいてエージェントの判断を裏付ける、新たなオープンソースの選択肢を得た。



