Claude Code Hooksでできる自動化10選:通知・テスト実行・承認制御・安全対策まで解説

Claude Code Hooksで通知、テスト実行、安全対策を自動化する開発ワークフローのイラスト AIツール
スポンサーリンク

Claude Code Hooksでできる自動化10選:通知・テスト実行・承認制御・安全対策まで解説

Claude Code Hooks 自動化を実務で使いたい方に向けて、通知、フォーマット、危険コマンドのブロック、テスト確認、Subagent監視まで、すぐ試せる設定例つきで解説します。

Claude Code Hooks 自動化 安全対策 設定例

Claude Code Hooks 自動化は、Claude Codeを本格的に使い始めた人ほど早めに押さえておきたい機能です。CLAUDE.mdにルールを書くだけでも作業品質は上がりますが、「必ずPrettierを実行する」「危険なコマンドを止める」「テスト未実行なら終了させない」といった処理は、Hooksで決定的に実行するほうが安定します。

この記事では、既存の「Hooksとは?」という基本説明から一歩進めて、実務で使いやすい自動化パターンを10個に絞って紹介します。個人開発でもチーム開発でも使いやすいように、設定例と注意点をセットでまとめます。

この記事でわかること

  • Claude Code Hooksで何を自動化できるか
  • CLAUDE.md、Auto Mode、Hooksの役割の違い
  • 通知・整形・テスト・安全対策の設定例
  • PreToolUse、PostToolUse、Stop、Notificationの使いどころ
  • チーム開発でHooksを導入するときの注意点

Claude Code Hooksとは?自動化の基本

Claude Code Hooksとは、Claude Codeの処理タイミングに合わせて、ユーザー定義のコマンドやHTTPリクエスト、MCPツール、プロンプト評価、エージェント評価を実行できる仕組みです。

たとえば、Claudeがファイルを編集した後にフォーマッタを走らせる、ツール実行前に危険なコマンドを検査する、作業終了前にテスト実行を確認する、Claudeが入力待ちになったら通知する、といった使い方ができます。

イベント 使いどころ
SessionStart セッション開始時に環境情報や注意事項を注入する
PreToolUse コマンド実行やファイル編集の前に安全チェックする
PostToolUse ファイル編集後にフォーマットやログ記録を行う
Notification Claudeが入力待ち・承認待ちになったときに通知する
Stop Claudeが作業終了する前にテストや差分確認を要求する
SubagentStop サブエージェント完了時に結果を要約・検査する

CLAUDE.md・Auto Mode・Hooksの違い

Claude Codeを自動化するときに混同しやすいのが、CLAUDE.md、Auto Mode、Hooksの違いです。ざっくり整理すると、以下のようになります。

機能 役割 向いていること
CLAUDE.md Claudeに読ませるプロジェクトルール 方針、命名規則、作業手順、レビュー観点の共有
Auto Mode 承認操作を減らす仕組み 安全な範囲のコマンドや編集をスムーズに進める
Hooks 特定タイミングで必ず実行する自動化 整形、検査、通知、危険操作ブロック、終了条件チェック

CLAUDE.mdは「Claudeに守ってほしい指示」です。一方、Hooksは「実際に必ず動く処理」です。たとえば「テストを実行してから完了すること」とCLAUDE.mdに書いても、状況によってClaudeが忘れる可能性があります。しかしStop Hookで検査すれば、作業終了時に決定的なチェックを入れられます。

既存の基礎記事として、Claude Code Hooksとは?設定方法と実用例7選や、CLAUDE.mdの書き方完全ガイドも参考になります。

Hooks自動化1:Claudeが入力待ちになったら通知する

最初に入れるなら、通知Hookがおすすめです。Claude Codeは長めの作業を任せることが多いため、完了や承認待ちに気づかず時間が空いてしまうことがあります。Notification Hookを使うと、Claudeが入力待ちになったタイミングでデスクトップ通知を出せます。

macOS通知の設定例

{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code is waiting for input\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

地味ですが効果は大きいです。Claudeにテスト修正や調査を任せている間に別作業をしていても、入力待ちになったタイミングで戻れます。

Hooks自動化2:ファイル編集後にPrettierを自動実行する

Claude Codeでフロントエンドを触る場合、ファイル編集後のフォーマット忘れが起きがちです。PostToolUse Hookで編集後にPrettierを走らせると、整形漏れを減らせます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "npm run format -- --write"
          }
        ]
      }
    ]
  }
}

ただし、大規模プロジェクトで毎回全体フォーマットを走らせると遅くなります。最初は対象ファイルだけ整形するスクリプトを用意するか、保存後の整形対象を限定するのがおすすめです。

Hooks自動化3:危険なコマンドを実行前にブロックする

PreToolUse Hookは、Claudeがツールを使う前に検査できるため、安全対策に向いています。特に `rm -rf`、`git reset –hard`、`git push –force`、本番デプロイ系コマンドは、無条件に許可しないほうが安全です。

危険コマンドを止める考え方

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python .claude/hooks/block_dangerous_commands.py"
          }
        ]
      }
    ]
  }
}

Hook側のスクリプトでは、stdinで渡されるJSONを読み取り、コマンド文字列に危険なパターンが含まれていないか確認します。危険ならブロックし、Claudeに理由を返します。

# .claude/hooks/block_dangerous_commands.py
import json
import sys

data = json.load(sys.stdin)
command = data.get("tool_input", {}).get("command", "")

blocked = [
    "rm -rf",
    "git reset --hard",
    "git push --force",
    "npm publish",
    "terraform apply",
]

for pattern in blocked:
    if pattern in command:
        print(f"Blocked dangerous command: {pattern}", file=sys.stderr)
        sys.exit(2)

sys.exit(0)

自動承認を使う場合でも、危険操作だけはHookで止める設計にしておくと安心です。Auto ModeとHooksは競合するものではなく、組み合わせて使うことで実用性が上がります。

Hooks自動化4:保護ファイルへの編集を止める

本番設定、秘密鍵、環境変数、マイグレーション、ロックファイルなど、AIに勝手に触ってほしくないファイルがあります。PreToolUse Hookで対象パスを検査すれば、編集前に止められます。

# .claude/hooks/protect_files.py
import json
import sys

data = json.load(sys.stdin)
tool_input = data.get("tool_input", {})
path = tool_input.get("file_path") or tool_input.get("path") or ""

protected = [
    ".env",
    ".env.production",
    "package-lock.json",
    "pnpm-lock.yaml",
    "yarn.lock",
    "terraform.tfstate",
]

if any(path.endswith(name) for name in protected):
    print(f"Protected file cannot be edited without explicit approval: {path}", file=sys.stderr)
    sys.exit(2)

sys.exit(0)

チーム開発では、保護ファイルの一覧をリポジトリで共有しておくと便利です。特にインフラ設定や認証情報を扱うプロジェクトでは、最初に入れておきたいHookです。

Hooks自動化5:作業終了前にテスト実行を確認する

Stop Hookは、Claudeが「作業完了」と判断する直前に実行できます。ここでテスト実行や差分確認を促すと、「コードは変えたがテストしていない」という状態を減らせます。

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python .claude/hooks/require_tests_before_stop.py"
          }
        ]
      }
    ]
  }
}

簡易的には、直近のセッションログやプロジェクト内のマーカーファイルを使って「テスト実行済みか」を判定できます。厳密にやるなら、変更ファイルに応じたテストコマンドを自動で選ぶ仕組みを作るとよいです。

Stop Hookは強くしすぎない

毎回必ず全テストを要求すると、軽い調査やドキュメント修正でも作業が重くなります。最初は「コードファイルが変更されたときだけ」「テストが存在するプロジェクトだけ」のように条件を絞るのがおすすめです。

Hooks自動化6:Permission Requestを安全に扱う

Permission Request Hookを使うと、承認が必要な操作に対して追加の判断を入れられます。たとえば「読み取り系は許可しやすいが、外部送信や破壊的操作は必ず確認する」といった運用ができます。

個人開発では面倒に感じるかもしれませんが、チーム開発ではかなり重要です。Claude Codeが便利になるほど、何を自動承認し、何を人間確認に残すかの設計が品質と安全性に直結します。

  • 許可しやすい操作: `ls`, `cat`, `rg`, テスト実行、lint実行
  • 確認したい操作: `npm install`, `git commit`, `git push`, 外部API呼び出し
  • 原則止めたい操作: `rm -rf`, `git reset –hard`, 本番デプロイ、秘密情報の送信

Auto Modeを使う場合は、Claude Code Auto Modeとは?の記事と合わせて、許可範囲を整理しておくとよいでしょう。

Hooks自動化7:セッション開始時に環境情報を注入する

SessionStart Hookを使うと、セッション開始時にプロジェクト固有の情報を渡せます。たとえば、現在のブランチ、Node.jsのバージョン、使うべきテストコマンド、注意すべき作業ルールなどです。

CLAUDE.mdに静的なルールを書くのに対して、SessionStart Hookでは動的な情報を渡せます。たとえば、作業ディレクトリやブランチ名によって注意事項を変えたい場合に便利です。

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/session_context.sh"
          }
        ]
      }
    ]
  }
}

このHookで現在のGitブランチやテストコマンドを出力し、Claudeに追加コンテキストとして渡せば、毎回プロンプトで説明する手間を減らせます。

Hooks自動化8:Subagent完了時に結果を検査する

Claude CodeでAgentsやSubagentsを使う場合、複数の作業が並列で進みます。SubagentStop Hookを使うと、サブエージェントが完了したタイミングで結果を検査したり、要約したりできます。

たとえば、サブエージェントが「修正完了」と報告したときに、変更ファイル、実行したテスト、残タスクをチェックするHookを入れると、メインの作業者が結果を統合しやすくなります。

  • サブエージェントの最終メッセージを確認する
  • 変更ファイル一覧を記録する
  • テスト実行の有無を確認する
  • 失敗や未完了タスクがあれば追加対応を促す

複数AIで作業する場合は、Claude Code Agentsの使い方とHooksを組み合わせると、作業品質を管理しやすくなります。

Hooks自動化9:MCPやHTTP Hooksと連携する

Hooksはローカルコマンドだけでなく、HTTPやMCPツールとも連携できます。たとえば、Claudeの作業完了をSlackへ通知する、社内APIへ監査ログを送る、MCPサーバー経由でチケット情報を取得する、といった使い方です。

特にチーム開発では、以下のような連携が実用的です。

  • Stop時にSlackへ作業完了通知を送る
  • PreToolUseで社内ポリシーAPIに問い合わせる
  • PostToolUseで変更ログを監査システムへ送る
  • SessionStartでチケット番号から要件を取得する

ただし、外部送信を伴うHookは情報漏えいリスクがあります。送るデータを最小限にし、秘密情報やソースコード全体を不用意に送らない設計にしましょう。

Hooks自動化10:チーム向けの安全テンプレートを作る

最終的におすすめなのは、Hooksを個人の設定で終わらせず、チーム向けテンプレートとして整備することです。Claude Codeをチームで使うなら、全員が同じ安全基準で作業できるようにしたほうが運用しやすくなります。

チーム向けテンプレートに入れたいもの

  • 危険コマンドのブロック
  • 保護ファイルの編集禁止
  • コード変更後のlint / format
  • 作業終了前のテスト確認
  • Claudeが入力待ちになったときの通知
  • サブエージェント完了時の結果確認
  • ログや監査情報の保存方針

チームで使う場合は、Hooksを強くしすぎると開発体験が悪くなる点にも注意が必要です。最初は「壊すと困る操作を止める」「通知する」「整形する」程度から始め、徐々にテストや監査へ広げるのが現実的です。

おすすめの導入順

初めてHooksを導入するなら、次の順番がおすすめです。

  1. Notification Hookで入力待ちを通知する
  2. PreToolUseで危険コマンドをブロックする
  3. 保護ファイルへの編集を止める
  4. PostToolUseでformat / lintを実行する
  5. Stop Hookでテスト実行を確認する
  6. SubagentStopで複数エージェント作業を管理する
  7. HTTP / MCP連携でチーム運用へ広げる

Hooksは強力ですが、最初から全部入れる必要はありません。まずは「通知」と「危険操作ブロック」だけでも効果があります。

まとめ:Claude Code Hooksは自動化と安全対策の中心になる

Claude Code Hooksは、Claude Codeを単なるAIコーディング補助から、実務で使える自動化環境へ引き上げる機能です。CLAUDE.mdで方針を伝え、Auto Modeで承認の手間を減らし、Hooksで必ず守るべき処理を自動化する。この3つを組み合わせると、開発速度と安全性を両立しやすくなります。

特に伸びているClaude Code自動化の文脈では、Hooksは今後さらに重要になります。まずは通知、危険コマンドのブロック、テスト確認から導入し、自分の開発スタイルに合わせて少しずつ育てていくのがおすすめです。

タイトルとURLをコピーしました