「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!
「Claude Code」に毎回同じ指示を書いていませんか。「保存したらバックアップして」「コミット前に Lint かけて」——繰り返す指示ほど、実は書かなくていい指示です。ところが多くの解説は開発者向けで、「matcher」「jq」「exit code 2」と専門用語が続き、非エンジニアは入り口で止まってしまいます。
● 毎回同じ指示を書くのに疲れている
● ドキュメントを読んでも専門用語で挫折した
● 非エンジニアの業務に「Hooks」をどう使えばいいか分からない
プロンプトを打たなくても、「Claude Code」に自動で動いてもらう仕組みがあります。それが「Hooks」です。イベントをトリガーに決まった処理を走らせる、いわば AI に”クセ”をつける仕組みです。この記事では、仕組みの本質・全イベント一覧・最小構成・matcher 記法・環境変数・業務への応用・セキュリティ注意点・デバッグ方法まで、コピペで試せる形で網羅します。
そもそも「Hooks」とは ─ 指示を出さなくても AI が動く仕組み
「Hooks」とは、「Claude Code」が特定のイベント(ファイル編集、セッション開始、ツール実行前後など)を検知したときに、あらかじめ決めておいたコマンドを自動で走らせる仕組みです。公式日本語ドキュメント(code.claude.com/docs/ja/hooks-guide)に詳細が公開されています。
従来の使い方は「プロンプト駆動」です。ユーザーが毎回指示を書いて発射するタイプ。一方の「Hooks」は「イベント駆動」で、条件が揃えば勝手に動きます。ルンバで例えるなら、毎回「ゴミを吸って」と言うのが前者、「朝7時に自動で動く」のが後者です。
| 観点 | プロンプト駆動 | イベント駆動(Hooks) |
|---|---|---|
| トリガー | ユーザーの指示 | ファイル編集・セッション開始など |
| 労力 | 毎回書く | 1回書けば以降は自動 |
| 適した用途 | 単発の相談 | 毎回同じ処理の自動化 |
| 具体例 | 「この関数をリファクタして」 | 「保存したら自動でバックアップ」 |
指示文例(ビフォー): 「ファイルを保存するたびに、同じファイル名に
.bakを付けたコピーを作って」を毎回打ち込む
指示文例(アフター):.claude/settings.jsonに PostToolUse の Hook を1回だけ書いておけば、Edit/Write のたびに自動でコピーが作成される
Hooks が発火するタイミング ─ 全イベント一覧と「よく使う5つ」
Hooks のイベントは2026年時点で10種類以上用意されていて、Anthropic 側で随時追加されています。非エンジニア業務で実際に使うのは、5つでほぼ足りるのが実情です。まずは「よく使う5つ」から見ていきましょう。
| イベント名 | 発火タイミング | 典型用途 | 非エンジニア向け例 |
|---|---|---|---|
| SessionStart | セッション開始時 | 初期設定の読み込み | 朝一で今日の予定を読み込む |
| PreToolUse | ツール実行の直前 | 危険コマンドをブロック | rm * を事前に止める |
| PostToolUse | ツール実行の直後 | バックアップ・通知 | 編集後に .bak を作成 |
| Stop | AI の応答が終わった瞬間 | 完了音・通知 | 作業終了時に音を鳴らす |
| SessionEnd | セッション終了時 | ログの書き出し | 日次メモに作業終了時刻を追記 |
この5つのうち、PostToolUse と SessionEnd の2つだけで8割カバーできます。残りの5つ以上のイベントは、特定用途で必要になったときに学べば十分です。参考までに全体像も置いておきます。
| イベント名 | 何のときに発火するか |
|---|---|
| UserPromptSubmit | ユーザーがプロンプトを送信した瞬間 |
| Notification | AI から通知が発生した瞬間 |
| PreCompact | 会話履歴の圧縮(コンパクション)直前 |
| SubagentStop | サブエージェントが終了した瞬間(2026年追加) |
| StopFailure | APIエラーで応答が打ち切られた瞬間(2026年追加) |
| FileChanged | 監視対象ファイルが変更された瞬間(2026年追加) |
| CwdChanged | 作業ディレクトリが変更された瞬間(2026年追加) |
2026年に追加された SubagentStop FileChanged CwdChanged などはより細かい制御が必要な場面で活きるイベントです。たとえば FileChanged は direnv のような環境変数自動読み込みに使えます。とはいえ、全部を覚える必要はありません。必要になった時点で公式ドキュメントを見れば十分間に合います。
最小構成で試す ─ .claude/settings.json と matcher 記法
Hooks の本体は .claude/settings.json というファイルです。このファイルは3階層に分かれていて、置く場所によって効く範囲が変わります。
| 階層 | パス | 効く範囲 | 推奨用途 |
|---|---|---|---|
| user | ~/.claude/settings.json | 全プロジェクト共通 | 個人の共通ルール |
| project | .claude/settings.json | そのリポジトリのみ | チーム共有設定(git 管理) |
| local | .claude/settings.local.json | 自分だけ | 個人の上書き(.gitignore) |
Hook 定義は3段構造になっています。「どのイベントに」「どのツールに当てはまったら」「何を走らせるか」の3層です。この「どのツールに当てはまったら」を指定するのが matcher フィールドで、正規表現で柔軟に絞り込めるのが強みです。
| matcher の書き方 | 意味 |
|---|---|
Edit | Edit ツール実行時のみ発火 |
Edit|Write | Edit または Write のどちらかで発火(OR) |
.* または省略 | 全ツールで発火 |
Bash | Bash 実行時のみ(コマンドブロック用) |
一番ハードルの低い例を置きます。PostToolUse で Edit または Write の後に、対象ファイルを .bak にコピーする最小設定です。Hook 実行時には CLAUDE_TOOL_INPUT_* という環境変数で実行対象の情報が渡ってくるので、$CLAUDE_TOOL_INPUT_file_path のように参照できます。
指示文例①(PostToolUse・コピペ可):
{"hooks": {"PostToolUse": [{"matcher": "Edit|Write","hooks": [{"type": "command","command": "cp \"$CLAUDE_TOOL_INPUT_file_path\" \"$CLAUDE_TOOL_INPUT_file_path.bak\""}]}]}}
動かない時のチェックポイントは3つです。JSON 構文(カンマやカッコの閉じ忘れ)・ファイルの置き場所・コマンドのパス。この3つを見直せば、ほとんどのトラブルは解消します。まず stdout にログを吐くだけの最小版を動かしてから、実コマンドに差し替えるのがデバッグの王道です。
| デバッグ方法 | やり方 |
|---|---|
| stdout に何が来ているか見る | command: "echo \"$CLAUDE_TOOL_INPUT_file_path\" >> /tmp/hook.log" |
| JSON 構文を確認 | cat .claude/settings.json | jq . でパースエラーが出ないか |
| 再起動を忘れない | settings.json を編集したら Ctrl+C → 起動し直し |
コードはスマホだと横スクロールが発生します。長押しコピーでターミナルに貼れば、そのまま動きます。
非エンジニアの業務に効く 5つの自動化パターン
ここが本記事の差別化の核です。他の解説記事が書いていない「コード以外の用途」を5つ並べます。
| 業務 | トリガー | Hook 概要 | 効果 |
|---|---|---|---|
| 議事録バックアップ | PostToolUse | 議事録ファイル編集後に Notion API で複製 | 保存忘れゼロ |
| 下書き完成通知 | Stop | 記事下書き完成時に Slack へ webhook | チーム共有の漏れ防止 |
| 機密ワードブロック | PreToolUse | 顧客名・金額を含むコマンドを自動停止 | 情報漏洩事故防止 |
| 週次 SEO スナップショット | SessionStart | 月曜朝にサジェスト取得スクリプト自動実行 | 月曜朝の3分ルーティン削減 |
| 日次メモ追記 | SessionEnd | 日次ログディレクトリに作業終了時刻を追記 | 振り返りの自動化 |
指示文例②(SessionEnd で日次メモ追記・コピペ可):
{"hooks": {"SessionEnd": [{"hooks": [{"type": "command","command": "echo \"- [$(date +%H:%M)] セッション終了\" >> daily-log/$(date +%Y-%m-%d).md"}]}]}}
Slack webhook で通知を飛ばす実装例も置いておきます。Slack の Incoming Webhook URL を取得しておけば、下書き完成時の自動通知が数行で組めます。
指示文例③(Stop で Slack 通知・コピペ可):
{"hooks": {"Stop": [{"hooks": [{"type": "command","command": "curl -X POST -H 'Content-type: application/json' --data '{\"text\":\"Claude の応答完了\"}' $SLACK_WEBHOOK_URL"}]}]}}
実務事例として参考になるのが Plaid の運用です。AI コーディング支援の活用でPR 数が約4倍・マージ時間が約30%短縮という成果が公開されており、その背景には Hooks と権限設定を組み合わせた「ルールを徹底させるのではなく、ルールを守らざるを得ない環境を設計する」という思想があります。
daily-log/ のパスは自社の運用ディレクトリに合わせて変えてください。Notion API や Slack webhook の URL を差し込めば、議事録バックアップや下書き通知もすぐ作れます。
やらかさないための3つの注意点 ─ セキュリティと暴走対策
Hooks はシェルコマンドを自動実行する仕組みです。つまり、使い方を間違えると権限が強すぎて事故につながります。落とし穴を3つに整理しました。
| 現象 | 起きる理由 | 対策 |
|---|---|---|
| 他人の settings.json が勝手に動く | 無検証でコピペ=任意コード実行相当 | 中身のコマンドを必ず目で読む。怪しい curl ・rm は排除 |
| 無限ループで止まらない | Stop フックが Stop を再度発火させる | stop_hook_active フラグを確認。exit code 2 の挙動も理解しておく |
| 想定外の環境で動かない | OS やシェルの違い(Windows と Mac) | 最初は stdout にログを吐くだけで動作確認してから実コマンドに差し替える |
2つ目の exit code と stop_hook_active は、Hooks の動作を理解するうえで重要な概念です。
| 概念 | 意味 | 使いどころ |
|---|---|---|
exit code 0 | Hook が正常終了。何もしない | 通常のバックアップ・通知 |
exit code 2 | 処理をブロックする特殊コード | PreToolUse で危険コマンドを止める |
stop_hook_active | Stop フック実行中のフラグ | Stop フックが再発火する無限ループを防ぐ |
特に注意したいのがOS 依存の挙動差です。Windows と macOS では、プロセスの起動方法や標準入力パイプの扱いが異なるため、同じ Hook が Mac で動いて Windows で動かない(あるいはその逆)は珍しくありません。最初は「まず stdout にログだけ出す」最小版から組み、動作確認してから実コマンドに差し替えるのが事故を防ぐコツです。
指示文例④(危険な
rmを PreToolUse でブロック・まずは確認だけ):{"hooks": {"PreToolUse": [{"matcher": "Bash","hooks": [{"type": "command","command": "if echo \"$CLAUDE_TOOL_INPUT_command\" | grep -qE 'rm +-rf|rm +\\*'; then echo 'BLOCKED: 危険な rm'; exit 2; fi"}]}]}}
この例では exit 2 を返すことで、Claude 側に「このコマンドは実行しないでください」と伝えています。exit 0 や exit 1 だと実行が続行してしまうので、ブロックしたいときは必ず exit 2 を使います。
明日から試す3ステップ ─ 1行コピペ→1業務自動化→チーム共有
最後に、週末30分で試せる3ステップをまとめます。
| ステップ | 所要時間 | やること | 到達点 |
|---|---|---|---|
| ①コピペで動かす | 30分 | 本記事の PostToolUse 例をコピペして動作確認 | Hooks の挙動を体感 |
| ②自分の業務を1つ載せる | 1時間 | 毎日書いている同じ指示を1つだけ Hook 化 | 自分の業務で1個自動化 |
| ③チーム共有 | 10分 | .claude/settings.json を配布(中身のコマンドを見せる) | 再現性のある仕組みへ |
読後感としては、「自分の業務で自動化できそうなことが3つ思いつく」状態になっているはずです。その3つのうち一番簡単なものから試してみてください。
サブエージェントが「役を分ける」仕組み、Skills が「仕事を残す」仕組みだとすれば、Hooks は「自動で動かす」仕組みです。3つを組み合わせることで、あなたの業務は「毎回指示する」段階から「勝手に回り始める」段階へと進みます。
Hooks は、AI に”任せる範囲”を広げる仕組みです。毎日書いている同じ指示を1つだけ、今週末に自動化してみませんか。
最後に
「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!
地道ラボでは、「Claude Code」の Hooks 設計テンプレート(議事録バックアップ・日次メモ追記・機密ワードブロックの3点セット)を LINE で配布しています。業種や業務内容を聞き、それに合わせた .claude/settings.json の雛形を提案します。
申し込みは LINE で「Hooks テンプレ」または「自動化テンプレ」とメッセージを送るだけです。
大げさなコンサルティングではなく、明日から試せる具体的な一歩をお伝えするのが私たちのスタイルです。
AI に”勝手に動くクセ”をつける一歩を、今日ここから踏み出しませんか。
次の一歩として、まずは「毎日『Claude Code』に書いている同じ指示」を一つ教えてください。その指示を、具体的に Hooks 化する JSON にして提案します。
引用・参考URL
- Claude Code Hooks 公式日本語: https://code.claude.com/docs/ja/hooks-guide
- Hooks Reference(英): https://code.claude.com/docs/en/hooks
- settings.json 全体ガイド: https://www.eesel.ai/ja/blog/settings-json-claude-code
- Qiita(nogataka 氏・Hooks 全イベント解説): https://qiita.com/nogataka/items/17fc8d9c2b2efde570a6
- DevelopersIO(Hooks 基本): https://dev.classmethod.jp/articles/claude-code-hooks-basic-usage/
- claude-code-hooks-mastery(GitHub): https://github.com/disler/claude-code-hooks-mastery


コメント