Claude Codeのhooks機能は、AIによる開発作業を自動化し、効率を飛躍的に高める強力なツールだ。しかし、この自動化の力を安全に活用するためには、どのような処理をhooksに任せるべきか、そして何に注意すべきか、その境界線を明確に理解しておく必要がある。特に、Claude Codeを初めて触る個人開発者や、AIコーディングを業務に導入しようとしている初級〜中級エンジニア、あるいは小さなチームにとって、この判断はプロジェクトの安全性と安定性を左右する重要なポイントになるだろう。(出典: Anthropic)
AIはプロンプトに従ってくれることが多いとはいえ、その振る舞いは「確率的」なシステムだ。つまり、毎回完全に予測できるわけではない。だからこそ、hooksによる「決定的」な制御、いわば確実なガードレールを設けることが、信頼性の高い開発ワークフローを構築する上で不可欠だと私たちは見ている。この記事では、Claude Codeのhooksを安全に使いこなし、開発ワークフローに組み込むための具体的な方法と、避けるべき落とし穴を解説する。AIにどこまで任せていいのか、少し不安を感じる人もいるかもしれないが、具体的な判断基準と実践例を通して、その疑問を解消していく。(出典: Claude Code)
Claude Code hooksの役割とイベントの種類

Claude Codeのhooksは、開発者がAIの動作を細かく制御し、自動化するための多くの可能性を秘めている。主な用途としては、コード品質の自動チェック、危険な操作のブロック、通知の送信などが挙げられるだろう。これにより、AIが生成したコードや実行したアクションに対して、一貫したルールと品質基準を適用できるのが大きなメリットだ。手動での確認作業を減らし、開発のスピードを落とさずに信頼性を高めたいなら、hooksの活用は避けて通れない。(出典: Connect Claude Code to tools via MCP)
hooksは、Claude Codeのライフサイクルにおける特定のイベント発生時に、シェルコマンドを自動実行させる仕組みだ。例えば、コードの書き込み後やツールの実行前など、様々なタイミングでカスタムスクリプトを走らせることができる。AIが毎回プロンプトに従ってくれるとは限らない「確率的 (probabilistic) なシステム」である以上、hooksによる確実なガードレールは、信頼性の高い開発ワークフローを構築する上で欠かせない。(出典: substack.com)
一般的なhooksイベントは、実行前に止めるもの、実行後に記録・整形するもの、セッション開始や終了に反応するものに分けて考えると分かりやすい。最初から複雑な自動化を入れるのではなく、まずは小さなガードレールを1つだけ入れ、ログと終了コードを確認しながら広げるのが安全だ。
| イベント | 使いどころ | 注意点 |
|---|---|---|
| PreToolUse | Bash実行前に危険コマンドや秘匿ファイルアクセスを止める | 条件を広げすぎると通常作業も止まる |
| PostToolUse | Edit/Write後に整形、lint、変更ログ保存を行う | 失敗しても作業ファイルを壊さない設計にする |
| Stop | Claude Codeが完了しようとした時に最終確認を走らせる | 長いテストやデプロイを無確認で走らせない |
hooks設定の基本:.claude/settings.jsonの編集
hooksを設定するには、プロジェクトルートにある.claude/settings.jsonファイル、またはユーザーグローバル設定の~/.claude/settings.jsonを編集する。プロジェクト固有のルールを適用するには、プロジェクトレベルの.claude/settings.jsonを使うのが一般的だ。(出典: reddit.com)
設定はJSON形式で記述され、hooksブロックの中にイベントの種類、マッチング条件、実行するコマンドを定義する。

{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "./.claude/hooks/block-dangerous-commands.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
]
}
}
この設定例では、PreToolUseで危険なBash実行を事前に止め、PostToolUseで編集後の整形を試みる。実務では、いきなり全ファイルへ広げず、対象コマンドや対象ファイルを絞ってログを確認する。
安全なhooks活用の境界線:任せるべき処理と避けるべき処理
hooksは強力だが、その分リスクも伴う。Redditの議論などを見ると、安易なhooks設定が意図しないファイル削除やリポジトリ破壊につながったケースも報告されている。hooksはユーザーが持つ完全な権限で任意のシェルコマンドを実行するため、設定を誤るとファイル削除、秘密情報の漏洩、意図しないコード実行などの重大なセキュリティ問題を引き起こす可能性がある。

特に、以下の点に注意が必要だ。
- 破壊的なコマンドの自動実行:
rm -rfやgit reset --hard、git push --forceのようなコマンドは、無確認で自動実行されると取り返しのつかない事態を招く。これらは必ずPreToolUseフックでブロックするか、人間による明示的な承認を要求すべきだ。
人間が確認するリスト
- 差分に、依頼していないファイル変更が混ざっていないか。
- テスト、lint、型チェックの結果がログで確認できるか。
- .mcp.jsonやsettings.jsonに秘密情報の実値が入っていないか。
- MCPの権限が、今回の作業に必要な範囲だけになっているか。
- 問題が出たときに、Git差分を戻せる単位で作業できているか。
実践例:危険なGitコマンドのブロックと自動フォーマット
hooksの具体的な活用例を見ていこう。まずはセキュリティのガードレールとして、危険なGitコマンドをブロックする例だ。
依頼例:危険なGitコマンドのブロック
以下の設定は、git push --forceやgit reset --hardなどの危険なGitコマンドをPreToolUseフックでブロックする例だ。
Claude Codeへの依頼例
依頼例1:
対象ファイル: .claude/settings.json と .claude/hooks/block-dangerous-commands.sh
変更範囲: Bash実行前に git reset --hard、git push --force、rm -rf を止めるPreToolUse hookを追加する
制約: 既存設定を消さず、ブロック時は理由をstderrに出す
確認観点: 通常のgit statusは通り、危険コマンドだけが止まるか
依頼例2:
対象ファイル: .claude/settings.json と package.json
変更範囲: EditまたはWrite後に対象ファイルだけprettierを走らせるPostToolUse hookを追加する
制約: 失敗しても作業ファイルを壊さず、対象外ファイルへ広げない
確認観点: hookのログ、終了コード、差分の範囲を確認できるか
hooksのデバッグと人間による最終確認

hooksはバックグラウンドで自動実行されるため、意図しない挙動やエラーが発生した場合のデバッグが重要になる。
-
デバッグログの活用:
claude --debugオプションでClaude Codeを起動すると、hooksの実行状況やエラーの詳細なログを確認できる。 -
スクリプトの単体テスト: hooksに登録するスクリプトは、Claude Codeを介さずに直接ターミナルで実行し、期待通りに動作するかを検証すべきだ。
AI開発フローにおけるhooks、MCP、Skillsの連携
Claude Codeを導入する際、AIの能力を最大限に引き出しつつ、人間がコントロールを失わないためのフローを確立することが重要だ。特にMCP(Model Context Protocol)やSkillsの範囲を人間が明確に決めることで、AIの自律性と安全性のバランスを取れる。
MCP(Model Context Protocol)は、AIが外部のツールやサービスと連携するためのプロトコルだ。AIはMCPを通じて、APIの呼び出しやCLIコマンドの実行といった外部アクションを定義し、実行できる。例えば、CI/CDパイプラインをトリガーしたり、プロジェクト管理ツールのタスクを更新したりといった連携が可能になる。
Skillsは、特定のタスクを実行するためのAIの能力定義であり、AIに定型作業を任せるための手順書のようなものだ。例えば、「新しいコンポーネントを作成する」「バグを修正する」といった具体的なスキルを定義することで、AIはより複雑な開発タスクを効率的にこなせるようになる。
次に検討したいこと
Claude Codeのhooksは、AI開発の効率と安全性を両立させるための鍵となる機能だ。本記事で紹介したように、hooksには自動化を加速する大きなメリットがある一方で、誤った使い方をすると重大なリスクも伴う。まずはシンプルなテストやフォーマットの自動実行から始め、徐々にPreToolUseフックによるガードレールの導入を検討していくのが現実的だろう。
次にステップとして、より高度なhooksの活用を考えるなら、以下のような視点も持っておきたい。
- MCPツールとの連携の深化: Model Context Protocol (MCP) を利用して、hooksから外部ツール(CI/CDパイプライン、プロジェクト管理ツールなど)をトリガーする方法を検討する。例えば、特定の条件を満たした場合にCI/CDパイプラインを自動起動させたり、プロジェクト管理ツールのタスクステータスを更新したりといった連携が考えられる。これにより、AIが開発プロセス全体にシームレスに組み込まれる。
参考文献
Anthropic Claude Code Connect Claude Code to tools via MCP substack.com medium.com reddit.com Best practices for Claude Code Claude Code
