Understand Anything

LLM + 静的解析でコードベースをインタラクティブなナレッジグラフに変換する Claude Code プラグイン

1 — 概要

Understand Anything は、Claude(Sonnet / Opus)と web-tree-sitter による静的解析を組み合わせ、任意のコードベースをインタラクティブなナレッジグラフに変換する Claude Code プラグイン。200,000 行規模のリポジトリでも「どこから読めばいいか」を即座に可視化し、ファイル・関数・クラス・依存関係をグラフのノードとして描画、自然言語の説明を付与する。

分析結果は .understand-anything/knowledge-graph.json に保存され、React Flow 製ダッシュボードで閲覧できる。Git 差分ベースのインクリメンタル更新にも対応。Claude Code 以外に Cursor / Codex / OpenCode も利用可能。

6+コマンド
18エッジ型
5アーキレイヤー
3ペルソナ

対象ユーザー

Junior
新規参加の開発者向け。ガイドツアーでコードベースの全体像を素早く把握できる。
PM / Designer
コードを読まない職種向け。アーキテクチャレイヤーを視覚的に確認できる。
PowerUser
AI 開発者向け。自然言語クエリ・差分分析・影響範囲の即時確認。
2 — アーキテクチャ
Plugin Core
understand-anything-plugin/
エージェント定義(.md)・スキル定義・TypeScript ソース(コンテキスト構築・差分分析)
Shared Engine
packages/core/
型定義・Zod スキーマ・Fuse.js 検索・セマンティック検索・静的解析・Gitスタールネス管理
Dashboard UI
packages/dashboard/
React 18 + Vite + TailwindCSS v4。React Flow でグラフ描画。Zustand で状態管理。
Static Analysis
web-tree-sitter (WASM)
darwin/arm64 + Node.js 24 でネイティブ tree-sitter が動かないため WASM ビルドを採用。
モジュール役割
types.tsコアデータ型 — KnowledgeGraph, GraphNode, GraphEdge など
schema.tsZod スキーマ + validateGraph() バリデーション
search.tsFuse.js によるファジー検索エンジン
embedding-search.tsコサイン類似度によるセマンティック検索
staleness.tsGit コミット差分によるグラフ鮮度チェック + 差分マージ
analyzer/graph-builder.tsノード・エッジの組み立てエンジン
analyzer/llm-analyzer.tsLLM へのプロンプト構築 & レスポンスパース
analyzer/layer-detector.tsアーキレイヤー検出(API / Service / Data / UI / Utility)
analyzer/tour-generator.ts依存順序のガイドツアー生成
plugins/tree-sitter-plugin.tstree-sitter(WASM版)を使った静的構文解析
3 — 解析フロー
flowchart TD A["/understand コマンド実行"] --> B B["project-scanner\n(Claude Sonnet)\nファイル探索・言語検出"] --> C C["file-analyzer × 最大3並列\n(Claude Opus)\ntree-sitter で静的抽出\n→ LLM でサマリー生成\n→ 中間ファイル書き出し"] --> D D["architecture-analyzer\n(Claude Opus)\nAPI / Service / Data / UI / Utility\nレイヤー分類"] --> E E["tour-builder\n(Claude Opus)\n依存順ガイドツアー生成"] --> F F["graph-reviewer\n(Claude Sonnet)\n完全性・参照整合性を検証"] --> G G["knowledge-graph.json 保存\n中間ファイルをクリーンアップ"] --> H H["/understand-dashboard\nReact ダッシュボード自動起動"] style A fill:#0891b2,color:#fff,stroke:none style H fill:#0891b2,color:#fff,stroke:none style G fill:#0369a1,color:#fff,stroke:none
インクリメンタル更新: git diff <last-commit>..HEAD で変更ファイルを検出 → 該当ノード・エッジのみ削除・再解析 → mergeGraphUpdate() でグラフをマージ。大規模リポジトリでも全量再解析を避けられる。
4 — コマンド一覧
コマンド機能モデル
/understand コードベース全体を解析してナレッジグラフを生成 Sonnet + Opus
/understand-dashboard ブラウザで React Flow ダッシュボードを起動
/understand-chat <質問> コードベースへの自然言語質問(グラフコンテキスト付き) Sonnet
/understand-diff 現在の変更影響範囲をグラフ上で分析 Sonnet
/understand-explain <パス> 特定ファイル・関数の詳細解説を生成 Opus
/understand-onboard 新メンバー向けオンボーディングガイドを生成 Opus
5 — コアデータ型
interface KnowledgeGraph {
  version: string;
  project: ProjectMeta;
  nodes:   GraphNode[];   // file / function / class / module / concept
  edges:   GraphEdge[];   // 18 種類のエッジ型
  layers:  Layer[];       // アーキレイヤー (API/Service/Data/UI/Utility)
  tour:    TourStep[];    // ガイドツアーステップ
}
カテゴリエッジ型
構造imports exports contains inherits implements
制御フローcalls subscribes publishes middleware
データreads_from writes_to transforms validates
メタdepends_on tested_by configures
意味的related similar_to

プラグインの understand-anything-plugin/src/index.ts からエクスポートされるコンテキスト構築関数:

関数用途
buildChatContext()/understand-chat 用 — グラフを自然言語QA向けに要約
buildDiffContext()/understand-diff 用 — 変更差分の影響ノードを列挙
buildExplainContext()/understand-explain 用 — 対象の周辺グラフを抽出
buildOnboardingGuide()/understand-onboard 用 — ツアーステップをガイド形式に整形
6 — セットアップ
/plugin marketplace add Lum1104/Understand-Anything
/plugin install understand-anything
/understand   # 解析開始

Cursor は .cursor-plugin/plugin.json を自動検出する仕組みを使う。スキル・エージェント定義が相対パスで書かれているため、Understand-Anything リポジトリ自体を Cursor のワークスペースに含める必要がある。

手順

  1. 任意の場所にリポジトリをクローンする(例: ~/tools/ 以下など、プロジェクトとは別でOK)
  2. Cursor で解析したいプロジェクトを開く
  3. メニュー File › Add Folder to Workspace… で、クローンした Understand-Anything/ フォルダを追加する
  4. Cursor が .cursor-plugin/plugin.json を検出し、コマンドが使えるようになる
  5. /understand を実行して解析開始
# 1. クローン(場所はどこでも可)
git clone https://github.com/Lum1104/Understand-Anything ~/tools/understand-anything

# 2. Cursor でワークスペースに追加後、解析を実行
/understand
なぜワークスペースに追加するの? plugin.json 内のスキル・エージェント定義が ./understand-anything-plugin/skills/ という相対パスで書かれているため、Cursor がそのパスを解決できる場所にリポジトリが必要。プロジェクトのコードを汚染しないよう、別フォルダにクローンして追加するのがおすすめ。

前提: Node.js ≥ 22、pnpm ≥ 10

# 依存インストール
pnpm install

# core パッケージをビルド(ダッシュボードが依存)
pnpm --filter @understand-anything/core build

# ダッシュボード開発サーバー
pnpm dev:dashboard

# テスト
pnpm --filter @understand-anything/core test

# Lint
pnpm lint
tree-sitter に注意: darwin/arm64 + Node.js 24 ではネイティブビルドが失敗するため、web-tree-sitter(WASM版)を採用。ネイティブ tree-sitter へ置き換えた場合は動作しない。