Claude Code hooks とは、道具を使う前後などの決まった時に、決めた命令を自動で走らせる仕組みです。
- hook の主な種類(PreToolUse・PostToolUse など)と、それぞれがいつ動くか
- settings.json への hook の書き方と、終わり方(exit コード)の意味
- 当社が PostToolUse の hook 1 つで、すべての道具の出力から資格情報を伏せている形と、その詰まり所
hook はいつ動くか:主な種類の早見表
hook は「どの時に動くか」で種類が分かれます。公式の説明には 30 を超える種類が並んでいますが、道具の前後に効くものと、会話の節目に効くものを押さえれば足ります(公式の hooks の説明・2026-10-22 に見た)。
| 種類 | 動く時 | 止められるか |
|---|---|---|
| PreToolUse | 道具を使う直前 | 止められる(道具を走らせない) |
| PostToolUse | 道具が成功した直後 | 道具はもう走った後。結果に書き足す・差し替えることはできる |
| PostToolUseFailure | 道具が失敗した直後 | 道具はもう走った後 |
| UserPromptSubmit | 人が頼みを送った直後、Claude が読む前 | 止められる |
| SessionStart | 会話を始めた時・再開した時 | ― |
| Stop | Claude が答え終えた時 | ― |
| SubagentStart / SubagentStop | サブエージェントを起こした時 / 終えた時 | ― |
出典: https://code.claude.com/docs/en/hooks(2026-10-22 に見た・種類の一覧と、PostToolUse の差し替えの説明)
MCP の道具も、ふつうの道具と同じく PreToolUse・PostToolUse で拾えます。道具の名前は mcp__<サーバー名>__<道具名> の形で、1 つのサーバーの道具をまとめて拾うときは末尾に .* を付けます(公式の hooks の説明・2026-10-22 に見た)。
settings.json に hook を書く手順
hook は設定の紙に書きます。どの紙に書くかで効く範囲が変わります(公式の hooks の説明・2026-10-22 に見た)。
| 書く紙 | 効く範囲 | 人と共有できるか |
|---|---|---|
ホームの .claude/settings.json | 自分のすべての案件 | できない(その機体だけ) |
案件の .claude/settings.json | その案件だけ | できる(リポジトリに入れられる) |
案件の .claude/settings.local.json | その案件だけ | できない(git に入れない扱い) |
| 組織の管理設定 | 組織全体 | できる(管理者が決める) |
出典: https://code.claude.com/docs/en/hooks(2026-10-22 に見た・設定の置き場所の表)
手順 1: 種類と、拾う道具(matcher)を決める
まず「いつ動かすか」を上の表から選び、次に「どの道具で動かすか」を matcher で決めます。PostToolUse で、すべての道具の後に動かしたいときは、matcher を省くか "*" にします(公式の hooks の説明・2026-10-22 に見た)。
手順 2: settings.json に書く
公式の例の形に揃えると、すべての道具の後に 1 つの命令を走らせる書き方は次のとおりです。
{
"hooks": {
"PostToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "(走らせる命令)"
}
]
}
]
}
}
手順 3: 終わり方(exit コード)を決める
hook の命令がどう終わるかで、Claude Code の動きが変わります(公式の hooks の説明・2026-10-22 に見た)。
| 終わり方 | Claude Code の動き |
|---|---|
| exit 0 | 成功。hook が出した JSON の指示を当てて、そのまま進む |
| exit 2 | 止められる種類では、その動きを止める。PostToolUse では道具はもう走った後なので、エラーの文が Claude に見せられるだけ |
| それ以外 | 止めないエラー。動きはそのまま進む |
出典: https://code.claude.com/docs/en/hooks(2026-10-22 に見た・exit コードの意味)
手順 4: PostToolUse で結果を差し替える
PostToolUse の hook は、updatedToolOutput を返すと、道具の結果を Claude に渡す前に差し替えられます。ただし差し替わるのは Claude が見る物だけで、書いたファイルや送った通信は、hook が動く時にはもう済んでいます。走る前に止めたいときは PreToolUse を使います(公式の hooks の説明・2026-10-22 に見た)。
当社の使い方: PostToolUse の hook 1 つで資格情報を伏せる
当社は Claude Code の PostToolUse の hook を 1 つだけ置き、すべての道具の出力に混ざった資格情報を伏せています。伏せる物は、URL に埋まったパスワード・API の鍵・トークン・JWT・秘密鍵です(社の実測 2026-09-19)。
道具ごとではなく、全部が通る 1 点に置いた理由
道具ごとに伏せ字を入れると、次に増えた道具が素通りします。道具の列挙は必ず腐るので、全部の出力が通る 1 点、つまり PostToolUse に入れました(社の実測 2026-09-19)。
拒否しない・伏せるだけ・止めない
この hook は、道具の結果を拒否しません。伏せるだけです。決めてある動きは次の 3 つです(社の実測 2026-10-22・hook の本文を読んだ)。
| 決め事 | 中身 |
|---|---|
| 値の潰し方 | 値を同じ長さの「*」で潰す |
| 行の扱い | 行は 1 行も消さない |
| 中で何か起きた時 | 何も出さずに exit 0 で終わり、道具を止めない(失敗しても開いたまま=fail-open) |
出典: 社の実測 2026-10-22(hook の本文を読んだ)
長さと行を残すのは、伏せた後も結果の形が崩れず、Claude が「何かがあった所」を読み取れるようにするためです。止めない作りにしたのは、伏せ字の側の不具合で仕事そのものが止まらないようにするためです。
効いたかを対照の試験で確かめた
この hook を 2 台の機体に置き、伏せるべき例と、伏せてはいけない例を並べた対照の試験を通しました(社の実測 2026-09-24)。
| 例の組 | 本数 | 結果 |
|---|---|---|
| 伏せるべき例 | 20 本 | 20 本とも伏せた |
| 伏せてはいけない例 | 22 本 | 22 本とも素通しにした |
| 置いた機体 | 2 台 | どちらでも通った |
出典: 社の実測 2026-09-24(2 台の機体での対照の試験)
MCP の道具の出力にも効きました(社の実測 2026-09-24)。公式の説明どおり、MCP の道具も PostToolUse で拾えることを、手元でも確かめた形です。
当社で起きた 3 つの詰まり
| 起きた事 | わけ | 当社の扱い |
|---|---|---|
| 画面の入力欄で 2 行に折り返された JWT が素通りした | 署名が次の行へ割れていた | 1 行に収まる JWT は伏せられた |
| 会員の名前は伏せられない | hook は秘密の「型」に効く物で、名前には型が無い | 名簿はアプリの中で組み、AI は引き金を引くだけにした |
| 仕上がりを確かめるプレビューの住所まで伏せ字になった | 伏せる側に倒した代わりに起きた | 席が目で確かめられなかった |
出典: 社の実測 2026-09-25(2 行に折り返された JWT)・社の実測 2026-09-24(名簿の組み方)・社の実測 2026-10-21(プレビューの住所)
名前は hook では守れない
名簿を AI の便に組ませると、名前が記録に残ります。hook は秘密の型に効く物なので、名前を守る役には立ちません。そこで名簿はアプリの中で組み、AI は引き金を引くだけにしました(社の実測 2026-09-24)。何を AI に通さないかを先に決める考え方は、任せる前の門 の頁にまとめています。
伏せる側に倒すと、確かめる目も塞がる
当社は、迷う物は伏せる側に倒しています。その代わり、仕上がりを確かめるためのプレビューの住所まで伏せ字になり、席が目で確かめられない回がありました(社の実測 2026-10-21)。伏せ漏れと伏せすぎは、片方を減らすともう片方が増えます。どちらに倒したかを決めて、倒した側で起きる詰まりを記録しておくと、次に直す所が分かります。
Claude Code を AI の席として毎日動かす考え方の全体は AIエージェント の頁に、起動から最初の頼みまでの流れは Claude Code の使い方 に、決まった仕事の手順を持たせる形は Claude Code のスキル の頁にまとめています。
よくある質問
Claude Code hooks の PreToolUse と PostToolUse は何が違いますか?
PreToolUse は道具を使う直前に動き、道具を走らせずに止められます。PostToolUse は道具が成功した直後に動き、道具はもう走った後ですが、Claude に渡す結果を差し替えられます(公式の hooks の説明・2026-10-22 に見た)。
hook はどのファイルに書けばよいですか?
自分のすべての案件に効かせるならホームの .claude/settings.json、1 つの案件だけなら案件の .claude/settings.json に書きます。人と共有したくない設定は .claude/settings.local.json に置けます(公式の hooks の説明・2026-10-22 に見た)。
hook で API の鍵やパスワードを伏せられますか?
伏せられます。当社は PostToolUse の hook を 1 つだけ置き、すべての道具の出力から URL に埋まったパスワード・API の鍵・トークン・JWT・秘密鍵を伏せています(社の実測 2026-09-19)。ただし、2 行に折り返された JWT は素通りしたので、形が崩れた秘密には効かないことがあります(社の実測 2026-09-25)。
hook が失敗したら、Claude Code は止まりますか?
exit 2 以外の失敗では、動きはそのまま進みます(公式の hooks の説明・2026-10-22 に見た)。当社の伏せ字の hook は、中で何が起きても何も出さずに exit 0 で終わる作りにして、道具を止めないようにしています(社の実測 2026-10-22)。
MCP の道具の出力にも hook は効きますか?
効きます。MCP の道具は mcp__<サーバー名>__<道具名> という名前で、ふつうの道具と同じく PostToolUse で拾えます(公式の hooks の説明・2026-10-22 に見た)。当社の伏せ字の hook も MCP の道具の出力に効きました(社の実測 2026-09-24)。
出典
- Claude Code 公式の hooks の説明 https://code.claude.com/docs/en/hooks(2026-10-22 に見た・hook の種類・設定の置き場所・settings.json の書き方・exit コード・PostToolUse の差し替え・MCP の道具の拾い方)
- 社の実測 2026-09-19(PostToolUse の hook 1 つで資格情報を伏せる形と、1 点に置いた理由)
- 社の実測 2026-09-24(2 台の機体での対照の試験・MCP の道具の出力・名簿の組み方)
- 社の実測 2026-09-25(2 行に折り返された JWT の素通り)
- 社の実測 2026-10-21(プレビューの住所の伏せ字)
- 社の実測 2026-10-22(hook の本文を読んだ・伏せ方と fail-open)