フックと settings.json のレシピ
settings.json、権限、フックのための、そのまま使えるレシピです。コマンドはあなたのスタックに合わせて調整してください。
スタータープロジェクトの settings.json
.claude/settings.json(コミットしてチーム全体で共有):
{
"permissions": {
"allow": [
"Read",
"Bash(npm run test:*)",
"Bash(npm run lint)",
"Bash(git status)",
"Bash(git diff:*)"
],
"ask": ["Bash(npm install:*)", "Write"],
"deny": ["Read(./.env)", "Read(./**/*.pem)", "Bash(git push --force:*)"]
}
}
個人用・マシン固有の上書きは .claude/settings.local.json(git で無視)に置いてください。
編集後の自動フォーマット
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true" }
]
}
]
}
}
完了前の品質ゲート
テストが通るまで「完了」をブロックします(概念的なもの — ドキュメントに従って Stop/完了前イベントに接続してください):
{
"hooks": {
"Stop": [
{ "hooks": [ { "type": "command", "command": "npm test --silent" } ] }
]
}
}
安全ガード(保護パスの編集をブロック)
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "case \"$CLAUDE_FILE_PATH\" in *secrets*|*.env|*/vendor/*) echo 'blocked: protected path'; exit 1;; esac" }
]
}
]
}
}
:::tip フックは高速かつ冪等に保つ フックは絶えず実行されます。素早く、再実行しても安全で、本当の問題のときだけ声を上げるようにしてください。 :::