investigate について
investigateは、ソースコードをたどって問題を調査する開発者向けデバッグスキルです。ripgrep検索やGit履歴の確認にGeminiの分析を組み合わせ、エラー、仮説、コードの文脈を調べます。
主な機能
- 01ripgrepによるコード検索と定義の特定
- 02関数の使用箇所と実行フローの追跡
- 03エラー、API、クエリ、設定の調査
- 04Git履歴から変更を検索
- 05Geminiによるエラー分析と仮説検証
活用シーン
- 01報告されたエラーの発生箇所を追跡
- 02関数の定義と呼び出し元を特定
- 03APIエンドポイントやデータベースクエリを調査
- 04バグの仮説を立てて検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ johnlindquist/ claude --skill investigateインストール後、Claude Code で/investigateを入力して読み込まれたか確認します。
詳細
調査ツールキット
体系的な検索と AI による分析を通じて問題をデバッグします。
前提条件
# ripgrep for fast search
brew install ripgrep
# Gemini for analysis
pip install google-generativeai
export GEMINI_API_KEY=your_api_key
検索コマンド
ripgrep の基本
# Search for pattern
rg "pattern" src/
# Case insensitive
rg -i "error" src/
# Whole word
rg -w "user" src/
# File types
rg -t ts "function" src/
rg -t py "def " src/
# Exclude patterns
rg "TODO" --glob "!node_modules"
# Show context
rg -C 3 "error" src/ # 3 lines before and after
rg -B 5 "crash" src/ # 5 lines before
rg -A 5 "crash" src/ # 5 lines after
# Just filenames
rg -l "pattern" src/
# Count matches
rg -c "pattern" src/
定義の検索
# Function definitions (TypeScript)
rg "function\s+functionName" src/
rg "(const|let|var)\s+functionName\s*=" src/
rg "export\s+(async\s+)?function\s+\w+" src/
# Class definitions
rg "class\s+ClassName" src/
# Interface/Type definitions
rg "(interface|type)\s+TypeName" src/
使用箇所の追跡
# Where is this function called?
rg "functionName\(" src/
# Where is this imported?
rg "import.*functionName" src/
# Where is this exported?
rg "export.*functionName" src/
調査パターン
バグの調査
# 1. Search for error message
rg "exact error message" .
# 2. Find where error is thrown
rg "throw.*Error" src/ -C 3
# 3. Trace the function
rg "functionThatFails" src/ -C 5
# 4. Check recent changes
git log --oneline -20 --all -- src/problematic-file.ts
git diff HEAD~5 -- src/problematic-file.ts
実行フローの追跡
#!/bin/bash
ENTRY_POINT=$1
echo "=== Entry Point ==="
rg -A 10 "export.*$ENTRY_POINT" src/
echo "=== Called Functions ==="
rg -o "\w+\(" src/$ENTRY_POINT*.ts | sort -u
echo "=== Dependencies ==="
rg "^import" src/$ENTRY_POINT*.ts
AI を活用したデバッグ
# Analyze error with context
ERROR="Your error message here"
CODE=$(cat problematic-file.ts)
gemini -m pro -o text -e "" "Debug this error:
ERROR: $ERROR
CODE:
$CODE
Provide:
1. Most likely cause
2. How to verify
3. How to fix
4. How to prevent in future"
仮説の検証
# Generate hypotheses
gemini -m pro -o text -e "" "Given this bug symptom:
SYMPTOM: [describe what's happening]
CONTEXT: [relevant code/system info]
Generate 5 hypotheses ranked by likelihood, with a test for each."
# Then test each hypothesis
rg "hypothesis-related-pattern" src/
よくある調査
すべてのエラーハンドリングを検索
rg "catch|\.catch|try\s*{" src/ -t ts
rg "throw\s+new" src/ -t ts
API エンドポイントを検索
rg "(get|post|put|delete|patch)\s*\(" src/ -i
rg "router\.(get|post|put|delete)" src/
rg "@(Get|Post|Put|Delete)" src/
データベースクエリを検索
rg "(SELECT|INSERT|UPDATE|DELETE)" src/ -i
rg "\.query\(|\.execute\(" src/
rg "prisma\.\w+\.(find|create|update|delete)" src/
設定を検索
rg "process\.env\." src/
rg "(config|settings)\[" src/
rg "getenv|os\.environ" src/ -t py
セキュリティ問題を検索
# SQL injection potential
rg "query.*\+.*\"|'.*\+" src/
# Hardcoded secrets
rg "(password|secret|key|token)\s*=\s*['\"]" src/ -i
# Unsafe eval
rg "eval\(" src/
詳細調査スクリプト
#!/bin/bash
# investigate.sh - Comprehensive code investigation
TERM=$1
echo "=== Investigating: $TERM ==="
echo ""
echo "### Definitions ###"
rg "^(export\s+)?(function|const|class|interface|type)\s+$TERM" src/
echo ""
echo "### Usage ###"
rg "$TERM" src/ --stats | head -50
echo ""
echo "### Recent Changes ###"
git log --oneline -10 -S "$TERM"
echo ""
echo "### Blame ###"
for f in $(rg -l "$TERM" src/); do
echo "--- $f ---"
git blame -L "/$TERM/,+5" "$f" 2>/dev/null | head -10
done
ベストプラクティス
- エラーから始める - まず正確なメッセージを検索します
- コンテキストを広げる - 周囲のコードには
-C、-B、-Aを使用します - 履歴を確認する -
git log -Sでコードがいつ導入されたかを特定できます - 複雑な場合は AI を使う - パターンマッチングでは不十分なときに
- 調査結果を記録する - 発見した内容を書き留めます
- 仮説を検証する - 思い込む前に確認します
コメント
Markdown 対応