前の記事でナレッジグラフの概念を整理しました。今回はその考え方を実装した graphify というツールの仕組みを見ていきます。
graphify とは
graphify は、プロジェクト全体をナレッジグラフとして自動生成する AI コーディングアシスタント向けのスキルツールです。Claude Code・Cursor・Gemini CLI など 20 以上のプラットフォームに対応しており、/graphify . と打つだけでプロジェクト全体がグラフ化されます。YC S26 採択、スター数 59,600 超の OSS です。
スキルとして動くため、追加の API キーは不要です。IDE セッションで使っているモデルをそのまま利用します。
2段階の抽出パイプライン
graphify がコードベースを解析するとき、ソースの種類によって処理経路を分けています。この設計がツールの核心です。
コード (.py / .ts / .rs / .go など)
→ tree-sitter でローカル AST 解析
→ API コストゼロ、外部送信なし
ドキュメント / PDF / 画像 / 動画
→ LLM 経由で意味抽出
→ IDE セッションのモデルを使用
tree-sitter は多くの言語に対応した高速なパーサーです(Python・TypeScript・Rust・Go・Java など 28 言語)。ソースコードを抽象構文木(AST)に変換し、関数・クラス・モジュール・import といった構造を機械的に取り出せます。
コードをローカルで処理する理由は2つあります。
- コスト — コードは量が多く、すべてを LLM に送ると費用が嵩みます。AST 解析は無料で動き、速度も速い。
- プライバシー — ソースコードは最も機密性が高いアセットです。外部 API に送らずに済むのは企業導入の大きな障壁を下げます。
ドキュメントや PDF・画像・動画は、コードと違って構造が一定ではありません。「このドキュメントは何を説明しているか」「図の意味は何か」を取り出すには、文脈を読む能力が必要です。ここに LLM を使います。動画・音声は faster-whisper でローカル転写してから LLM に渡すため、音声データそのものも外部送信しません。
出力されるファイル
/graphify . を実行すると graphify-out/ ディレクトリに3つのファイルが生成されます。
| ファイル | 内容 |
|---|---|
graph.html |
ブラウザで操作できるインタラクティブなグラフ図 |
GRAPH_REPORT.md |
主要概念・意外な接続・推奨クエリ一覧 |
graph.json |
全データ(クエリや MCP サーバー化に使う生データ) |
graph.html は視覚的な全体像の把握に、GRAPH_REPORT.md は重要なポイントを素早く読むのに使います。graph.json は後述のクエリコマンドのデータソースになります。
GRAPH_REPORT の読み方
GRAPH_REPORT.md には、単なるグラフの一覧ではなく、プロジェクトの構造的な示唆がまとめられています。いくつか重要な概念を紹介します。
God nodes は、接続数が最も多いノードです。多くのモジュールから参照される関数やクラスが該当し、「ここを変えると広範に影響する」急所がわかります。God nodes については次の記事で詳しく取り上げます。
Surprising connections は、直接的な依存関係がないにもかかわらず、グラフ上でつながっていることが判明したノードの組み合わせです。「認証モジュールがなぜかメール送信サービスと 3 ホップでつながっている」といった発見は、コードを読むだけでは気づきにくい設計上の問題を示していることがあります。
Confidence tags は、各エッジの確信度を3段階で示します。
EXTRACTED— ソースから直接取り出した事実(importなど)INFERRED— 文脈から推論した関係AMBIGUOUS— 判断が難しく複数の解釈が可能
グラフを見るとき、INFERRED や AMBIGUOUS のエッジは鵜呑みにせず、起点として使う姿勢が適切です。
コメント(# NOTE: # WHY: # HACK:)やドキュメントに書かれた設計意図も別ノードとして抽出されます。「なぜこの実装にしたか」という the "why" がグラフに組み込まれるのは、コードの構造だけを解析するツールとの大きな違いです。
クエリの使い方
グラフが生成されたあとは、クエリコマンドで情報を引き出せます。
/graphify query "what connects auth to the database?"
/graphify path "UserService" "DatabasePool"
/graphify explain "RateLimiter"
query は自然言語で問いかける汎用コマンドです。path は2つのノード間の経路を求めます。explain は特定ノードの役割・接続・設計意図をまとめて表示します。
コードベースの規模が大きくなると「この関数はなぜここにあるのか」「この変更の影響範囲は」といった問いに答えるのが難しくなります。グラフへのクエリは、その問いを構造化された形で処理できます。
まとめ
- graphify は
/graphify .でプロジェクトをナレッジグラフ化する AI コーディングアシスタント向けスキルツール - コードは tree-sitter でローカル AST 解析し、API コスト・プライバシーリスクをゼロに
- ドキュメント・PDF・画像は LLM 経由で意味を抽出——種類によって処理経路を分けるのが設計の要
- 出力は
graph.html(視覚)・GRAPH_REPORT.md(示唆)・graph.json(データ)の3点セット GRAPH_REPORTの God nodes・Surprising connections・Confidence tags でグラフの読みどころが整理されるquery/path/explainコマンドで構造化されたクエリが可能
次の記事では、God nodes の概念を軸に「Claude Code のコンテキスト問題をグラフがどう解決するか」を見ていきます。