---
title: Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド
description: Claude Code Hooksとは、AIのツール実行前後のタイミングでシェルコマンドを自動実行する仕組みです。全フックポイントの使い分け、settings.jsonでの定義方法、破壊的コマンドのブロックや自動lint・Slack通知の実装パターンをコード例とともに解説します。
image: https://start-link.jp/hubfs/blog/screenshots/generated/gen_claude-code-hooks-automation_v2.png
---

[![StartLink](https://start-link.jp/hs-fs/hubfs/logo/%E6%9C%80%E7%B5%82Start%20Link%20(500%20x%20150%20px)%20(%E8%83%8C%E6%99%AF%E3%81%82%E3%82%8A).png?width=130&height=39&name=%E6%9C%80%E7%B5%82Start%20Link%20(500%20x%20150%20px)%20(%E8%83%8C%E6%99%AF%E3%81%82%E3%82%8A).png "StartLink")](https://start-link.jp)

- [会社情報About](https://start-link.jp/about)
- [サービスService](https://start-link.jp/service)
- [プロダクトProducts](https://start-link.jp/sync)
- [YoutubeYoutube](https://start-link.jp/about/sns)
- [ブログBlog](https://start-link.jp/hubspot-ai)
- [業界別ガイドIndustry guides](https://start-link.jp/case)
- [採用情報Recruit](https://start-link.jp/recruit)

[資料DL](https://start-link.jp/download/service) [無料相談 →](https://start-link.jp/contact)

[会社情報](https://start-link.jp/about) [サービス](https://start-link.jp/service) [プロダクト](https://start-link.jp/sync) [Youtube](https://start-link.jp/about/sns) [ブログ](https://start-link.jp/hubspot-ai) [業界別ガイド](https://start-link.jp/case) [採用情報](https://start-link.jp/recruit)

[資料ダウンロード](https://start-link.jp/download/service) [無料相談 →](https://start-link.jp/contact)

- [トップ](https://start-link.jp)
- [会社情報](https://start-link.jp/about)
- [サービス](https://start-link.jp/service)
- [Youtube](https://start-link.jp/about/sns)
- [ブログ](https://start-link.jp/hubspot-ai)
- [Contact](https://start-link.jp/contact)
- [個人情報保護方針](https://start-link.jp/privacy-policy)
- [個人情報取り扱い規定](https://start-link.jp/personal-information-processing-agreement)

[ホーム](https://start-link.jp) › [ブログ](https://start-link.jp/hubspot-ai) ›[AI活用](https://start-link.jp/hubspot-ai/ai) ›[Claude Code実践](https://start-link.jp/hubspot-ai/ai/claude-code-practice) ›Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド

# Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド

- 2026年3月14日
- 最終更新: 2026年10月24日

![](https://start-link.jp/hubfs/blog/screenshots/generated/gen_claude-code-hooks-automation_v2.png)

この記事の結論

Claude Code Hooksを使えば、lintの自動実行・テストの自動起動・Slack通知連携など、AIの操作ライフサイクルに合わせた自動化が実現できます。LLMの承認を介さず決定論的に動くため、セキュリティゲートや品質チェックの仕組み化に適した機能です。

ブログ目次

もっと見る ▼

**Claude Code Hooksを使えば、lintの自動実行・テストの自動起動・Slack通知連携など、AIの操作ライフサイクルに合わせた自動化が実現できます。LLMの承認を介さず決定論的に動くため、セキュリティゲートや品質チェックの仕組み化に適した機能です。**

——「ファイルを保存するたびにlintを走らせたい」「Bashコマンド実行前にセキュリティチェックを挟みたい」「長時間タスクの完了をSlackに知らせたい」。Claude Codeを使い込んでいくと、こうした要望がよく出てきます。そんなときに威力を発揮するのが、Claude Code Hooksです。詳しくは「[Claude Codeでチーム開発を効率化する方法](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-team-development)」でも解説しています。

次の図は、本記事で扱うClaude Code Hooksの主なイベント（SessionStart・UserPromptSubmit・PreToolUse・PostToolUse・Notification・Stop）を、発火するタイミングと主な用途とあわせて整理したものです。

![Claude Code Hooksの主なイベントと発火タイミングを整理した図](https://start-link.jp/hubfs/blog/screenshots/generated/gen_claude-code-hooks-automation_v2.png)

本記事は2026年10月時点の情報です。

Claude Code Hooksとは、Claude Codeのライフサイクルの特定のタイミングで、ユーザー定義の処理（シェルコマンドが基本）を自動実行できる仕組みです。Gitのpre-commitフックに馴染みがある方なら、その概念をClaude Codeの操作全体に拡張したものだとイメージしてください。LLMの承認を介さず決定論的に実行されるため、セキュリティゲートや品質チェックの自動化に適しています。[AI活用完全ガイド](https://start-link.jp/hubspot-ai/ai)で、AI活用の全体像を把握できます。

出典: [Claude Code公式ドキュメント: Hooks](https://code.claude.com/docs/en/hooks)（2026年10月時点で確認）

本記事では、Claude Code Hooksの主要なフックポイントを体系的に整理し、lint自動実行・テスト自動起動・Slack通知連携などの実装パターンを、実際の設定ファイル（`.claude/settings.json`）のコード例とともに解説します。企業導入時のセキュリティ設計については「[Claude Codeの企業導入セキュリティガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-enterprise-security)」でも解説しています。

## この記事でわかること

この記事は、Claude Codeを使った開発の自動化を進めたい方に向けて、Hooksの仕組みから設定方法、実務で使える実装パターンまでを体系的に整理しています。

- **Hooksの基本とGitフック・CI/CDとの違い** — 「Gitの操作」ではなく「AIエージェントの操作」をトリガーに動く自動化レイヤーとしての位置づけを整理します。
- **主要フックポイントの役割と使い分け** — PreToolUse・PostToolUse・Notification・Stop・SubagentStopなど、よく使うイベントの発火タイミングと主な用途を表で比較します。
- **settings.jsonでのフック定義の書き方** — マッチャーによる条件分岐や、標準入力で渡されるJSONの読み方、終了コードの意味をコード例で確認できます。
- **実務で使える実装パターン10選** — 破壊的コマンドのブロック、保存時の自動lint、テスト自動実行、Slack通知などの設定例を紹介します。
- **HubSpot開発・CRM連携での活用シーン** — APIレートリミットの監視やプロパティ変更の監査など、HubSpotエコシステムでの使いどころを解説します。

Claude Codeを使い始めたエンジニアの方から、チームへの導入を検討している開発責任者・DX担当者の方に向けて書いています。最後まで読むと、自社の開発フローに合ったフック設計を考え、`settings.json`に実装できるようになります。

## Claude Code Hooksとは

開発の自動化には古くからGitフックやCI/CDがありますが、Claude Code Hooksはトリガーとなる対象が異なります。まず全体の中での位置づけと、動作の流れを整理します。

### Gitフック・CI/CDとの違い

Gitフック（pre-commit、pre-push）やCI/CDパイプライン（GitHub Actions、CircleCI）は、「Gitの操作」や「リモートへの反映」をトリガーとして処理を走らせます。詳しくは「[Claude Code × CI/CD](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-cicd-automation)」で解説しています。

一方、Claude Code Hooksが発火するのは、AIがファイルを書き込もうとした瞬間や、Bashコマンドを実行しようとした瞬間です。

| 比較軸 | Gitフック | CI/CD | Claude Code Hooks |
| --- | --- | --- | --- |
| トリガー | git commit / push | PR作成 / merge | AIのツール呼び出し / 応答完了 |
| 実行タイミング | コミット前後 | リモートリポジトリ側 | ローカルのClaude Code実行中 |
| 設定場所 | `.git/hooks/` | `.github/workflows/` | `.claude/settings.json` |
| 制御対象 | Gitの操作 | ビルド・デプロイ | AIエージェントの全操作 |
| 承認フロー | なし（自動実行） | なし（自動実行） | なし（LLM非介在で自動実行） |

つまりHooksは、開発フロー全体（実装→検証→コミット→デプロイ）の中では「実装〜検証の最中」を守る層であり、CI/CDを置き換えるものではなく補完するものだと捉えてください。

### Hooksの動作の流れ

動作原理はシンプルです。

1. Claude Codeが特定のアクション（ファイル書き込み、Bash実行など）を行おうとする
2. そのアクションに対応するフックポイントが発火する
3. 設定されたマッチャー条件を評価する
4. 条件に合致すれば、定義されたフック（コマンドなど）を実行する
5. フックの結果（終了コード・出力）に応じて、Claude Codeの後続動作が決まる

フックコマンドには、イベントの内容（使用ツール名、ツール入力、作業ディレクトリなど）が**標準入力のJSON**で渡されます。`jq`などで読み取れば、コンテキストに応じた条件分岐が可能です。本記事のコード例は、すべてこの標準入力のJSONを読む形で書いています。

### LLMを介さない「決定論的な自動化」がポイント

ここが設計上のポイントですが、`command`型のClaude Code HooksはLLMの判断を経由しません。設定した条件に合致すれば、シェルコマンドが決定論的に実行されます。AIが「今回は実行しなくても大丈夫そう」と勝手に判断してスキップすることがないのです。セキュリティチェックや必須テストのように「漏れなく実行したい処理」を担保したい場面で、これは重要な特性です。

## 主要フックポイントの一覧と使い分け

Claude Code Hooksには、発火タイミングの異なるフックポイント（イベント）が用意されています。2026年10月時点の公式ドキュメントでは、ツール実行まわりだけでなく、セッションの開始・終了、プロンプト送信、権限確認、サブエージェント、コンテキスト圧縮、worktreeの作成・削除など30種類を超えるイベントが掲載されています。数は更新のたびに増えるため、全体は[公式のHooksリファレンス](https://code.claude.com/docs/en/hooks)で確認してください。ここでは、最初に押さえておきたい主要なイベントに絞って整理します。「どのタイミングで何を実行したいか」を先に決めておくと、設定がスムーズに進みます。

| フックポイント | 発火タイミング | 主な用途 |
| --- | --- | --- |
| PreToolUse | ツール実行の直前 | 実行ブロック、入力バリデーション、セキュリティゲート |
| PostToolUse | ツールが成功した直後 | 自動テスト、lint実行、ログ記録 |
| PostToolUseFailure | ツール実行が失敗したとき | 失敗内容の記録、通知 |
| PermissionRequest | 権限の確認が出るとき | 許可・拒否の自動判断の補助 |
| UserPromptSubmit | ユーザーがプロンプトを送信したとき | 入力の検査、追加情報の付与 |
| SessionStart / SessionEnd | セッションの開始時・終了時 | 環境の準備、後片付け |
| Notification | Claude Codeが通知を送信するとき | Slack通知、メール通知、外部サービス連携 |
| Stop | Claude Codeが応答を完了したとき | 最終チェック、サマリー生成、後処理 |
| SubagentStart / SubagentStop | サブエージェントの開始時・完了時 | サブタスクの品質検証、結果集約 |

イベントの種類は増え続けているため、設計時に最新の一覧を確認する習慣をつけておくと安心です。

### PreToolUse — 実行前にゲートを設ける

> PreToolUseは、Claude Codeがツール（Write、Bash、Editなど）を実行する直前に発火します。コマンド型のフックが終了コード2で終了すると、そのツール実行はブロックされます。

実行前にゲートを挟めるため、実務での出番が特に多いフックポイントです。本番環境への誤操作防止、禁止コマンドの実行ブロック、特定ディレクトリへの書き込み制限など、「やってはいけないこと」を仕組みで防げます。

### PostToolUse — 実行後に自動チェックを走らせる

PostToolUseは、ツールが成功した直後に発火します（失敗したときは PostToolUseFailure が発火します）。ファイル書き込みの後にlintを実行する、Bashコマンド実行後にテストを走らせるといった「事後チェック」に使います。

PostToolUseでは、フックが終了コード2で終了すると、標準エラー出力（stderr）の内容がClaude Codeに渡されます（ツールは実行済みなので取り消しはできません）。lintエラーの内容をstderrに出して終了コード2で返せば、Claude Codeがそれを認識して自動修正に取り掛かる、という流れを作れます。

### Notification — 通知を外部に飛ばす

Notificationフックは、Claude Codeが通知を送る際に発火します。公式ドキュメントでは、通知の種類（マッチャー）として、ツール使用の許可待ち（`permission_prompt`）、応答完了から約60秒たっても入力がない状態（`idle_prompt`）、認証の完了などが挙げられています。許可待ちや入力待ちを、Slackやデスクトップ通知として転送するのに向いています。

ここで注意したいのは、Notificationは「応答が終わるたびに毎回発火する」イベントではない点です。`idle_prompt`は完了の約60秒後で、その間にユーザーが入力すると発火しません。毎回の応答完了を知らせたい場合は、次に説明するStopを使います。なお、Notificationでは終了コードとstderrは無視されます。

### Stop・SubagentStop — 応答完了時の最終処理

Stopフックは、Claude Codeが応答を完了した（ターンが終わった）タイミングで発火します。作業結果の最終バリデーション、ログ記録、後続タスクのトリガーに使います。SubagentStopはサブエージェントの完了時に発火し、分担したタスクの結果検証や集約に向いています。Stop・SubagentStopでは、終了コード2で終了すると停止を止めて作業を続けさせることができ、stderrの内容が次の指示として渡されます。「テストが通るまで終わらせない」といった仕組みに使えます。ただし、続行させる条件が解消しないと止まらなくなるため、Stopフックに渡される`stop_hook_active`（すでにStopフックの結果として続行中かどうか）を確認する書き方が公式で案内されています。一方、終了コード0のときの標準出力はClaude Codeには渡りません。通知やログだけが目的なら、そのまま終了コード0で終えます。

## settings.jsonでのフック定義の書き方

Hooksは`.claude/settings.json`（プロジェクトスコープ）または`~/.claude/settings.json`（ユーザースコープ）で定義します。プラグインの`hooks/hooks.json`や、スキル・サブエージェントのfrontmatterにも書けます。ここでは基本構造から、条件分岐と標準入力JSONの使い方、終了コードの意味までを見ていきます。構造は「イベント→マッチャー→ハンドラー」の3段です。

### 基本構造

```
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/validation-script.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}
```

ハンドラーの`type`には、シェルコマンドを実行する`command`のほか、`http`（外部URLへのPOST）、`prompt`（LLMによる判定）、`agent`（実験的）、`mcp_tool`が用意されています。本記事の実装パターンはすべて、最も基本的な`command`型で書いています。

### マッチャーの仕組み

`matcher`フィールドは、どのツール呼び出しに対してフックを発火させるかを指定します。

| マッチャー指定 | 意味 |
| --- | --- |
| `"Bash"` | Bashツール使用時のみ発火 |
| `"Write\|Edit"` | WriteまたはEditツール使用時に発火 |
| `""`（空文字） | 全ツールに対して発火 |
| 未指定 | 全ツールに対して発火 |

マッチャーはツール名に対して評価されます。たとえば`"Bash"`は`Bash`ツールにマッチしますが、`"Read"`にはマッチしません。ツール名以外のイベント（SessionStartなど）では、マッチャーの対象がイベントごとに異なります。詳細は公式のHooksリファレンスで確認してください。

### 標準入力のJSONと終了コード

フックコマンドには、イベントの内容がJSONとして標準入力に渡されます。ツール名は`tool_name`、ツールへの入力は`tool_input`に入っており（WriteやEditなら`tool_input.file_path`、Bashなら`tool_input.command`）、`jq`で取り出して判定に使います。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '\"ファイル書き込み検知: \" + .tool_input.file_path' >> /tmp/claude-audit.log"
          }
        ]
      }
    ]
  }
}
```

| 項目 | 内容 |
| --- | --- |
| 標準入力のJSON | `tool_name`（ツール名）、`tool_input`（ツールへの入力）など。イベントごとに含まれる項目は異なる |
| 終了コード0 | 成功。処理はそのまま進む |
| 終了コード2 | ブロック。PreToolUseならツール呼び出しを止め、stderrの内容がClaude Codeに渡される |
| それ以外の終了コード | 非ブロッキングのエラー。処理は止まらずに進む |

ここで見落としやすいのが、「ゼロ以外ならブロック」ではない点です。**ブロックしたいときは終了コード2**を返します。終了コード1で終わるスクリプトは、エラーとして記録されるだけでツール実行は止まりません。終了コード2の効果はイベントごとに異なるため（PostToolUseでは取り消せず、stderrをClaude Codeに見せるだけです）、使うイベントの説明を公式ドキュメントで確認してください。

## 実装パターン：セキュリティゲートと品質チェック

ここからは、実務で使える実装パターンを10個、2つのテーマに分けて紹介します。まずは「防御と品質担保」に関わる5パターンです。いずれも`.claude/settings.json`に転記して試せる形で書いています。

### 破壊的操作をブロックする

**パターン1：本番環境への誤操作防止**

基本となるパターンです。`git push`の強制オプション（`--force`・`-f`・`--force-with-lease`）、`rm -rf`のような再帰的な強制削除、`DROP TABLE`などの破壊的コマンドをブロックします。判定条件が長くなるため、設定ファイルにはスクリプトのパスだけを書き、判定はスクリプト側に置きます。

まず、判定用のスクリプト（例：`.claude/hooks/block-dangerous.sh`）です。標準入力のJSONからBashコマンドを取り出し、危険なパターンに合致したら理由をstderrに出して終了コード2で終了します。

```
#!/bin/bash
# PreToolUse(Bash) 用：破壊的コマンドを検出したら終了コード2でブロックする
cmd=$(jq -r '.tool_input.command // empty')

block() {
  echo "BLOCKED: $1" >&2
  exit 2
}

# git push の強制オプション（--force / --force-with-lease / -f）
if echo "$cmd" | grep -qE 'git[[:space:]]+push([[:space:]]+[^;&|]*)?[[:space:]]+(--force([[:space:]=]|$)|--force-with-lease|-[a-zA-Z]*f[a-zA-Z]*([[:space:]]|$))'; then
  block "git push の強制オプションは禁止されています"
fi

# rm の再帰＋強制の組み合わせ（-rf / -fr / -Rf など）
if echo "$cmd" | grep -qE '(^|[;&|[:space:]])rm[[:space:]]+(-[a-zA-Z]*[rR][a-zA-Z]*[fF]|-[a-zA-Z]*[fF][a-zA-Z]*[rR])'; then
  block "rm の再帰的な強制削除は禁止されています"
fi

# SQLの破壊的操作
if echo "$cmd" | grep -qiE 'drop[[:space:]]+(table|database)'; then
  block "DROP TABLE / DROP DATABASE は禁止されています"
fi

exit 0
```

次に、`.claude/settings.json`からこのスクリプトを呼び出します。実行権限（`chmod +x .claude/hooks/block-dangerous.sh`）を付けておいてください。

```
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous.sh"
          }
        ]
      }
    ]
  }
}
```

このフックが終了コード2で終了すると、そのBashコマンドの実行はブロックされ、stderrの理由がClaude Codeに渡ります。理由が伝わるため、別の安全な方法を提案させることもできます。

動作確認は、危険なコマンドを実際に実行せず、フックに渡される標準入力のJSONを模擬して行えます。次のように、JSONをスクリプトへ流し込み、終了コードを見ます。

```
echo '{"tool_input":{"command":"git push --force"}}' | .claude/hooks/block-dangerous.sh; echo $?
echo '{"tool_input":{"command":"git push origin feature"}}' | .claude/hooks/block-dangerous.sh; echo $?
```

1行目は、stderrに`BLOCKED: git push の強制オプションは禁止されています`と表示され、終了コードは`2`になります。2行目は何も表示されず`0`になり、通常の`git push`は通ります。筆者の環境でこのスクリプトを`git push --force`・`git push -f`・`git push origin main --force`・`git push --force-with-lease`・`rm -rf ./build`・`rm -rf /`・`rm -fr x`で試したところ、すべて終了コード2でブロックされ、`git push origin feature`・`ls -la`は終了コード0で通過しました。

なお、この判定は正規表現による簡易的なものです。シェルの書き方によっては検出をすり抜ける場合があるため、安全の最後の砦ではなく、事故を減らすための補助として使ってください。

**パターン2：特定ディレクトリへの書き込み制限**

設定ファイルやインフラ定義など、変更を制限したいディレクトリへの書き込みをブロックします。

```
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "if jq -r '.tool_input.file_path' | grep -qE '(^\\.env|/\\.env|\\.credentials/|/secrets/)'; then echo 'BLOCKED: 機密ファイルへの書き込みは禁止されています' >&2; exit 2; fi"
          }
        ]
      }
    ]
  }
}
```

### 保存時の自動フォーマット

**パターン3：ファイル保存時の自動lint**

ファイルを書き込んだ直後にESLintやPrettierを自動実行し、コードスタイルを統一します。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "f=$(jq -r '.tool_input.file_path'); npx eslint --fix \"$f\" >&2 || exit 2"
          }
        ]
      }
    ]
  }
}
```

このパターンの要点は、eslintが直し切れないエラーを出して失敗したとき、`|| exit 2`で終了コード2を返すと、stderrのlint結果がClaude Codeに渡ります。つまり、lintエラーがあればClaude Codeがそれを認識し、次のアクションで自動修正に動いてくれます。人間が介在しなくても「書く→検証→修正」のループが自動で回るのです。

### 変更に応じた検証の自動化

**パターン4：テストの自動実行**

ソースコードが変更されたら、関連するテストを自動実行します。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "f=$(jq -r '.tool_input.file_path'); if echo \"$f\" | grep -qE '\\.(ts|tsx|js|jsx)$'; then out=$(npm test -- --findRelatedTests \"$f\" 2>&1) || { echo \"$out\" | tail -20 >&2; exit 2; }; fi"
          }
        ]
      }
    ]
  }
}
```

`npm test`がJestを呼び出す構成であれば、Jestの[`--findRelatedTests`](https://jestjs.io/docs/cli#--findrelatedtests-spaceseparatedlistofsourcefiles)オプションで、指定したソースファイルに関連するテストだけを実行でき、フィードバックループを高速に保てます。別のテストランナーを使う場合は、そのランナーの同等の機能に置き換えてください。テストが失敗したときだけ、末尾20行をstderrに出して終了コード2で返す作りです。

**パターン5：TypeScript型チェックの自動実行**

TypeScriptプロジェクトでは、ファイル変更のたびに型チェックを走らせることで、型エラーの早期発見が可能です。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "f=$(jq -r '.tool_input.file_path'); if echo \"$f\" | grep -qE '\\.tsx?$'; then out=$(npx tsc --noEmit --pretty 2>&1) || { echo \"$out\" | tail -15 >&2; exit 2; }; fi"
          }
        ]
      }
    ]
  }
}
```

## 実装パターン：通知・ログ・レビューの自動化

続いて、残り5パターンとして「通知・記録・レビュー」に関わるものを紹介します。チームでの利用状況の把握や、長時間タスクの効率化に役立ちます。

### 通知を外部に転送する

**パターン6：Slack通知連携**

Claude Codeの通知（許可待ち・入力待ちなど）をSlackチャンネルに転送します。席を外していても、確認待ちになったことに気づけます。通知の本文は標準入力のJSON（`message`）から取り出します。毎回の応答完了を知らせたい場合は、次のパターン7のようにStopを使います。

```
{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "msg=$(jq -r '.message'); curl -s -X POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL -H 'Content-Type: application/json' -d \"$(jq -n --arg t \"Claude Code: $msg\" '{text: $t}')\""
          }
        ]
      }
    ]
  }
}
```

チーム全体でClaude Codeを活用する場合、通知の集約は運用効率を大きく左右します。Webhook URLは秘密情報なので、リポジトリで共有する`.claude/settings.json`には直書きせず、個人設定（`.claude/settings.local.json`）や環境変数で管理してください。こうした取り組みの詳細は、[経営データの可視化](https://start-link.jp/service/claude-code/business-intelligence)や[コンテンツマーケティングの支援](https://start-link.jp/service/claude-code/content-marketing)のページでもご紹介しています。

**パターン7：応答完了のmacOSデスクトップ通知**

Slackを使わない個人開発で、応答が終わるたびに知らせたい場合は、StopイベントとmacOSのネイティブ通知を組み合わせるのが手軽です。

```
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"応答が完了しました\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}
```

### 監査ログの自動記録

**パターン8：監査ログの自動記録**

ツールの実行を監査ログとして記録します。コンプライアンス要件がある環境や、チームでの利用状況を把握したい場合に有効です。注意したいのは、`PostToolUse` が動くのはツールが成功したときだけという点です。失敗したツール実行は `PostToolUseFailure` という別のイベントで届くため、成功と失敗の両方を残したい場合は、同じコマンドを2つのイベントに登録します（[公式ドキュメント: Hooks](https://code.claude.com/docs/en/hooks)）。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '\"\\(now | todate) | \\(.hook_event_name) | Tool: \\(.tool_name) | Input: \\(.tool_input | tostring | .[0:200])\"' >> ~/.claude/audit.log"
          }
        ]
      }
    ],
    "PostToolUseFailure": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '\"\\(now | todate) | \\(.hook_event_name) | Tool: \\(.tool_name) | Error: \\(.error | .[0:200])\"' >> ~/.claude/audit.log"
          }
        ]
      }
    ]
  }
}
```

ログの各行には `hook_event_name`（`PostToolUse` か `PostToolUseFailure`）が入るため、あとから失敗だけを抜き出せます。たとえば `grep PostToolUseFailure ~/.claude/audit.log` で、失敗したコマンドとエラーの冒頭を確認できます。なお、権限の確認で拒否されたツール呼び出しや、入力の検証で弾かれた呼び出しは、どちらのイベントでも記録されません。自動モード（auto mode）が拒否した呼び出しに限っては `PermissionDenied` イベントで受け取れますが、手動で拒否した場合や `deny` ルールに当たった場合は、このイベントも発火しません。

### 作業完了時の変更統計の記録

**パターン9：作業完了時の変更統計ログ**

Stopフックを使い、Claude Codeの応答が完了するたびに、未コミットの変更の統計（`git diff --stat`）をログに残します。`git diff --stat`が出すのはファイルごとの変更行数の統計だけで、コードの中身をレビューするものではありません。また、Stopフックが終了コード0で終わる場合、標準出力はClaude Codeには渡りません（公式ドキュメントで標準出力が文脈に追加されると記載されているのは、UserPromptSubmitやSessionStartなど一部のイベントです）。そのため、ここでは標準出力ではなくファイルへ追記します。

```
{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "{ date; git diff --stat HEAD 2>/dev/null | tail -5; } >> ~/.claude/stop-diff.log"
          }
        ]
      }
    ]
  }
}
```

### HubSpot CMS開発での変更検知

**パターン10：HubLテンプレート変更時の確認依頼**

HubSpot CMS（Content Hub）のテーマ開発では、HubLテンプレートの構文ミスが厄介です。このパターンは構文を自動で検査するものではなく、PostToolUseでHubLテンプレートらしいファイル（`.html`・`.hubl`）の変更を検知し、終了コード2でstderrのメッセージをClaude Codeに渡して、HubL構文と表示の確認を促すものです。実際の構文検証は、HubSpot CLIでのアップロードやプレビューなど、別の手段と組み合わせてください。

```
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "f=$(jq -r '.tool_input.file_path'); if echo \"$f\" | grep -qE '\\.(html|hubl)$'; then echo \"HubLテンプレートの変更を検知: $f。HubL構文の確認と表示確認を行ってください。\" >&2; exit 2; fi"
          }
        ]
      }
    ]
  }
}
```

HubSpot CMSのテーマ開発にClaude Codeを活用する方法については、[Claude CodeとMCPサーバー連携の実践ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-mcp-integration)でも詳しく解説しています。

## HubSpot開発・CRM連携での活用シーン

Claude Code Hooksは、HubSpotエコシステムでの開発にも自然に組み込めます。CRMの設定や連携コードは一度運用が始まると変更の影響が大きくなるため、「人の注意力」ではなく「仕組み」で守る場面が多くあります。

### API呼び出しのレートリミット監視

HubSpot APIには、プランに応じて1日あたりのリクエスト上限が設けられています。PostToolUseフックでAPI呼び出し回数をカウントし、上限に近づいたら警告を出す設計にしておくと、レートリミットへの到達を未然に防ぎやすくなります。

### CRMプロパティ変更の監査

HubSpot CRMのプロパティ設計は、一度運用が始まると変更の影響範囲が大きくなります。プロパティ作成・更新のAPIコールをPreToolUseフックで検知し、変更内容をログに記録することで、「誰がいつ何を変えたか」のトレーサビリティを確保できます。

CRMプロパティ設計のベストプラクティスについては、[Claude Codeを非エンジニアが活用する方法](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-non-engineer-use-cases)でも触れていますので、あわせてご参照ください。

### ワークフロー定義ファイルの保護

HubSpotのワークフロー設定をコードで管理している場合、ワークフロー定義ファイルへの意図しない変更をPreToolUseフックでブロックできます。本番環境のワークフローが予期せず変更されるリスクを構造的に抑えられるため、チーム開発での安全性が高まります。

## Hooks設計のベストプラクティス

ここまでのパターンを実装する前に、設計面で押さえておきたいポイントを3つ整理します。どのスコープに置くか・どれくらいの重さの処理を回すか・失敗時にどう振る舞うかが分かれ目です。

### スコープの使い分け

Hooksの設定は3つのスコープで管理できます。

| スコープ | 設定ファイル | 用途 |
| --- | --- | --- |
| ユーザー | `~/.claude/settings.json` | 個人の開発環境共通ルール |
| プロジェクト | `.claude/settings.json` | チーム共有の品質ゲート（Git管理） |
| プロジェクトローカル | `.claude/settings.local.json` | 個人のローカル設定（Git除外） |

チームで統一すべきルール（セキュリティチェック、lint設定）はプロジェクトスコープに、個人の通知設定やローカル環境固有の設定はユーザースコープまたはプロジェクトローカルに配置します。設定の優先順位は、高い順にマネージド設定、コマンドラインの`--settings`、`.claude/settings.local.json`（プロジェクトローカル）、`.claude/settings.json`（プロジェクト）、`~/.claude/settings.json`（ユーザー）です。同じキーが複数の場所にあれば、上にあるほうの値が使われます（[公式ドキュメント: Settings precedence](https://code.claude.com/docs/en/settings#settings-precedence)、2026年10月時点）。組織で一括して強制したいルールはマネージド設定に置く、という使い分けも選択肢です。

### 何を、どのイベントとハンドラーで守るかの判断基準

実装に入る前に、守りたい対象ごとに「イベント」「ハンドラー」「失敗時の扱い」を決めておくと、設定のやり直しが減ります。判断の目安を表にまとめます。

| 守りたいこと | 向いているイベント | 向いているハンドラー | 失敗時の扱い |
| --- | --- | --- | --- |
| 破壊的コマンド・機密ファイルへの書き込み | PreToolUse | `command`（grepとjqで機械的に判定） | 終了コード2でブロック |
| 保存後のlint・型チェック・テスト | PostToolUse | `command` | 終了コード2でstderrをClaude Codeへ返し、修正させる |
| 「終わった」と言う前の最終確認 | Stop | `command` | 終了コード2で作業を続行させる |
| 許可待ち・入力待ちの通知 | Notification | `command`または`http` | 終了コードとstderrは無視される |
| 応答が終わるたびの完了通知 | Stop | `command` | 通知だけなら終了コード0で終える（2を返すと作業が続行される） |
| 文脈を読む必要がある判定（コミットメッセージの妥当性など） | PreToolUse / Stop | `prompt` | 判定がぶれる前提で、補助的な位置づけにする |

迷ったときは、「止めるべきか」が機械的に決まるものは`command`型、文脈の解釈が要るものは`prompt`型という分け方が出発点になります。後者は結果が毎回同じとは限らないため、安全上の最後の砦にはしないでください。

### フックコマンドの実行時間に注意する

フックコマンドは、完了するまでClaude Codeの進行に影響します。時間のかかるコマンドは応答速度に直接響くため、以下の指針を意識してください。

- **PreToolUse**: ブロック判定はgrepやjqのような軽い処理で済ませ、応答を待たせない設計にする
- **PostToolUse**: 長時間かかるテストは、Jestの`--findRelatedTests`などで対象を絞る。フルテストスイートはStopフックで実行する
- **Stop**: フルビルドやE2Eテストなど、重い処理はここに集約する

### エラーハンドリングの設計

PreToolUseフックが終了コード2で終了した場合、そのツール実行はブロックされ、標準エラー出力（stderr）がClaude Codeに渡されます。これにより、Claude Codeは「なぜブロックされたか」を理解し、代替手段を提案できます。終了コード0は成功、2以外の非ゼロはブロックしない非ブロッキングエラーです。

一方、PostToolUseフックは、ツールが実行済みのため終了コード2でも取り消せません。ただし、stderrの内容はClaude Codeに渡るので、問題を認識して修正アクションを取ることは可能です。起動の失敗やタイムアウトでもブロックしたい場合は、フック定義に`onFailure: "block"`を指定できる仕組みがあります。

なお、Hooksで自動化するのは「決まったチェックを漏れなく回す」部分です。どのルールを仕組み化するかの設計判断や、ブロックされたときの最終判断は人間が担う、という役割分担を意識しておくと運用が安定します。

## Hooksの制約と向かないケース

正直に言えば、Claude Code Hooksにはいくつかの制約があります。導入前に把握しておくべきポイントを整理します。

### 判断ロジックは自分で書く必要がある

`command`型のフックは、渡されたJSONを読んで終了コードを返す、単純な仕組みです。複雑なロジックを実装したい場合は、外部スクリプト（Python、Node.js等）を作成し、そのスクリプトをフックから呼び出す構成にします。LLMによる判定が必要な場合は`prompt`型などもありますが、その分「決定論的」という利点は薄れるため、漏れなく止めたい処理は`command`型で書くのが基本です。

### デバッグが難しい場合がある

フックの実行はClaude Codeのセッション内で行われるため、フックが期待通りに動作しない場合のデバッグが難しいことがあります。開発中はログファイルへの出力を追加し、動作を確認しながら設定を詰めていくアプローチが有効です。

### チーム共有とパフォーマンスへの注意

`.claude/settings.json`をGitリポジトリにコミットすることでチーム共有が可能ですが、メンバーのローカル環境（OS、インストール済みツール）の違いにより、フックコマンドが動作しない場合があります。クロスプラットフォーム対応が必要な場合は、フックコマンド内で環境判定を行うか、ラッパースクリプトを用意してください。

また、全ツール呼び出しに対してフックを発火させると、Claude Codeの応答速度が低下します。マッチャーを適切に設定し、必要なツールに対してのみフックを発火させることが重要です。

## 仕組みでミスを防ぐ — 実務から見たHooks活用の勘所

StartLinkでは、Claude Codeを中心にHubSpot CRM連携やAPI開発を進め、成果物は別のAI（Codex）にも検証させる役割分担をとっています。複数のAIで品質を担保する運用の中で、Hooksの価値として強く感じるのは「ミスの構造的な排除」です。

たとえば、HubSpot APIの認証トークンを含む`.env`ファイルへの書き込みをPreToolUseでブロックする設定は、一度入れてしまえば同じミスの再発を仕組みで防げます。人間の注意力に頼るのではなく、仕組みで防ぐ。これは私たちがCRM運用の設計でも大切にしている考え方です。

HubSpotのワークフローやリードスコアリングも同じで、「人が毎回判断する」のではなく「ルールを設定して自動で動く」仕組みを作ることが本質です。Claude Code Hooksは、その思想をAI開発ワークフローに持ち込んだものだと言えます。

ただし、フックの設計はチームの開発スタイルや扱うリポジトリによって最適な形が異なります。最初からすべてのパターンを入れようとするのではなく、「破壊的コマンドのブロック」「保存時の自動lint」など効果の出やすいものから1〜2個試して、段階的に広げていくのがおすすめです。

Claude Codeのチーム開発への導入を検討されている方は、[Claude Codeによるチーム開発の実践ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-team-development)もあわせてご覧ください。

## よくある質問

### Q1. Claude Code HooksとGitフック（pre-commit等）は何が違いますか？

Gitフックは`git commit`や`git push`といったGit操作をトリガーとしますが、Claude Code HooksはAIエージェントのツール呼び出し（ファイル書き込み、Bash実行など）をトリガーとします。コミット前だけでなく、AIがファイルを編集した瞬間やコマンドを実行しようとした瞬間にチェックを挟めるのが特徴です。

### Q2. Hooksの設定はチームメンバーと共有できますか？

はい。`.claude/settings.json`をGitリポジトリにコミットすることで、プロジェクト単位でチーム共有できます。個人固有の設定は`.claude/settings.local.json`（Git除外推奨）に分離できます。

### Q3. フックコマンドが失敗した場合、Claude Codeの動作はどうなりますか？

PreToolUseフックが終了コード2で終了した場合、そのツール実行はブロックされます。PostToolUseフックの場合は、ツール実行自体は完了しており、終了コード2のときのstderrがClaude Codeに伝わるだけで、取り消しはできません。2以外の非ゼロ終了はブロックしない非ブロッキングエラーとして扱われます。いずれの場合も、公式ドキュメントの定義どおりにイベントごとの挙動が決まっており、フックの失敗がセッション全体を止める設計ではありません。

### Q4. Hooksの実行ログを確認する方法はありますか？

フックコマンド内でログファイルへの出力を明示的に記述する必要があります。たとえば`>> ~/.claude/hooks.log 2>&1`をコマンド末尾に追加することで、実行ログを蓄積できます。Claude Codeの対話セッション内では、`/hooks`で設定済みのフックを一覧確認でき、動作確認に利用できます。

### Q5. 1つのフックポイントに複数のフックを設定できますか？

はい。各フックポイントの配列に複数のフック定義を追加できます。同じイベントに合致する複数のフックがある場合、PreToolUseではいずれか1つが終了コード2を返せば操作がブロックされます。実行順序に依存する処理は、1本のスクリプトにまとめて順序を自分で制御する設計が安全です。

## まとめ

Claude Code Hooksは、AIエージェントの操作をトリガーとした自動化レイヤーです。PreToolUseによるセキュリティゲート、PostToolUseによる品質チェックの自動実行、NotificationやStopによる外部通知連携を組み合わせることで、開発ワークフローの「守り」を構造的に強化できます。このテーマの全記事は[Claude Code実践ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice)でご覧いただけます。

特にHubSpot CRM開発やAPI連携プロジェクトでは、認証情報の保護・APIレートリミットの監視・プロパティ変更の監査といった場面でHooksが力を発揮します。

まずは「破壊的コマンドのブロック」と「ファイル保存時の自動lint」の2つから始めてみてください。この2つは、効果を実感しやすく、失敗したときの影響も小さい組み合わせです。導入は次の3ステップで進められます。

1. `.claude/settings.json`にPreToolUseフックを1本追加し、危険コマンドを実行する代わりに、模擬した標準入力のJSONを流して、終了コード2でブロックされることを確認する
2. PostToolUseに自動lintを追加し、「書く→検証→修正」のループが回るかを確認する
3. チームで使う場合はsettings.jsonをGit管理し、効果を見ながらパターンを段階的に増やしていく

CRMを活用した業務効率化やAIとの連携に関するご相談は、CRM特化型コンサルティングのHubSpotゴールドパートナーのStartLinkまでお気軽にお問い合わせください。

## あわせて読みたい

- [Claude Code × CI/CD｜パイプライン設計ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-cicd-automation)
- [Claude CodeとMCPサーバー連携の実践ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-mcp-integration)
- [Claude Codeによるチーム開発の実践ガイド](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-team-development)
- [Claude Codeを非エンジニアが活用する方法](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-non-engineer-use-cases)

外部参考リンク:

- [Claude Code公式ドキュメント: Hooks](https://code.claude.com/docs/en/hooks)
- [Claude Code公式ドキュメント: Settings](https://code.claude.com/docs/en/settings)

記事の内容を、そのまま実務に落とし込みたい方向け

HubSpotゴールドパートナーのStartLinkが、HubSpot導入・AI活用・CRM整備・業務効率化までをまとめて支援しています。記事で気になったテーマを、そのまま相談ベースで整理できます。

[サービス概要を見る](https://start-link.jp/service/hubspot-ai) [無料で相談する](https://start-link.jp/contact)

## 次に読む

### [![](https://start-link.jp/hubfs/blog/screenshots/generated/gen_DD-61_fast_mode_model_support_v2.png) Claude Codeのfast mode（/fast）｜対応モデル・料金・使いどころの判断基準](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-fast-mode)

### [![](https://start-link.jp/hubfs/blog/screenshots/generated/gen_DD-60_agent_view_session_states.png) Claude Code agent viewの使い方｜全セッションを1画面で管理](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-agent-view)

### [![](https://start-link.jp/hubfs/blog/screenshots/generated/gen_DD-58_goal_evaluation_loop.png) Claude Codeの/goalコマンド｜完了条件でAIを自律実行させる方法](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-goal-command)

## あわせて読みたいAI実践ガイド

### [Setup Claude Coworkの使い方と初期設定 導入直後にやるべき設定、CLAUDE.md、スキル設計、運用の型をまとめています。](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-cowork-setup-guide)

### [Team Claude Codeでチーム開発を効率化する方法 レビュー、権限管理、共有ルールまで踏み込んだ実践的なチーム利用ガイドです。](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-team-development)

### [MCP Claude Code × MCP連携ガイド 社内システムとつなぎ、実業務でAIエージェントを動かす方法を整理しています。](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-mcp-integration)

### [Service HubSpot × AIの支援サービス 導入設計から内製化、ワークフロー自動化までの支援内容を確認できます。](https://start-link.jp/service/hubspot-ai)

## 記事の内容を、そのまま実務に落とし込みたい方向け

[無料で相談する](https://start-link.jp/contact) [資料をダウンロード](https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-hooks-automation#blog-download)

 株式会社StartLinkは、事業推進に関わる「販売促進」「DXによる業務効率化（ERP/CRM/SFA/MAの導入）」などのご相談を受け付けております。 サービスのプランについてのご相談/お見積もり依頼や、ノウハウのお問い合わせについては、[無料のお問い合わせページ](https://www.start-link.jp/contact)より、お気軽にご連絡くださいませ。

###### 関連キーワード:

[AI](https://start-link.jp/hubspot-ai/tag/ai) [生成AI](https://start-link.jp/hubspot-ai/tag/生成ai)

## サービス資料を無料DL

## 著者情報

![7-1](https://start-link.jp/hubfs/7-1.jpg)

### 今枝 / Imaeda

 株式会社StartLink 代表取締役。累計150社以上のHubSpotプロジェクト支援実績を持ち、Claude CodeやHubSpotを軸にしたAI活用支援・経営基盤AXのコンサルティング事業を展開。  
 HubSpotのトップパートナー企業や大手人材グループにて、エンタープライズCRM戦略策定・AI戦略ディレクションを経験した後、StartLinkを創業。現在はCRM×AIエージェントによる経営管理支援を専門とする。

[StartLink](https://start-link.jp/)

### Service

- [会社情報](https://start-link.jp/about)
- [サービス](https://start-link.jp/service)
- [プロダクト](https://start-link.jp/sync)
- [採用情報](https://start-link.jp/recruit)
- [コンサルタントの方へ](https://start-link.jp/consultant-platform)

### Contact

- [問い合わせ](https://start-link.jp/contact)
- [資料ダウンロード](https://start-link.jp/download/service)
- [Syncナレッジベース](https://start-link.jp/sync/knowledge-base)
- [個人情報保護方針](https://start-link.jp/privacy-policy)
- [個人情報取り扱い規定](https://start-link.jp/personal-information-processing-agreement)

(c) 2026 All Rights Reserved.

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "今枝 拓海",
    "url" : "https://start-link.jp/hubspot-ai/author/imaeda"
  },
  "datePublished" : "2026-03-14T02:30:36.000Z",
  "headline" : "Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド",
  "image" : [ "https://start-link.jp/hubfs/blog/screenshots/generated/gen_claude-code-hooks-automation_v2.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-hooks-automation",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://start-link.jp/hubfs/Start%20Link%20(1500%20x%20600%20px)%20(5)-1.png"
    },
    "name" : "株式会社StartLink"
  }
}
```

```json
{
  "@context" : "https://schema.org",
  "@type" : "FAQPage",
  "mainEntity" : [ {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "Gitフックはgit commitやgit pushといったGit操作をトリガーとしますが、Claude Code HooksはAIエージェントのツール呼び出し（ファイル書き込み、Bash実行など）をトリガーとします。コミット前だけでなく、AIがファイルを編集した瞬間やコマンドを実行しようとした瞬間にチェックを挟めるのが特徴です。"
    },
    "name" : "Claude Code HooksとGitフック（pre-commit等）は何が違いますか？"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "はい。.claude/settings.jsonをGitリポジトリにコミットすることで、プロジェクト単位でチーム共有できます。個人固有の設定は.claude/settings.local.json（Git除外推奨）に分離できます。"
    },
    "name" : "Hooksの設定はチームメンバーと共有できますか？"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "PreToolUseフックが終了コード2で終了した場合、そのツール実行はブロックされます。PostToolUseフックの場合は、ツール実行自体は完了しており、終了コード2のときのstderrがClaude Codeに伝わるだけで、取り消しはできません。2以外の非ゼロ終了はブロックしない非ブロッキングエラーとして扱われます。いずれの場合も、公式ドキュメントの定義どおりにイベントごとの挙動が決まっており、フックの失敗がセッション全体を止める設計ではありません。"
    },
    "name" : "フックコマンドが失敗した場合、Claude Codeの動作はどうなりますか？"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "フックコマンド内でログファイルへの出力を明示的に記述する必要があります。たとえば>> ~/.claude/hooks.log 2>&1をコマンド末尾に追加することで、実行ログを蓄積できます。Claude Codeの対話セッション内では、/hooksで設定済みのフックを一覧確認でき、動作確認に利用できます。"
    },
    "name" : "Hooksの実行ログを確認する方法はありますか？"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "はい。各フックポイントの配列に複数のフック定義を追加できます。同じイベントに合致する複数のフックがある場合、PreToolUseではいずれか1つが終了コード2を返せば操作がブロックされます。実行順序に依存する処理は、1本のスクリプトにまとめて順序を自分で制御する設計が安全です。"
    },
    "name" : "1つのフックポイントに複数のフックを設定できますか？"
  } ]
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-hooks-automation#article",
  "@type" : "BlogPosting",
  "author" : {
    "@id" : "https://start-link.jp/#founder"
  },
  "dateModified" : "2026-10-24T14:06:14+09:00",
  "datePublished" : "2026-03-14T02:30:36+09:00",
  "headline" : "Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド",
  "image" : "https://start-link.jp/hubfs/blog/screenshots/generated/gen_claude-code-hooks-automation_v2.png",
  "isPartOf" : {
    "@id" : "https://start-link.jp/#website"
  },
  "mainEntityOfPage" : {
    "@id" : "https://start-link.jp/hubspot-ai/ai/claude-code-practice/claude-code-hooks-automation",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "speakable" : {
    "@type" : "SpeakableSpecification",
    "cssSelector" : [ ".blog-section h2", ".blog-section p:first-of-type", ".blog-section blockquote" ]
  }
}
```

```json
{
  "@context" : "https://schema.org",
  "@type" : "BreadcrumbList",
  "itemListElement" : [ {
    "@type" : "ListItem",
    "item" : "https://start-link.jp",
    "name" : "ホーム",
    "position" : 1
  }, {
    "@type" : "ListItem",
    "item" : "https://start-link.jp/hubspot-ai",
    "name" : "ブログ",
    "position" : 2
  }, {
    "@type" : "ListItem",
    "item" : "https://start-link.jp/hubspot-ai/ai",
    "name" : "AI活用",
    "position" : 3
  }, {
    "@type" : "ListItem",
    "item" : "https://start-link.jp/hubspot-ai/ai/claude-code-practice",
    "name" : "Claude Code実践",
    "position" : 4
  }, {
    "@type" : "ListItem",
    "name" : "Claude Code Hooksで開発を自動化する方法｜設計と実装ガイド",
    "position" : 5
  } ]
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#organization",
  "@type" : "Organization",
  "address" : {
    "@type" : "PostalAddress",
    "addressCountry" : "JP",
    "addressLocality" : "中央区",
    "addressRegion" : "東京都",
    "postalCode" : "104-0061",
    "streetAddress" : "銀座1丁目12番4号 N&E BLD.6F"
  },
  "alternateName" : "StartLink Inc.",
  "award" : [ "HubSpot Gold Solutions Partner（HubSpotゴールドパートナー、2026年4月認定）" ],
  "contactPoint" : [ {
    "@type" : "ContactPoint",
    "availableLanguage" : [ "ja" ],
    "contactType" : "customer support",
    "url" : "https://start-link.jp/contact"
  }, {
    "@type" : "ContactPoint",
    "availableLanguage" : [ "ja", "en" ],
    "contactType" : "sales",
    "url" : "https://start-link.jp/contact"
  } ],
  "description" : "「AI × HubSpot」をコンセプトに掲げるHubSpotゴールドパートナー（Gold Solutions Partner、2026年4月認定）。HubSpotマーケットプレイスに自社アプリ（Sync for freee / Notion / Money Forward / Chatwork）を公開するアプリ開発企業であり、HubSpot/Salesforce知見とAI活用を組み合わせたCRM構築・移行・最適化・AIエージェント/PoC支援まで一貫して提供する。",
  "founder" : {
    "@id" : "https://start-link.jp/#founder",
    "@type" : "Person",
    "jobTitle" : "代表取締役",
    "name" : "今枝 拓海",
    "sameAs" : [ "https://x.com/ImaedaTakumii", "https://www.linkedin.com/in/takumi-imaeda/", "https://www.facebook.com/takumiIma" ]
  },
  "foundingDate" : "2024-09-04",
  "hasCredential" : {
    "@type" : "EducationalOccupationalCredential",
    "credentialCategory" : "certification",
    "name" : "HubSpot Gold Solutions Partner",
    "recognizedBy" : {
      "@type" : "Organization",
      "name" : "HubSpot, Inc.",
      "url" : "https://www.hubspot.com/"
    }
  },
  "image" : [ "https://start-link.jp/hubfs/startlink-ai-agent.jpg", "https://start-link.jp/hubfs/startlink-aiorg.jpg" ],
  "knowsAbout" : [ "HubSpot CRM", "HubSpot Implementation", "HubSpot導入支援", "CRM構築", "AI活用", "HubSpot連携アプリ開発", "Salesforce to HubSpot Migration", "Generative AI Integration", "AI Agent Development", "Revenue Operations", "Marketing Automation", "freee Integration", "Notion Integration", "Money Forward Integration" ],
  "legalName" : "株式会社StartLink",
  "logo" : "https://start-link.jp/hubfs/startlink-logo.png",
  "mainEntityOfPage" : "https://start-link.jp/",
  "memberOf" : {
    "@type" : "ProgramMembership",
    "hostingOrganization" : {
      "@type" : "Organization",
      "name" : "HubSpot, Inc.",
      "url" : "https://www.hubspot.com/"
    },
    "membershipNumber" : "Gold Tier",
    "programName" : "HubSpot Solutions Partner Program"
  },
  "name" : "株式会社StartLink",
  "sameAs" : [ "https://www.youtube.com/@startlink-hubspot", "https://x.com/ImaedaTakumii", "https://www.linkedin.com/in/takumi-imaeda/", "https://www.linkedin.com/company/108100307/", "https://www.facebook.com/takumiIma", "https://www.facebook.com/profile.php?id=61566874764985", "https://prtimes.jp/main/html/searchrlp/company_id/149669", "https://app.hubspot.com/ecosystem/46046172/marketplace/solutions/startlink" ],
  "taxID" : "8010001248134",
  "url" : "https://start-link.jp/"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#website",
  "@type" : "WebSite",
  "inLanguage" : "ja",
  "name" : "株式会社StartLink",
  "publisher" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "url" : "https://start-link.jp/"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-hubspot",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "CRM導入", "HubSpot" ],
  "description" : "150社以上の実績を持つHubSpotゴールドパートナーが、業務フローに合わせた設計から構築・本番稼働まで一貫支援。",
  "name" : "HubSpot導入・構築支援",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "HubSpot導入・構築支援",
  "url" : "https://start-link.jp/service/hubspot"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-hubspot-ai",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "CRM最適化", "AI活用" ],
  "description" : "HubSpotを軸に業務要件に沿った設計改善とAI連携活用を包括支援。",
  "name" : "HubSpot AIコンサルティング",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "HubSpot AIコンサルティング",
  "url" : "https://start-link.jp/service/hubspot-ai"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-hubspot-training",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "研修", "HubSpot" ],
  "description" : "HubSpotの概念・基本操作からAI活用ノウハウまで、社内浸透のための研修を提供。",
  "name" : "HubSpot研修・レクチャー支援",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "HubSpot研修・内製化支援",
  "url" : "https://start-link.jp/service/hubspot-ai/training"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-sf2hs-replace",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "CRM移行", "データ移行" ],
  "description" : "Salesforce/HubSpot双方の思想とデータモデルを理解した移行設計とHubSpot側CRM開発を実行。",
  "name" : "SalesforceからHubSpotへのリプレイス支援",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "SalesforceからHubSpotへのリプレイス支援",
  "url" : "https://start-link.jp/service/salesforce-hubspot-replace"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-claude-code-bi",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "AI活用", "経営管理" ],
  "description" : "複数システムのデータを統合し、毎朝のAIブリーフィングなど経営の意思決定を加速する仕組みを構築。",
  "name" : "Claude Codeによる経営データ活用支援",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "AI経営管理支援",
  "url" : "https://start-link.jp/service/claude-code/business-intelligence"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#service-claude-code-content",
  "@type" : "Service",
  "areaServed" : "JP",
  "category" : [ "コンテンツマーケティング", "AI活用" ],
  "description" : "キーワード戦略からSEO記事制作、CMS公開まで、AIを活用したコンテンツマーケティングを自動化。",
  "name" : "Claude Codeによるコンテンツマーケティング支援",
  "provider" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "serviceType" : "AIコンテンツ制作支援",
  "url" : "https://start-link.jp/service/claude-code/content-marketing"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#product-sync-freee",
  "@type" : "SoftwareApplication",
  "applicationCategory" : "BusinessApplication",
  "author" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "description" : "HubSpotとfreee会計・freee請求書をシームレスに連携。取引先の同期から請求書作成まで、バックオフィスの業務を自動化するHubSpotマーケットプレイスアプリ。",
  "featureList" : [ "freee取引先をHubSpotに自動同期", "HubSpotからfreee見積書・請求書を作成", "取引データをfreee会計に自動登録", "月次請求・更新処理に対応", "商品項目・品目・部門・タグ情報の連携" ],
  "installUrl" : "https://ecosystem.hubspot.com/marketplace/apps/sync-for-freee-bystartlink",
  "name" : "Sync for freee",
  "offers" : [ {
    "@type" : "Offer",
    "description" : "請求月5件・見積月20件まで",
    "name" : "Free",
    "price" : "0",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "請求月50件・見積月100件まで",
    "name" : "Professional",
    "price" : "4000",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "無制限",
    "name" : "Enterprise",
    "price" : "10000",
    "priceCurrency" : "JPY"
  } ],
  "operatingSystem" : "Web",
  "softwareHelp" : {
    "@type" : "WebPage",
    "url" : "https://start-link.jp/sync/knowledge-base/freee/basic-steps"
  },
  "url" : "https://start-link.jp/sync/freee"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#product-sync-notion",
  "@type" : "SoftwareApplication",
  "applicationCategory" : "BusinessApplication",
  "author" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "description" : "HubSpotのCRMレコードとNotionのページ・データベースを接続。HubSpotの画面から離れずにNotionのすべてにアクセスできるHubSpotマーケットプレイスアプリ。",
  "featureList" : [ "CRMカードからNotionページの作成・閲覧・編集", "NotionデータベースをCRMタブにテーブル表示", "4つのワークフローアクションで自動化", "コンタクト・会社・取引・チケット・サービス・プロジェクト対応" ],
  "installUrl" : "https://ecosystem.hubspot.com/marketplace/listing/sync-for-notion-bystartlink",
  "name" : "Sync for Notion",
  "offers" : [ {
    "@type" : "Offer",
    "description" : "ページ・DB合計50件まで",
    "name" : "Free",
    "price" : "0",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "無制限",
    "name" : "Professional",
    "price" : "10000",
    "priceCurrency" : "JPY"
  } ],
  "operatingSystem" : "Web",
  "url" : "https://start-link.jp/sync/notion"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#product-sync-moneyforward",
  "@type" : "SoftwareApplication",
  "applicationCategory" : "BusinessApplication",
  "author" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "description" : "HubSpotとマネーフォワード クラウドを連携。取引情報から見積書・請求書を自動作成し、取引先・品目の同期や継続請求に対応するHubSpot連携アプリ。",
  "featureList" : [ "取引（Deal）から見積書・請求書を自動作成", "会社情報とマネーフォワード取引先の同期", "商品項目・品目マスタの連携", "月次・固定回数の継続請求に対応（Professionalプラン以上）", "合算請求（Enterpriseプラン限定）", "前受請求（一括請求・月次計上）（Enterpriseプラン限定）", "原価登録（MF会計への仕訳登録）で案件別の原価・粗利を可視化（Enterpriseプラン限定）", "取引レコードにCRMカードで連携ステータスを表示" ],
  "installUrl" : "https://ecosystem.hubspot.com/ja/marketplace/listing/sync-for-moneyforward-bystartlink",
  "name" : "Sync for Money Forward",
  "offers" : [ {
    "@type" : "Offer",
    "description" : "請求月5件・見積月20件まで",
    "name" : "Free",
    "price" : "0",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "請求月50件・見積月100件まで",
    "name" : "Professional",
    "price" : "4000",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "無制限",
    "name" : "Enterprise",
    "price" : "10000",
    "priceCurrency" : "JPY"
  } ],
  "operatingSystem" : "Web",
  "url" : "https://start-link.jp/sync/moneyforward"
}
```

```json
{
  "@context" : "https://schema.org",
  "@id" : "https://start-link.jp/#product-sync-chatwork",
  "@type" : "SoftwareApplication",
  "applicationCategory" : "BusinessApplication",
  "author" : {
    "@id" : "https://start-link.jp/#organization"
  },
  "description" : "HubSpotとChatworkを連携。ワークフローからChatworkのルームへ通知を送り、CRMカード上で最新のやり取りの確認と返信ができ、紐付けたルームの新着メッセージをHubSpotのノートとして自動で記録するHubSpot連携アプリ。",
  "featureList" : [ "ワークフローアクション「Chatworkに通知」（取引・会社・コンタクト・チケット対応）", "送信先ルームIDとメッセージ本文にHubSpotのプロパティを差し込み", "取引・会社・コンタクトとChatworkルームの紐付け（全プラン無制限）", "CRMカードにルームの最新100件のメッセージを表示（Professionalプラン以上）", "CRMカードからChatworkへメッセージを送信（Professionalプラン以上）", "紐付けたルームの新着メッセージをHubSpotのノートへ自動記録（Enterpriseプラン限定）", "引用や装飾を、HubSpotのノートでも読みやすい見た目のまま記録", "OAuth接続とAPIトークン接続（SAML/SSO環境向け）に対応" ],
  "installUrl" : "https://ecosystem.hubspot.com/marketplace/listing/sync-for-chatwork-bystartlink",
  "name" : "Sync for Chatwork",
  "offers" : [ {
    "@type" : "Offer",
    "description" : "通知 月10件まで・ルーム紐付け無制限",
    "name" : "Free",
    "price" : "0",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "通知無制限・CRMカードで最新100件の表示とメッセージ送信",
    "name" : "Professional",
    "price" : "3000",
    "priceCurrency" : "JPY"
  }, {
    "@type" : "Offer",
    "billingIncrement" : "P1M",
    "description" : "Professionalの全機能＋メッセージ同期（30分ごと）",
    "name" : "Enterprise",
    "price" : "10000",
    "priceCurrency" : "JPY"
  } ],
  "operatingSystem" : "Web",
  "url" : "https://start-link.jp/sync/chatwork"
}
```