マギのクロゼミ
応用 #Claude#Hooks 公開 2026.04.28

Claude Hooks とは何か。タイミングで動く拡張のしくみ

Claude Code の Hooks(フック)は、「特定のイベントが起きたときに、決まったシェルコマンドを自動で走らせる」しくみです。Skills が「Claude を賢くする」、MCP が「Claude を外に繋ぐ」のに対し、Hooks は「タイミングで動かす」担当——ファイル保存後の自動 lint や、危険な操作の前の確認強化、ログ取得などに効きます。

はじめに

Step 3 の3つ目の柱、Hooks(フック) に入ります。Skills と MCP に続く、Claude Code の3大拡張機構の最後です。

ここまでの流れを整理しておくと、

拡張機構担当
SkillsClaude を賢くする(専門知識を渡す)LP コーディング規約の Skill
MCPClaude を外の世界に繋ぐDrive・Gmail・社内 DB の接続
Hooksタイミングで動かす(イベント駆動の自動化)ファイル保存後に自動 lint、危険操作の前に確認

Hooks の正体は 「特定のイベントが起きたときに、決まったシェルコマンドを自動で走らせる」 しくみです。Web 制作でいうと WordPress のアクションフック にとても近い発想——「投稿が保存されたとき」「ユーザーがログインしたとき」に決まった処理を挟むあの仕組みを、Claude Code 側でも使えるようにしたものだと思ってください。

本記事では、

  1. Hooks とは何か(動く仕組み)
  2. なぜ生まれたのか(解決している問題)
  3. どんなイベントで発火するのか(イベントの全体像)
  4. Skills や SubAgent との違い
  5. 何に使うか(典型的な用途)
  6. Claude が実行するのではなく harness が実行する という重要なポイント

の順で、概念をいちから整理します。具体的な書き方は次の記事「Claude Hooks の基本の書き方」で扱います。

Hooks の正体

Hooks は、~/.claude/settings.json という設定ファイルに「このイベントが起きたら、このコマンドを走らせて」と書いておくだけ で動きます。プログラミングは不要、書くのは JSON だけです。

たとえば「ファイルを編集するたびに、その変更を git diff で表示する」という Hook はこう書けます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "git diff --stat HEAD" }
        ]
      }
    ]
  }
}

これだけで、Claude が EditWrite ツールでファイルを書き換えるたびに、自動で git diff --stat HEAD が走り、結果が会話に表示されるようになります。シェルコマンドが書ければ、Hook は書ける という素朴さです。

なぜ Hooks が必要だったか

Claude Code を使い込んでいると、「毎回同じ後処理を頼んでいる自分」に気づきます。

  • ファイルを書き換えてもらうたびに、「npm run lint 走らせて」と頼んでいる
  • 大きな修正のあとに、毎回「コミットメッセージ案を3つ出して」と頼んでいる
  • rm 系コマンドを実行する前に、「念のため一覧を見せて」と頼んでいる

これを毎回口頭で頼むのは時間の無駄です。Skills に書く方法もありますが、Skills は 「いつ動くか」を Claude の判断に委ねる ので、確実性に欠けます。

Hooks は、この問題を 「特定のイベントが起きたら、必ず・確実に・人間の判断を経ずに、決まったコマンドを走らせる」 という発想で解いています。

拡張機構発火の判断確実性
SkillsClaude が「使うべき」と判断したとき◯(曖昧な依頼だと動かないことがある)
Hooks設定したイベントが起きたら 必ず◎(条件が合えば100%発火)

確実性が欲しい」「人間の判断を経ずに動かしたい」が、Hooks を選ぶ理由になります。

Claude が実行するのではない、harness が実行する

ここがいちばん大事なポイントです。Hooks のコマンドは、Claude(AI)ではなく、Claude Code 本体(harness)が実行 します。

ふだん Claude にコマンドを頼むと、Claude は「実行していいですか?」という確認を出してから動きます。これは Claude が AI として判断している ためです。

一方 Hooks は、

[イベント発生]

[harness が settings.json を見る]

[条件が合えば、harness がコマンドを直接実行]

という流れで動きます。ここに Claude の判断は介在しません。「設定ファイルに書いてあるから走らせる」というだけの、機械的な動きです。

これは2つの意味で重要です。

メリット:確実に動く

Claude の気まぐれで「今回は実行するのをやめておこう」と判断されることがありません。決めたことは決めたとおりに動く という確実性が出ます。

デメリット:誤った設定がそのまま実行される

逆に、間違ったコマンドを書いてしまうと、それも機械的にそのまま実行されます。Claude は止めてくれません。「ファイル編集後に rm -rf / を走らせる」と書いてしまえば、それが実行されます(極端な例ですが)。

Hooks を書くときは、「これは AI が判断するのではなく、自分が書いたコマンドが直に走る」 という意識を持つのが、何より大事です。

どんなイベントで発火するか

Hooks が動けるイベント(以下、イベント種別)はいくつか用意されています。代表的なものは、

イベント種別いつ発火するか典型的な用途
PreToolUseClaude がツール(Edit、Bash 等)を使う 直前危険なコマンドのブロック、確認の追加
PostToolUseClaude がツールを使った 直後編集後の自動 lint、git diff 表示
UserPromptSubmitユーザーがプロンプトを送信した直後プロンプトのログ取得、定型文の挿入
StopClaude が応答を終えたとき通知音、Slack 通知
SubagentStopサブエージェントが終了したときサブエージェントのログ取得
PreCompact会話の自動圧縮(compact)が走る前圧縮前のスナップショット保存

このうち最初に覚えるべきは PostToolUsePreToolUse の2つです。「ツールを使う前後で何かしたい」というのが、いちばん多い使いどころです。

イベントの完全な一覧と詳細な挙動は時期によって増減するので、本記事では「代表的なものはこれ」という認識を持っていただければ十分です。

matcher で対象ツールを絞る

各イベントの中で、「どのツールが使われたとき」に発火するかmatcher で指定できます。

"PostToolUse": [
  {
    "matcher": "Edit|Write",        // Edit か Write のとき
    "hooks": [...]
  },
  {
    "matcher": "Bash",              // Bash のとき
    "hooks": [...]
  }
]

matcher には正規表現が書けます。"Edit|Write" で「Edit と Write の両方」、""(空文字)で「全ツール」を指す、といった書き分けが可能です。「全部のツールで動かすと重くなる」 ので、対象を絞るのが基本になります。

Skills や SubAgent との使い分け

ここで、Step 3 の他の拡張機構との使い分けを整理しておきます。

拡張「何をしたいか」
SkillsClaude に 新しい知識 を持たせたい「LP のコーディング規約を Claude に覚えさせたい」
MCPClaude を 外の世界に繋ぎたい「Drive 上のファイルを読ませたい」
Hooks特定のタイミングで何かを自動実行したい「ファイル編集後に自動で lint を走らせたい」
SubAgent重い仕事を別働隊に任せたい「コードベースの調査を別 Claude にやらせたい」

迷ったときの判断軸は、

  • Claude に〜してほしい」(知識・接続・判断が必要)→ Skills か MCP
  • 特定のタイミングで〜してほしい」(機械的に動かしたい)→ Hooks
  • メイン会話を汚さず別に動かしたい」→ SubAgent

という分け方になります。Hooks は 「Claude の判断をスキップして、機械的に動かしたい」 ときの選択肢、と覚えると間違えにくいです。

Hooks が活きる典型シーン

Hooks の威力が出るシーンを、いくつか具体的に紹介しておきます。

シーン1. ファイル編集後の自動チェック

PostToolUse(Edit) で、編集対象が .ts だったら tsc --noEmit を、.css だったら stylelint を走らせる、というような 自動品質チェック。Claude が間違えた変更を入れたとき、ターミナルに「型エラーが出た」とすぐ出るので、その場で直してもらえます。

シーン2. 危険操作のブロック

PreToolUse(Bash) で、コマンド内容に rm -rfgit push --force が含まれていたら そのコマンドを止める、という保険。Claude の判断ミスを harness 側で止められるので、強力なセーフティネットになります。

シーン3. ログ取得

UserPromptSubmit で、自分が打ったプロンプトをファイルに追記する プロンプトログ。あとから「あの依頼、なんて書いたっけ」を遡れるようになるので、自分の質問パターンを振り返るのに使えます。

シーン4. 通知

Stop で、Claude が長い応答を終えたタイミングで macOS の通知センターに通知 を出す。長く走らせて別作業をしているときに、終わったことを物理的に知れます。

osascript -e 'display notification "Claude の応答が終わりました" with title "Claude Code"'

このようなコマンドを Stop フックに仕込めば、それだけで動きます。

Hooks の3つのスコープ

Hooks も Skills と同じく、置き場所で適用範囲が変わります

置き場所適用範囲
~/.claude/settings.jsonあなたの全プロジェクト
<案件>/.claude/settings.jsonその案件フォルダの中だけ
<案件>/.claude/settings.local.jsonその案件、かつあなたのマシンだけ(git に上げない)

「全プロジェクトで使いたい便利フックは User 設定、案件固有のチェックは Project 設定、自分のマシンでだけ動かしたいデバッグ用は Local 設定」 という分け方が自然です。

settings.local.jsonGit にコミットされない ことが多い(.gitignore で除外する運用)ので、他人と共有したくない自分専用の設定 に向いています。

セキュリティの基本

最後に、Hooks のセキュリティ意識について。

Hooks は 任意のシェルコマンドを harness が機械的に実行する 仕組みです。これを忘れると事故ります。

観点何に気をつけるか
自分で書くときコマンドのタイポが致命傷になる。テスト用フォルダで先に動作確認
他人が書いた Hook を取り込むとき(プラグイン経由など)プラグインに含まれる Hook の中身を 必ず 一度読む
環境変数や入力値を使うときクォーティングを意識する。ユーザー入力をシェルに直接渡さない

WordPress のアクションフックでも「不用意な書き方が脆弱性につながる」のと同じです。「これは harness が直に実行する」 という意識さえ持てば、ほとんどの事故は避けられます。

触り始めるときの順序

Hooks はパワフルな分、最初の一歩で 慎重に行く のがおすすめです。慣れるまでの順序は、

  1. PostToolUse で「結果を表示するだけ」の Hook から始める(読むだけは安全)
  2. 慣れたら PreToolUse でブロック系の Hook を試す
  3. 最後に 副作用のある Hook(ファイル書き込み、外部通知)を仕込む

の順が無理がありません。最初から「rm を全部止める Hook」を書こうとすると、思わぬところでブロックされて作業が止まる、という事態が起きます。

まとめ

Hooks の要点を整理します。

  1. Hooks は「特定のイベントで自動的にシェルコマンドを走らせる」しくみ
  2. 書き場所は ~/.claude/settings.json(または案件配下)
  3. JSON だけで書ける:プログラミング不要
  4. Claude ではなく harness が実行する:機械的に動く
  5. 代表的なイベントPreToolUse / PostToolUse / UserPromptSubmit / Stop ほか
  6. matcher で対象ツールを絞る:正規表現が使える
  7. 使いどころ:自動チェック/危険操作のブロック/ログ取得/通知
  8. 3つのスコープ:User / Project / Local
  9. セキュリティ:書き間違いが直に走る/他人の Hook は中身を読む
  10. 始めるときは「読むだけ」から:副作用のある Hook はあとで

Hooks の概念がつかめたら、次の記事「Claude Hooks の基本の書き方」で、settings.json の書き方を 最小例から動くまで いちから扱います。PostToolUse(Edit) で git diff を表示する Hook を、3分で書いて動かすところまで進みます。続けて読むと、Hooks が「設定ファイルに書くだけで動く」素朴さが体感できます。

WordPressを実際に動かしてきたサーバー:ロリポップ

Claude Code でWordPressサイトを組み立てるとき、最初に置く先として無理のないレンタルサーバー。月数百円から始められ、WordPressの自動インストールにも対応しています。設定で詰まりがちな初期段階の時間をかなり減らせます。

🌱
ロリポップ!レンタルサーバー
GMOペパボ運営 / 月額¥220〜
ロリポップを見る →
Roadmap 学習マップでこの記事の位置を見る
Step 1 →