「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"
          }
        ]
      }
    ]
  }
}

matcherBash(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だけでも入れてみてください。