【非エンジニア向け】Claude Code hooksの使い方|通知・削除確認の設定例

Claude Codeのhooksが動く4つのタイミング。ツールの実行前と実行後、通知時、返答が終わったとき 生成AI・AIツール

この記事では、ClaudeCodeのhooksについて解説していく。

skillsだの、hooksだの、effortだの、小難しいことをぺちゃくちゃ言いやがって、という気持ちはわかる。ただ、hooksの優先度は正直「中」くらい。なくても困らないけど、あると便利って感じ。

端的にいうと、hooksは「決まったタイミングで、決まった処理を必ず実行させる」機能だ。

非エンジニアにとっては、どんなときにどんなhooksを設定するのか、具体的なケースがわかった方がイメージしやすいと思う。なので、この記事では仕組みの説明はほどほどにして、使いどころを中心に紹介していく。

ClaudeCodeを触り始めたばかりの人や、一歩進んだ使い方をしたい人の参考になれば幸い。

ClaudeCodeの初心者向け講座を公開しているのでこちらもぜひ

ClaudeCode入門シリーズ(YouTube)

ClaudeCodeのhooksとは

全体像をさくっと説明

hooksは、「〇〇したタイミングで、××を実行する」というルールをClaudeCodeに登録しておく機能だ。

たとえば、こんなことができる。

  • Claudeの返答が終わったら、音を鳴らす
  • Claudeがファイルを編集したら、自動で整形ツールをかける
  • Claudeが特定のコマンドを実行しようとしたら、止める

この「〇〇したタイミング」のことを、公式ドキュメントでは「イベント」と呼んでいる。イベントは30種類以上あるけど、最初に知っておくのは次の4つくらいで十分。

  • Stop:Claudeが返答を終えたとき
  • Notification:ClaudeCodeが通知を出すとき(許可待ち・入力待ちなど)
  • PreToolUse:Claudeがツール(ファイル編集やコマンド実行など)を使う直前
  • PostToolUse:Claudeがツールを使い終わった直後
Claude Codeのhooksが動く4つのタイミング。ツールの実行前と実行後、通知時、返答が終わったとき

そして「××を実行する」の中身は、基本的にシェルコマンド(ターミナルで打つ命令)で書く。ここがCLAUDE.mdやskillsとの大きな違いだ。自然言語でお願いするというより、コードで「この処理を走らせろ」と指定するイメージ。

ちなみに、コマンドの代わりにClaudeのモデルに判断させる prompt タイプや agent タイプもある。ただ、まずは「hooksはコマンドで書くもの」と思っておけばOK。

それってCLAUDE.mdでいいのでは?

ここまで読んで、少しClaudeCodeを触ったことがある人なら「CLAUDE.mdに『〇〇のときは××して』って書いておけばいいんじゃない?」と思うかもしれない。

結論、確実にやらせたいことはhooksに書いた方がいい。

というのも、CLAUDE.mdに書いたルールは結構な頻度で守られないから。めっちゃ簡単な例だと、「日本語で返して」と書いてあっても英語で返ってくることがある。

CLAUDE.mdは、あくまで自然言語で「お願い」をしている感覚に近い。Claudeは読んだうえで従おうとはするけど、そこまでの厳密さはない。

一方でhooksは、決められたタイミングが来たらClaudeCode本体が処理を実行する。Claudeが「やるかどうか」を判断する余地がないんだ。公式ドキュメントでも、hooksはLLMが実行を選ぶかどうかに頼らず、特定の処理を必ず実行させるための仕組みだと説明されている。

使い分けとしてはこんな感じ。

  • CLAUDE.md:文体、方針、プロジェクトの前提など、Claudeに「理解してほしい」こと
  • hooks:通知、ブロック、自動整形など、毎回「必ず実行してほしい」こと
CLAUDE.mdには方針を自然言語で書き、hooksには特定のタイミングで実行する処理を書く

どうやって設定する?

設定の流れはざっくり3ステップ。

ただ、これらはClaudeCodeに「〇〇のhooksを設定して」と言えば簡単に設定できてしまうので、参考程度に見てもらえればOK。

① 設定ファイルにhooksを書く

hooksは settings.json という設定ファイルに書く。置き場所によって効く範囲が変わる。

  • ~/.claude/settings.json:自分のPCの全プロジェクトで有効
  • .claude/settings.json(プロジェクトのフォルダ内):そのプロジェクトだけで有効。チームで共有できる
  • .claude/settings.local.json(プロジェクトのフォルダ内):そのプロジェクトだけで有効。自分専用
Claude Codeのhooks設定ファイルの適用範囲。全プロジェクト、プロジェクト共有、プロジェクト内で自分専用

公式ドキュメントでも、やりたいことを伝えてClaudeにhooksを書いてもらう方法が紹介されている。

② /hooks で確認する

ClaudeCodeの入力欄で /hooks と打つと、設定されているhooksの一覧がイベントごとに表示される。ここに出てくれば登録はできている。

③ 実際に動かして試す

最後に、hooksが発動する状況を作って確認する。通知のhooksなら、Claudeに何か作業を頼んで、終わったときに通知が来るかを見ればOK。

ただ、hooksは自分のPCの上で、普通にコマンドとして実行される。中身がよくわからないhooksを、ネットからコピペして貼るのはやめておいた方がいい。Claudeに設定を頼んだときも、何をするコマンドなのかは一言説明してもらうのがおすすめ。

公式が紹介している使い方

抽象的な説明だけだとイメージしづらいと思うので、公式ドキュメントで紹介されている使い方をいくつか紹介する。

ファイルを編集したら自動で整形する

PostToolUse イベントを使う。Claudeがファイルを編集・作成した直後に、整形ツール(Prettier)を自動で実行する。

整形ツールは、文書の見た目を毎回同じルールに揃えてくれるツール。PrettierはMarkdownにも使えて、箇条書きの記号や空行のバラつきを自動で直してくれる。

また、実行するのは整形ツールでなくてもいい。原稿を編集したら校正ツール(textlintなど)で誤字をチェックする、といった使い方もできる。

大事なファイルの編集をブロックする

PreToolUse イベントを使う。Claudeが .env(パスワードやAPIキーなどを置くファイル)や .git/ の中身を編集しようとしたら止める。

つまり、「このファイルだけは触るな」というリストを作っておける。非エンジニアなら、公開済みの原稿や契約書のフォルダを入れておくイメージだ。

止めた理由はClaudeにも伝わる。なので、作業がそこで止まるのではなく、Claudeは別のやり方を考えてくれる。

特定の許可確認を自動で承認する

PermissionRequest イベントを使う。毎回「許可しますか?」と聞かれる操作のうち、決まったものだけを自動で許可する。

公式の例は、プランモードの確認。プランモードは、Claudeが作業の前に計画を出してくれるモードだ。計画ができるたびに「このまま進めていい?」と聞かれるので、この確認だけを自動で通す。

「どうせ毎回許可している確認」で作業が止まっているなら、そこを省けるわけだ。

ただ、対象を広げすぎると、ファイルの書き込みやコマンドの実行まで全部素通りになる。対象はできるだけ狭くしておこう。

非エンジニアが使うとしたら

ここまでは公式情報をもとに紹介してきた。ここからは、実際に僕がやっている設定を紹介するので、イメージを膨らませる参考にして欲しい。

基本的に、自分で処理を書く必要はない。ClaudeCodeに「〇〇のhooksを設定して」と頼めば大丈夫。

処理の完了・入力待ちを通知する

macOSに表示されたClaude Codeの「タスクが完了しました」通知

ClaudeCodeの処理が終わったときと、ユーザーの入力待ちになったときに、音とバナーで通知が来るようにしている。

これがないと、

「さっき頼んだタスクどうなってるかな〜」→ とっくに終わっている or 入力待ちで全然進んでいない → 悲しい

という事態が普通に起きる。

こだわりポイントは、音(聴覚)とバナー(視覚)の両方で知らせること。どっちか片方だと、地味に見逃す。

使っているのは次の2つのイベント。

  • Stop:Claudeが返答を終えたら、効果音を鳴らして「タスクが完了しました」とバナーを出す
  • Notification:許可待ち・入力待ちになったら、同じ効果音を鳴らして「入力待ちです」とバナーを出す
StopとNotificationを使い、作業完了や入力待ちを音とバナーで知らせる設定例

ClaudeCodeには「処理が終わったときと入力待ちのときに、音とバナーで通知するhooksを設定して」と頼めばOK。

ただ、Stop はタスクが全部終わったときではなく、Claudeが返答を終えるたびに鳴る。途中で質問を返してきたときにも「完了しました」と出るので、そこだけ注意。

また、Macでバナーが出ないときは、システム設定の「通知」で「スクリプトエディタ」を許可しよう。

これは最初に設定しておくのを強くおすすめする。

ファイルを削除するときにユーザーに確認を求める

ClaudeCodeをはじめとするAIが取りうる一番破壊的な行動は、ファイルやフォルダの削除だと思っている。

元に戻せないこともあって、やられると結構絶望する。

そうならないように、ファイルを削除するときにはユーザーに確認を求めるhooksを入れておくのがおすすめ。

仕組みとしては、PreToolUse イベントで、Claudeが rm(削除のコマンド)を含むコマンドを実行しようとしたタイミングを捕まえる。そこで、いきなり実行させずに「許可しますか?」の確認を出させる(または完全にブロックする)。

ClaudeCodeには「rm を含むコマンドを実行する前に、毎回確認を出すhooksを設定して」と頼めばOK。

ただ、hooksでの判定は完璧ではない。rm 以外の方法でもファイルは消せるからだ。

公式ドキュメントでも、コマンドの絞り込みはベストエフォート(できる範囲での判定)だとされている。確実に許可・拒否したいなら、権限設定(permissions)を使うよう案内されている。hooksは保険の一枚と考えて、権限設定と組み合わせるのが安心。

まとめ〜確実に何かを実行させたい時に使え〜

最後に、今回の内容を振り返っておく。

  • hooksは「決まったタイミングで、決まった処理を必ず実行させる」機能
  • CLAUDE.mdは「お願い」、hooksは「仕組み」。確実にやらせたいことはhooksに書く
  • 設定はClaudeCodeに頼めばOK。/hooks で一覧を確認できる
  • 最初に入れるなら、完了・入力待ちの通知がおすすめ

hooksは、なくてもClaudeCodeは使える。ただ、使っているうちに「毎回これをやってほしい」「これだけは絶対にやらないでほしい」という場面がだんだん出てくる。

そのときにCLAUDE.mdに書き足すのではなく、hooksにする。この選択肢を持っておくだけで、ClaudeCodeとの付き合い方は一段ラクになると思う。

自分なりのhooksを作るヒントになれば嬉しい。

出典:

東京在住の25歳。
後先は考えないタイプで、高校受験、東大受験(現役・浪人)ともに併願なしで挑んでました。
東京大学文科1類に運良く合格。法学部に進みましたが、一番面白かったのはICT系・芸術の授業でした。
興味が続かずに弁護士にはならず、ITベンチャー企業で働いています。
動画編集、プログラミング、最近はAIなど色々やってます。

yuta|生活を豊かにするAI・自動化をフォローする
生成AI・AIツール
シェア・ご感想などお待ちしております!
yuta|生活を豊かにするAI・自動化をフォローする
タイトルとURLをコピーしました