grepai-trace-callees について
grepai-trace-callees は、指定した関数が呼び出す関数やメソッドを調べる grepai のスキルです。抽出モードと複数の出力形式を使い、コードの理解や依存関係の分析に役立ちます。
主な機能
- 01関数とメソッドの直接呼び出しを検索
- 02高速または高精度の抽出モード
- 03JSON、コンパクト JSON、TOON 出力
- 04スクリプト向けの結果フィルタリング
活用シーン
- 01複雑な関数の動作を把握
- 02呼び出し関係と副作用を確認
- 03関数依存関係のドキュメントを作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ yoanbernabeu/ grepai-skills --skill grepai-trace-calleesインストール後、Claude Code で/grepai-trace-calleesを入力して読み込まれたか確認します。
詳細
GrepAI 呼び出し先のトレース
このスキルでは、grepai trace callees を使って、特定の関数が呼び出すすべての関数を見つける方法を説明します。
このスキルを使う場面
- 関数の依存関係を理解する
- 関数の動作を把握する
- 深くネストされた依存関係を見つける
- コードの理解とドキュメント作成
呼び出し先のトレースとは?
grepai trace callees は、**「この関数は何を呼び出していますか?」**に答えます。
func ProcessOrder(order) {
validateOrder(order)
calculateTotal(order)
sendConfirmation(order.email)
}
│
↓
┌───────┴───────────────────┐
│ What does ProcessOrder │
│ call? │
├───────────────────────────┤
│ • validateOrder │
│ • calculateTotal │
│ • sendConfirmation │
└───────────────────────────┘
基本的な使い方
grepai trace callees "FunctionName"
例
grepai trace callees "ProcessOrder"
出力:
🔍 Callees of "ProcessOrder"
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
JSON 出力
grepai trace callees "ProcessOrder" --json
出力:
{
"query": "ProcessOrder",
"mode": "callees",
"count": 4,
"results": [
{
"file": "services/order.go",
"line": 45,
"callee": "validateOrder",
"context": "validateOrder(order)"
},
{
"file": "services/order.go",
"line": 48,
"callee": "calculateTotal",
"context": "total := calculateTotal(order.Items)"
},
{
"file": "services/order.go",
"line": 51,
"callee": "applyDiscount",
"context": "total = applyDiscount(total, order.Coupon)"
},
{
"file": "services/order.go",
"line": 55,
"callee": "sendConfirmation",
"context": "sendConfirmation(order.Email, total)"
}
]
}
コンパクトな JSON(AI 向けに最適化)
grepai trace callees "ProcessOrder" --json --compact
出力:
{
"q": "ProcessOrder",
"m": "callees",
"c": 4,
"r": [
{"f": "services/order.go", "l": 45, "fn": "validateOrder"},
{"f": "services/order.go", "l": 48, "fn": "calculateTotal"},
{"f": "services/order.go", "l": 51, "fn": "applyDiscount"},
{"f": "services/order.go", "l": 55, "fn": "sendConfirmation"}
]
}
TOON 出力(v0.26.0+)
TOON 形式では、JSON よりトークン数を約 50% 削減できます。
grepai trace callees "ProcessOrder" --toon
注:
--jsonと--toonは同時に指定できません。
抽出モード
高速モード(デフォルト)
grepai trace callees "ProcessOrder" --mode fast
高精度モード
grepai trace callees "ProcessOrder" --mode precise
| モード | 速度 | 精度 | 依存関係 |
|---|---|---|---|
fast | ⚡⚡⚡ | 良好 | なし |
precise | ⚡⚡ | 優秀 | tree-sitter |
ユースケース
関数の動作を理解する
# What does this complex function do?
grepai trace callees "handleRequest"
# Map the data flow
grepai trace callees "processPayment"
依存関係を見つける
# What external services does this call?
grepai trace callees "syncData"
# What database operations happen?
grepai trace callees "saveUser"
コードレビュー
# What side effects does this function have?
grepai trace callees "updateProfile"
# Is this function doing too much?
grepai trace callees "doEverything" # Lots of callees = code smell
ドキュメント作成
# Generate dependency list for docs
grepai trace callees "initialize" --json | jq '.results[].callee'
呼び出し元と呼び出し先
| コマンド | 質問 | ユースケース |
|---|---|---|
trace callers | 何が自分を呼び出していますか? | 影響分析 |
trace callees | 自分は何を呼び出していますか? | 動作分析 |
# Combined analysis
grepai trace callers "processOrder" # Who uses this?
grepai trace callees "processOrder" # What does it do?
結果のフィルタリング
ファイルの種類で絞り込む
# Get callees and filter to only .go files
grepai trace callees "main" --json | jq '.results[] | select(.file | endswith(".go"))'
テスト関数を除外する
grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'
カテゴリ別に数える
# Count how many database vs. API calls
grepai trace callees "processOrder" --json | jq '.results[].callee' | grep -c "db"
呼び出し先に含まれるもの
トレースでは次のものが見つかります。
- 直接の関数呼び出し
- メソッド呼び出し
- 組み込み関数の呼び出し(モードによって異なります)
例
func ProcessOrder(order Order) error {
// Direct call
validateOrder(order)
// Method call
order.Validate()
// Package function
utils.Log("processing")
// Built-in (may or may not be captured)
fmt.Println("done")
return nil
}
見つかった呼び出し先:
validateOrderValidate(メソッド)Log(utils から)Println(モードによって異なります)
制限事項
呼び出し先のトレースで見つからない可能性があるもの
- 動的/ランタイム呼び出し
- コールバックとクロージャ
- インターフェースメソッドの呼び出し(実装ではなくインターフェースが表示される場合があります)
- リフレクションベースの呼び出し
検出されない呼び出しの例
func process(fn func()) {
fn() // Callee is unknown at static analysis time
}
トレースグラフとの組み合わせ
再帰的な依存関係を分析するには、トレースグラフを使います。
# Direct callees only
grepai trace callees "main"
# Full dependency tree (recursive)
grepai trace graph "main" --depth 3
スクリプトの例
すべての呼び出し先を一覧表示する
grepai trace callees "main" --json | jq -r '.results[].callee' | sort -u
特定の呼び出し先があるか確認する
# Does processOrder call sendEmail?
grepai trace callees "processOrder" --json | jq -e '.results[] | select(.callee == "sendEmail")' && echo "Yes" || echo "No"
依存関係レポートを生成する
#!/bin/bash
echo "# Function Dependencies Report"
echo ""
for fn in main initialize processOrder; do
echo "## $fn"
grepai trace callees "$fn" --json | jq -r '.results[].callee' | sed 's/^/- /'
echo ""
done
よくある問題
❌ 問題: 関数が見つからない ✅ 解決策: スペルを確認し、インデックス対象のファイルに関数が存在することを確認してください
❌ 問題: 呼び出し先が見つからない(関数には呼び出しがある) ✅ 解決策:
--mode preciseを試してください- 言語が
enabled_languagesに含まれているか確認してください - symbols.gob が最新であることを確認してください(
grepai watch)
❌ 問題: 一部の呼び出し先が見つからない
✅ 解決策: 精度を高めるには --mode precise を使ってください
ベストプラクティス
- 理解に活用する: 新しいコードベースを学ぶのに最適です
- 呼び出し元と組み合わせる: 依存関係の全体像を把握できます
- 詳細な分析にはグラフを使う: 再帰が必要な場合に便利です
- 結果をフィルタリングする: 関連する呼び出し先に絞り込めます
- 調査結果を記録する: ドキュメント用に Markdown へエクスポートできます
出力形式
呼び出し先のトレース結果:
🔍 Callees of "ProcessOrder"
Mode: fast
Function found in: services/order.go:40
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
Tip: Use 'grepai trace graph ProcessOrder' for recursive analysis
コメント
Markdown 対応