project-understanding について
コードベースを調査・変更する開発者向けの分析スキルです。Tree-sitter でインデックスを作成し、構造、シンボル、依存関係、変更の影響を専用コマンドで調べられます。
主な機能
- 01Tree-sitter によるリポジトリのインデックス作成
- 02トークン上限付きリポジトリマップ
- 03シンボルの検索と詳細表示
- 04呼び出し・依存関係グラフ
- 05変更影響の分析
活用シーン
- 01不慣れなコードベースの構造把握
- 02リファクタリングやホットフィックスの影響評価
- 03トークン予算内でのリポジトリ要約
- 04変更がアーキテクチャ境界に反しないかの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ evil-skills/ project-understanding --skill project-understandingインストール後、Claude Code で/project-understandingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
requirements.lockrequirements.txtassets/.gitkeepdefault-ignore.txtreferences/.gitkeepDB_SCHEMA.mdLANG_SUPPORT.mdPACK_FORMAT.mdREFERENCE.mdSECURITY.mdTROUBLESHOOTING.mdscripts/__init__.py.gitkeepbootstrap.pyscripts/lib/__init__.pyarchitecture.pybenchmark.pybudget.pyconfig.pydataflow.pydb.pygraph_export.pygraph.pyignore.pyimpact.pyindexer.pymodules.pypacks.pyparallel.pyparser.py詳細
プロジェクトの理解
概要
Tree-sitter によるインデックス作成と PUI コマンドを通じて、リポジトリの情報を自動的に把握します。基本原則は、一度インデックスを作成したら、手作業で grep する代わりに、目的を絞ったパック(repomap/find/zoom/impact)を使うことです。
使用する場面
- 新しいコードベースに取り組むとき: 構造とエントリーポイントを素早く把握する
- リファクタリングやホットフィックスを計画するとき: 呼び出し元を見つけ、影響範囲を評価する
- コンテキストの予算を調整するとき: リポジトリの要約を LLM のトークン上限内に収める
- 時間に追われているとき: 間接的な依存関係の見落としを減らす
- 検証するとき: 変更がアーキテクチャ上の境界に違反していないことを確認する
使用しない場面
- 小規模なリポジトリ: インデックスを作成するより、手作業で読むほうが速い場合
- サポート対象外の言語: シンボルグラフに依存しないでください(
skills/project-understanding/references/LANG_SUPPORT.mdを参照)
言語サポート(最初にお読みください)
- シンボル/呼び出しグラフの完全なサポート: Python、JavaScript、TypeScript、Go、Rust
- C/C++: 主にファイル単位の結果が表示されます。
zoom/graphでは「Symbol not found」と表示される場合があります - 参照先:
skills/project-understanding/references/LANG_SUPPORT.md
コマンドのガードレール(例外なし)
- リポジトリは作業ディレクトリで選択します。
--repoフラグはありません。 - 対象リポジトリから必ず
"$PUI"を呼び出してください。 対象リポジトリ内で./scripts/pui.shを実行しないでください。 zoomの対象は位置引数です。--targetフラグや--fileフラグはありません。zoomはファイルパスを受け付けません。 シンボル ID/名前、またはfile:lineを使用してください。
基本的なワークフロー
- ツールのパスを一度だけ設定します:
PUI="/path/to/skills/project-understanding/scripts/pui.sh"(Windows ではpui.ps1を使用)。対象リポジトリから./scripts/pui.shを実行しないでください。 - リポジトリのルートから実行します(
--repoフラグなし):"$PUI" index(または、大きな変更の後は"$PUI" index build)"$PUI" repomap --depth 2 --max-tokens auto
- シンボルを見つけます:
"$PUI" find "SymbolName"でシンボル ID を取得します(一般的な名前を推測して指定しないでください)"$PUI" zoom <symbol-id|name|file:line>(ファイルパスだけを指定すると失敗します)"$PUI" graph --symbol <symbol-id|name> --depth 2
- 影響を評価します:
"$PUI" impact --files path/to/file --include-tests"$PUI" impact --git-diff HEAD~1..HEAD
例(Lean Boost)
project-understanding-skill リポジトリのルートから実行します:
PUI="$(pwd)/skills/project-understanding/scripts/pui.sh"
cd ./codebases/lean-boost
"$PUI" index
"$PUI" repomap --depth 3 --max-tokens 1200
"$PUI" find "services_manager"
"$PUI" graph --symbol 70 --depth 1 --format mermaid
"$PUI" impact --files src/uninstall/leftovers_scanner.cpp --max-tokens 800
インストール
このスキルはすぐに使用できます。初回実行時に、共有仮想環境が ~/.local/share/pui/venv(またはローカルのフォールバック先)に自動で構築されます。リポジトリのインデックスは、プロジェクトのルートにある .pui/ に保存されます。
クイックリファレンス
| コマンド | 用途 | 主なフラグ |
|---|---|---|
index | インデックスの作成/更新 | build、--force |
repomap | ディレクトリと主要ファイル | --depth、--max-tokens |
find | シンボル検索 | --limit、--format |
zoom | シンボルの詳細 | --max-tokens |
graph | 呼び出し/依存関係グラフ | --symbol、--depth |
impact | 影響範囲の分析 | --files、--git-diff、--include-tests |
architecture | アーキテクチャの概要 | --format |
depgraph | モジュール依存関係グラフ | --scope、--format |
使用上の注意:
zoomの対象は位置引数です。--targetフラグはありません。zoomはファイルパスを受け付けません。シンボル ID/名前、またはfile:lineを使用してください。- シンボル ID がわからない場合は、最初に
findを使用してください。
影響分析の信頼度
| スコア | 意味 | 対応 |
|---|---|---|
| 0.9+ | 確実に一致 | 信頼して進める |
| 0.7-0.9 | 一致の可能性が高い(インポート) | 手動で確認する |
| <0.7 | ヒューリスティック/動的 | 手がかりとして扱う |
信頼度の指標が有効なのは、シンボル抽出に対応している言語に限られます。
よくある間違い
- スクリプトのパスが間違っている: リポジトリのルートから
./scripts/pui.shを実行しても失敗します。絶対パスを使うか、PUI=...を指定してください。 - インデックス作成を省略する: コマンドが失敗したり、古いデータが表示されたりします。定期的に
indexを使い、完全に再構築する場合はindex buildを使ってください。 - ズーム対象が間違っている:
zoomにはシンボル ID/名前、またはfile:lineが必要です。--targetフラグはありません。 - シンボルを推測する: 特に大規模なリポジトリでは、
zoom/graphの前にfindを実行してください。 - フラグを勝手に作る:
--repoフラグはありません。対象のリポジトリにcdして設定してください。 - C/C++ のシンボルグラフがあると思い込む: まず
skills/project-understanding/references/LANG_SUPPORT.mdを確認してください。 - 予算を考慮しない: 大規模なリポマップでは 20k 以上のトークンを消費することがあります。
--depthまたは--max-tokensを使ってください。
よくある正当化と実情
| 言い訳 | 実情 |
|---|---|
| 「インポートを grep すればいい」 | grep では間接的な依存関係を見落とします。インデックス作成後は impact のほうが正確です。 |
| 「フォルダー名を見れば構造は明らかだ」 | フォルダー名は依存関係グラフではありません。repomap と graph を使ってください。 |
| 「インデックス作成に時間がかかりすぎる」 | インデックスは差分更新されます。手作業で追跡するほうが遅く、リスクも高くなります。 |
| 「このツールを使ったことがないから、使わずに済ませよう」 | 初回の実行コストは一度きりです。その後は find と impact で時間を節約できます。 |
| 「大きなファイルをそのまま読めばいい」 | 600 行を超えるファイルを読むと、トークンと集中力を消費します。zoom を使えば重要なロジックだけを確認できます。 |
| 「ツールはここの ./scripts にあるはずだ」 | スクリプトはスキルディレクトリにあります。まず PUI を設定してください。 |
| 「ファイルパスを指定して zoom できる」 | zoom にはシンボル ID/名前、または file:line が必要です。ファイルパスだけでは失敗します。 |
警告サイン — 停止してインデックスを作成
- 手作業での grep だけを根拠に、影響の概要を公開しようとしている。
- フォルダー名からアーキテクチャを推測している。
- 「Symbol not found」と表示されたのに、言語サポートや
findを確認せずに作業を続けている。 - 対象のリポジトリ内で
./scripts/pui.shを実行しようとしている。 zoomにファイルパスを渡そうとしている。- 2 ファイルを超えてインポートを手作業で追跡している。
- 大きなコードブロックでコンテキストウィンドウの上限に達している。
これらはいずれも、まず index を実行し、repomap/find/impact を使うか、言語サポートを確認する必要があることを示しています。
コメント
Markdown 対応