grepai-trace-callees
特定の関数が呼び出している関数を、GrepAI のトレース機能を使って探索します。ある関数の呼び出し先(callee)を調査したい場合に使用してください。
description の原文を見る
Find function callees with GrepAI trace. Use this skill to discover what functions a specific function calls.
SKILL.md 本文
GrepAI Trace Callees
このスキルは、grepai trace callees を使用して特定の関数が呼び出すすべての関数を見つけることについて説明します。
このスキルを使用する場合
- 関数の依存関係を理解する
- 関数の動作をマッピングする
- 深くネストされた依存関係を探す
- コードの理解とドキュメント作成
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は相互に排他的です。
抽出モード
Fast モード (デフォルト)
grepai trace callees "ProcessOrder" --mode fast
Precise モード
grepai trace callees "ProcessOrder" --mode precise
| モード | 速度 | 精度 | 依存関係 |
|---|---|---|---|
fast | ⚡⚡⚡ | 良好 | なし |
precise | ⚡⚡ | 優秀 | tree-sitter |
ユースケース
関数の動作を理解する
# この複雑な関数は何をしているか?
grepai trace callees "handleRequest"
# データフローをマッピングする
grepai trace callees "processPayment"
依存関係を見つける
# この関数はどの外部サービスを呼び出しているか?
grepai trace callees "syncData"
# どのデータベース操作が発生しているか?
grepai trace callees "saveUser"
コードレビュー
# この関数のサイドエフェクトは何か?
grepai trace callees "updateProfile"
# この関数は多すぎることをしていないか?
grepai trace callees "doEverything" # 多くのcallee = コードの臭い
ドキュメント作成
# ドキュメント用の依存関係リストを生成
grepai trace callees "initialize" --json | jq '.results[].callee'
Callers と Callees の比較
| コマンド | 質問 | ユースケース |
|---|---|---|
trace callers | 誰が私を呼び出しているか? | 影響分析 |
trace callees | 私は何を呼び出しているか? | 動作分析 |
# 統合分析
grepai trace callers "processOrder" # これは誰が使っているか?
grepai trace callees "processOrder" # これは何をしているか?
結果をフィルタリングする
ファイルタイプで絞り込む
# callees を取得し、.go ファイルのみをフィルタリング
grepai trace callees "main" --json | jq '.results[] | select(.file | endswith(".go"))'
テスト関数を除外する
grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'
カテゴリ別に集計する
# データベースと API 呼び出しの個数を集計
grepai trace callees "processOrder" --json | jq '.results[].callee' | grep -c "db"
Callees が含むもの
トレースは以下を検出します:
- 直接関数呼び出し
- メソッド呼び出し
- ビルトイン関数呼び出し (モードに依存)
例
func ProcessOrder(order Order) error {
// 直接呼び出し
validateOrder(order)
// メソッド呼び出し
order.Validate()
// パッケージ関数
utils.Log("processing")
// ビルトイン (キャプチャされる可能性あり)
fmt.Println("done")
return nil
}
検出される Callees:
validateOrderValidate(メソッド)Log(utils から)Println(モードに依存)
制限事項
Callees が見落とす可能性があるもの
- 動的/実行時呼び出し
- コールバックとクロージャ
- インターフェースメソッド呼び出し (インターフェースが表示され、実装ではない可能性)
- リフレクションベースの呼び出し
検出されない呼び出しの例
func process(fn func()) {
fn() // Callee は静的分析時に不明
}
Trace Graph との組み合わせ
再帰的な依存関係分析の場合は、trace graph を使用します:
# 直接の callee のみ
grepai trace callees "main"
# 完全な依存関係ツリー (再帰的)
grepai trace graph "main" --depth 3
スクリプト例
すべての Callees をリストアップ
grepai trace callees "main" --json | jq -r '.results[].callee' | sort -u
特定の Callee を確認
# processOrder は 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
よくある問題
❌ 問題: 関数が見つからない ✅ 解決策: スペルを確認し、関数がインデックス対象ファイルに存在することを確認
❌ 問題: callees が見つからない (ただし関数には呼び出しがある) ✅ 解決策:
--mode preciseを試す- 言語が
enabled_languagesに含まれているか確認 - symbols.gob が最新か確認 (
grepai watch)
❌ 問題: いくつかの callees が不足している
✅ 解決策: より高い精度のため --mode precise を使用
ベストプラクティス
- 理解のために使用: 新しいコードベースの学習に最適
- callers と組み合わせる: 完全な依存関係像を得る
- 深い分析には graph を使用: 再帰が必要な場合
- 結果をフィルタリング: 関連する callees に焦点を絞る
- 結果を文書化: マークダウンにエクスポートしてドキュメント化
出力形式
Trace callees の結果:
🔍 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
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yoanbernabeu
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yoanbernabeu/grepai-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。