「Claude Codeに毎日依頼してるけど、後で見返せる記録が残らない」「ツール実行後に毎回手動で整形してる」 — こういう 繰り返しの手動作業 をなくすのがHooksの役割です。
Hooksは、Claude Codeの内部で起きる イベント にあわせて、自分が決めた処理を自動実行してくれる仕組み。設定は settings.json に書くだけ。
非エンジニアでも触れる範囲で、 すぐ効く5つのHooks を紹介します。
Hooksの基本構造
~/.claude/settings.json または .claude/settings.json に書く形。
{
"hooks": {
"<イベント名>": [
{
"matcher": "<対象パターン>",
"hooks": [
{ "type": "command", "command": "<実行コマンド>" }
]
}
]
}
}
イベント名はざっくり12種類ありますが、非エンジニアが押さえるべきは 4つ です。
イベント | いつ発火するか |
|---|---|
Stop | 会話セッションが終了した時 |
PostToolUse | ツール実行が終わった直後 |
PreToolUse | ツール実行する直前 |
Notification | Claudeが許可待ち or 注意喚起した時 |
これだけで実用上の9割をカバーします。
Hook 1 — Stop で「会話ログを自動保存」
私が最初に入れたHook、そして今でも一番効いているHook。
{
"hooks": {
"Stop": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "/export ~/Documents/claude-logs/$(date +%Y-%m-%d-%H%M).md"
}
]
}
]
}
}
これでClaude Codeセッションを /exit で終了するたびに、 Markdown形式の会話ログが自動生成 されます。
1ヶ月続けると、自分の業務記録がファイル単位で蓄積されていて、 「先月この案件で何をやったか」が即座に検索できる 状態になります。
業務日誌や引き継ぎ資料の 下書きが勝手に貯まる のと同じ。
Hook 2 — PostToolUse で「コミット時にメモを残す」
Claude Codeがgit commitを実行した直後に、別ファイルにコミット履歴を追記するHook。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash(git commit:*)",
"hooks": [
{
"type": "command",
"command": "echo \"$(date) - committed\" >> ~/Documents/dev-log.txt"
}
]
}
]
}
}
matcher に Bash(git commit:*) を指定することで、 「Bashツールでgit commitを実行した時だけ」 発火。 * はワイルドカード。
これだけで、いつ・どのプロジェクトでコミットしたかの記録が残る。 作業日誌の下書きを自動生成 する小さな仕掛けです。
Hook 3 — Notification で「許可待ちの音声アラート」
Claudeが「このコマンドを実行していい?」と確認待ちになった時、画面を見ていないと気づきません。
これを 音で気づく ようにするHook。Macなら say コマンド、WindowsならPowerShellの音声合成を使います。
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{
"type": "command",
"command": "say 'Claudeが確認待ちです'"
}
]
}
]
}
}
これで、別画面で作業していてもClaudeの確認待ちに即座に気づける。 スマホ通知 も別途入れていますが、PC前にいるならこれで十分。
Hook 4 — PostToolUse で「ファイル編集後の自動整形」
Claudeがファイルを編集した直後に、Prettierや自分の整形ツールをかけるHook。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "cd $CLAUDE_PROJECT_DIR && npx prettier --write \"$CLAUDE_TOOL_OUTPUT_FILE\""
}
]
}
]
}
}
matcher: "Edit|Write" は EditツールまたはWriteツールが動いた時 に発火、という意味。
JavaScript/TypeScriptプロジェクトでは、これを入れておくと コードフォーマットがClaudeまかせ で揃います。Linterやテストの自動実行に拡張する人も多い。
Hook 5 — PreToolUse で「危険なコマンドをブロック」
セキュリティ強化のためのHook。Claudeが実行しようとしているコマンドを、 事前にチェックして拒否 することができます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(rm -rf:*)",
"hooks": [
{
"type": "command",
"command": "echo 'rm -rf is blocked' && exit 2"
}
]
}
]
}
}
exit 2 でコマンドの実行を 拒否 できる。これに引っかかると、Claudeに「このコマンドは禁止されています」というフィードバックが返って、別のアプローチを考えてくれる。
rm -rf 以外にも、 git push --force、 .env ファイルの上書きなど、 取り返しがつかない操作 をブロックするのに使えます。
Hooks運用の注意点
便利な反面、ハマるポイントもあります。
1つ目 — シェル依存性
say はMac専用、 notify-send はLinux専用、Windowsは別の方法。 OS別のHook を使う場合、チームで共有する .claude/settings.json には書かないほうが無難。
2つ目 — Hookの実行コストに注意
PostToolUseは 毎回のツール実行ごと に発火するので、重いコマンドを書くと体感速度が落ちます。 数百ms以内 で終わる処理に限定するのがコツ。
3つ目 — エラー時の挙動
Hookが失敗した時の挙動を理解しておく。 exit 0 なら成功、 exit 1 なら警告、 exit 2 なら拒否(PreToolUseのみ意味あり)。
まとめ
- Hooksは イベント駆動の自動処理 機能
- 押さえるべきイベントは Stop / PostToolUse / PreToolUse / Notification の4つ
- Stop Hookで会話ログを自動保存 が業務日誌として効く
- PostToolUseでコミット記録・自動整形
- Notificationで音声アラート(画面見てない時の救い)
- PreToolUseで危険コマンドをブロック してセキュリティ強化
- 重い処理を入れすぎると 体感速度が落ちる ので軽く保つ
settings.json に1ブロック追加するだけで、毎日の手間が確実に減ります。今日のうちにStop Hookだけでも入れてみてください。





