debugger について
Debuggerは、ソフトウェアの問題を体系的に診断し、解決するためのスキルです。開発者が不具合の再現と範囲の絞り込みから、仮説検証、修正、回帰確認まで進められるよう支援します。
主な機能
- 01段階的な問題の再現
- 02スタックトレースとログの分析
- 03問題範囲の切り分け
- 04仮説の検証
- 05修正と回帰の確認
活用シーン
- 01アプリケーションの予期しない動作を調査
- 02最小再現で不具合の範囲を絞り込み
- 03修正を検証して再発を防止
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ zhaono1/ agent-playbook --skill debuggerインストール後、Claude Code で/debuggerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/checklist.mderrors.mdpatterns.mdscripts/debug_report.py詳細
デバッガー
コードの問題を体系的に診断し、解決する高度なデバッグスペシャリストです。
このスキルが有効になるタイミング
次の場合に有効になります。
- エラーやバグを報告する
- 「これをデバッグして」や「デバッグを手伝って」と伝える
- 予期しない動作について説明する
- 何かが動作しない理由を尋ねる
デバッグのプロセス
フェーズ 1:問題を把握する
-
問題を再現する
- 再現するための正確な手順は何ですか?
- 期待される動作は何ですか?
- 実際の動作はどうなっていますか?
- どのようなエラーメッセージが表示されますか?
-
状況を把握する
# Check recent changes git log --oneline -10 # Check error logs tail -f logs/error.log # Check environment env | grep -i debug
フェーズ 2:問題を切り分ける
-
エラーの発生源を特定する
- スタックトレースの分析
- エラーコードの検索
- ログの関連付け
-
範囲を絞り込む
- 二分探索(一方をコメントアウトする)
- 再現ケースを最小化する
- 影響を受けるコンポーネントを特定する
フェーズ 3:根本原因を分析する
よくあるエラーのカテゴリ
| カテゴリ | 症状 | 調査手順 |
|---|---|---|
| Null/Undefined | 「Cannot read X of undefined」 | 変数の発生元を追跡する |
| 型エラー | 「X is not a function」 | 実際の型と想定される型を確認する |
| 非同期処理の問題 | 競合状態、タイミング | Promise の処理や async/await を確認する |
| 状態の問題 | 古いデータ、誤った状態 | 状態の変更を追跡する |
| ネットワーク | タイムアウト、接続拒否 | エンドポイント、CORS、認証を確認する |
| 環境 | ローカルでは動作するが、本番環境では動作しない | 環境変数やバージョンを比較する |
| メモリ | メモリリーク、メモリ不足 | メモリ使用量をプロファイルする |
| 並行処理 | デッドロック、競合状態 | ロックや共有状態を確認する |
フェーズ 4:仮説を立てる
考えられる原因ごとに、次の手順を実行します。
- 仮説を立てる
- 検証するテストを作成する
- テストを実行する
- 仮説を確認または棄却する
フェーズ 5:修正して検証する
- 修正を実装する
- 必要に応じてログを追加する
- 修正をテストする
- リグレッションテストを追加する
デバッグ用コマンド
一般的なデバッグ
# Find recently modified files
find . -type f -mtime -1 -name "*.js" -o -name "*.ts" -o -name "*.py"
# Grep for error patterns
grep -r "ERROR\|FATAL\|Exception" logs/
# Search for suspicious patterns
grep -r "TODO\|FIXME\|XXX" src/
# Check for console.log left in code
grep -r "console\.log\|debugger" src/
言語別
JavaScript/TypeScript:
# Run with debug output
NODE_DEBUG=* node app.js
# Check syntax
node -c file.js
# Run tests in debug mode
npm test -- --inspect-brk
Python:
# Run with pdb
python -m pdb script.py
# Check syntax
python -m py_compile script.py
# Verbose mode
python -v script.py
Go:
# Race detection
go run -race main.go
# Debug build
go build -gcflags="-N -l"
# Profile
go test -cpuprofile=cpu.prof
よくあるデバッグパターン
パターン 1:分割統治法
# When you don't know where the bug is:
def process():
step1()
step2()
step3()
step4()
# Comment out half:
def process():
step1()
# step2()
# step3()
# step4()
# If bug disappears, uncomment half of commented:
def process():
step1()
step2()
# step3()
# step4()
# Continue until you isolate the bug
パターン 2:ログを追加する
// Before (mysterious failure):
async function getUser(id: string) {
const user = await db.find(id);
return transform(user);
}
// After (with logging):
async function getUser(id: string) {
console.log('[DEBUG] getUser called with id:', id);
const user = await db.find(id);
console.log('[DEBUG] db.find returned:', user);
const result = transform(user);
console.log('[DEBUG] transform returned:', result);
return result;
}
パターン 3:最小再現ケース
// Complex code with bug:
function processBatch(items, options) {
// 100 lines of complex logic
}
// Create minimal reproduction:
function processBatch(items, options) {
console.log('Items:', items.length);
console.log('Options:', options);
// Test with minimal data
return processBatch([items[0]], options);
}
エラーメッセージの分析
よくあるエラーメッセージ
| エラー | 考えられる原因 | 解決策 |
|---|---|---|
Cannot read property 'X' of undefined | null/undefined に対するプロパティへのアクセス | null チェックを追加する、オプショナルチェーンを使用する |
X is not a function | 型の誤り、名前のシャドーイング | typeof を確認する、インポートを検証する |
Unexpected token | 構文エラー | エラーの直前の行を確認し、構文を検証する |
Module not found | インポートパスの誤り | 相対パスを確認し、ファイルの存在を検証する |
EADDRINUSE | ポートがすでに使用されている | 既存のプロセスを終了するか、別のポートを使用する |
Connection refused | サービスが起動していない | サービスを起動し、ポートを確認する |
Timeout | リクエストの処理が遅すぎる | タイムアウトを延長し、ネットワークを確認する |
デバッグチェックリスト
- 問題を一貫して再現できる
- エラーが発生する正確な場所を特定した
- 根本原因を理解している
- 修正案がある
- 修正によって既存の機能が壊れない
- 再発を防ぐためのテストを追加した
スクリプト
デバッグレポートを生成します。
python3 scripts/debug_report.py --name <error-message> --output debug-report.md
参考資料
references/checklist.md- デバッグチェックリストreferences/patterns.md- よくあるデバッグパターンreferences/errors.md- エラーメッセージのリファレンス
コメント
Markdown 対応