mcpField
D
debug-hooks

debug-hooks

github.com/parcadei開発3.9k501 回インストール39 週間前に更新
リポジトリ

debug-hooks について

Claude Code のフックを体系的に調査するトラブルシューティングスキルです。出力、登録、ファイル、手動テスト、見えない失敗、TypeScript 編集後の再ビルドを確認します。

主な機能

  1. 01ログとキャッシュ出力の確認
  2. 02プロジェクトとグローバル設定の検証
  3. 03フックスクリプトとコンパイル済みファイルの確認
  4. 04フックの手動実行
  5. 05見えない失敗の特定と TypeScript の再ビルド

活用シーン

  1. 01フックが起動しない問題の調査
  2. 02フック出力がない原因の追跡
  3. 03フック登録の重複確認
  4. 04TypeScript の変更を実行ファイルに反映

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/parcadei/continuous-claude-v3 --skill debug-hooks

インストール後、Claude Code で/debug-hooksを入力して読み込まれたか確認します。

詳細

デバッグフック

Claude Code フックの体系的なデバッグワークフローです。

使用するタイミング

  • 「フックが実行されない」
  • 「フックが誤った出力を生成する」
  • 「SessionEnd が機能しない」
  • 「PostToolUse フックが起動しない」
  • 「フックが実行されなかったのはなぜ?」

ワークフロー

1. まず出力を確認する(編集する前に状態を観察する)
# Check project cache
ls -la $CLAUDE_PROJECT_DIR/.claude/cache/

# Check specific outputs
ls -la $CLAUDE_PROJECT_DIR/.claude/cache/learnings/

# Check for debug logs
tail $CLAUDE_PROJECT_DIR/.claude/cache/*.log 2>/dev/null

# Also check global (common mistake: wrong path)
ls -la ~/.claude/cache/ 2>/dev/null
2. フックの登録を確認する
# Project settings
cat $CLAUDE_PROJECT_DIR/.claude/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'

# Global settings (hooks merge from both)
cat ~/.claude/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'
3. フックファイルが存在することを確認する
# Shell wrappers
ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/*.sh

# Compiled bundles (if using TypeScript)
ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/dist/*.mjs
4. フックを手動でテストする
# SessionEnd hook
echo '{"session_id": "test-123", "reason": "clear", "transcript_path": "/tmp/test"}' | \
  $CLAUDE_PROJECT_DIR/.claude/hooks/session-end-cleanup.sh

# PostToolUse hook (Write tool example)
echo '{"tool_name": "Write", "tool_input": {"file_path": "test.md"}, "session_id": "test-123"}' | \
  $CLAUDE_PROJECT_DIR/.claude/hooks/handoff-index.sh
5. サイレントエラーを確認する

stdio: 'ignore' を指定してデタッチされたプロセスを起動している場合:

// This pattern hides errors!
spawn(cmd, args, { detached: true, stdio: 'ignore' })

修正方法: 一時的なログ出力を追加します。

const logFile = fs.openSync('.claude/cache/debug.log', 'a');
spawn(cmd, args, {
  detached: true,
  stdio: ['ignore', logFile, logFile]  // capture stdout/stderr
});
6. 編集後に再ビルドする

TypeScript のソースを編集した場合は、必ず再ビルドしてください。

cd $CLAUDE_PROJECT_DIR/.claude/hooks
npx esbuild src/session-end-cleanup.ts \
  --bundle --platform=node --format=esm \
  --outfile=dist/session-end-cleanup.mjs

ソースを編集しただけでは反映されません。シェルラッパーはバンドル済みの .mjs を実行します。

よくある問題

症状考えられる原因修正方法
フックが一度も実行されないsettings.json に登録されていない設定内の正しいイベントに追加する
フックは実行されるが、出力がないデタッチされたプロセスがエラーを隠しているログ出力を追加し、手動で確認する
セッション ID が違う「最新」のクエリを使用しているID を明示的に渡す
ローカルでは動作するが、CI では動作しない依存関係が不足しているnpx/node が利用可能か確認する
2 回実行されるグローバルとプロジェクトの両方に登録されている重複を削除する

デバッグチェックリスト

  • 出力は存在するか?(ls -la .claude/cache/)
  • 登録されているか?(grep -A10 '"hooks"' .claude/settings.json)
  • ファイルは存在するか?(ls .claude/hooks/*.sh)
  • バンドルは最新か?(ls -la .claude/hooks/dist/)
  • 手動テストは成功するか?(echo '{}' | ./hook.sh)
  • サイレントエラーはないか?(stdio: 'ignore' がないか確認する)

ソースセッション

10 件のセッション(学習内容全体の 83%)をもとに作成:

  • a541f08a, 1c21e6c8, 6a9f2d7a, a8bd5cea, 2ca1a178, 657ce0b2, 3998f3a2, 2a829f12, 0b46cfd7, 862f6e2c

コメント