編集後テストランナー
Post-Tool入門Hookタイプ: post-tool-use
編集後テストランナーは、すべてのファイル書き込みまたは編集操作の後にトリガーされます。一般的な命名規則(*.test.ts、*.spec.ts、__tests__/*)を使用して、変更されたソースファイルに対応するテストファイルを検出し、該当するテストのみを実行します。一致するテストファイルがない場合は静かにスキップします。これにより、編集が既存の機能を壊していないか即座にフィードバックを得られ、リグレッションが蓄積される前に検出できます。
テストJestVitestリグレッション自動化
Hookコード
#!/bin/bash
# Post-Edit Test Runner Hook
# Runs related tests after file edits
# Only trigger on file write/edit tools
if [[ "$TOOL_NAME" != "Edit" ]] && [[ "$TOOL_NAME" != "Write" ]]; then
exit 0
fi
FILE_PATH=$(echo "$TOOL_INPUT" | jq -r '.file_path // .path // empty')
if [ -z "$FILE_PATH" ]; then
exit 0
fi
# Skip non-source files
if ! echo "$FILE_PATH" | grep -qE '\.(ts|tsx|js|jsx|py)$'; then
exit 0
fi
# Skip test files themselves
if echo "$FILE_PATH" | grep -qE '\.(test|spec)\.(ts|tsx|js|jsx)$'; then
exit 0
fi
BASE_NAME=$(basename "$FILE_PATH" | sed 's/\.[^.]*$//')
DIR_NAME=$(dirname "$FILE_PATH")
# Find matching test files
TEST_FILE=""
for pattern in "$DIR_NAME/$BASE_NAME.test.ts" "$DIR_NAME/$BASE_NAME.spec.ts" "$DIR_NAME/__tests__/$BASE_NAME.test.ts"; do
if [ -f "$pattern" ]; then
TEST_FILE="$pattern"
break
fi
done
if [ -z "$TEST_FILE" ]; then
echo "No matching test file found for $FILE_PATH, skipping."
exit 0
fi
echo "Running tests: $TEST_FILE"
npx vitest run "$TEST_FILE" --reporter=verbose 2>&1 | tail -20
exit 0
このHookをClaude Code設定または.claude/settings.jsonに追加して有効化してください。
実行プレビュー
編集後テストランナー
編集後テストランナーについて
Claude Code Hooksは、Claude操作中の特定イベントに応じてカスタムシェルコマンドを自動実行します。編集後テストランナーは入門レベルのPost-Tool Hookで、開発ワークフローの重要なタイミングでタスクを自動化し、手動ステップを削減してチーム全体の一貫性を維持します。