mcpField
G
grepai-trace-callees

grepai-trace-callees

github.com/yoanbernabeu開発20772 回インストール38 週間前に更新
リポジトリ

grepai-trace-callees について

grepai-trace-callees は、指定した関数が呼び出す関数やメソッドを調べる grepai のスキルです。抽出モードと複数の出力形式を使い、コードの理解や依存関係の分析に役立ちます。

主な機能

  1. 01関数とメソッドの直接呼び出しを検索
  2. 02高速または高精度の抽出モード
  3. 03JSON、コンパクト JSON、TOON 出力
  4. 04スクリプト向けの結果フィルタリング

活用シーン

  1. 01複雑な関数の動作を把握
  2. 02呼び出し関係と副作用を確認
  3. 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
}

見つかった呼び出し先:

  • validateOrder
  • Validate(メソッド)
  • 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 を使ってください

ベストプラクティス

  1. 理解に活用する: 新しいコードベースを学ぶのに最適です
  2. 呼び出し元と組み合わせる: 依存関係の全体像を把握できます
  3. 詳細な分析にはグラフを使う: 再帰が必要な場合に便利です
  4. 結果をフィルタリングする: 関連する呼び出し先に絞り込めます
  5. 調査結果を記録する: ドキュメント用に 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

コメント