AIのいろは AI NO IROHA

Claude Code と ChatGPT の使い方を、いろはから。

Hooksで作業の一部を自動化する基本

最終更新: / レビュー日:

結論

「編集のたびに整形コマンドを打ち直す」「AIが入力待ちになったことに気づかない」。こうした細かい手間は、Hooksで消せます。Claudeが何かをする前後に、決まったコマンドを自動で走らせる仕組みです。設定はsettings.jsonというファイルに数行書くだけ。1つ作ってしまえば、あとは黙って働き続けます。

Hooksが動くタイミング

Claude Codeは、動作の節目ごとに「イベント」を発火します。イベントが起きると、条件に合うHooksが並行して実行されるという流れです。代表的なものを挙げます。

  • SessionStart … セッションが始まる、または再開したとき
  • UserPromptSubmit … 指示を送信し、Claudeが処理を始める前
  • PreToolUse … 道具が実行される前。ここで止めることもできます
  • PostToolUse … 道具の実行が成功したあと
  • Notification … Claude Codeが通知を出すとき
  • Stop … Claudeが応答を終えたとき
  • SessionEnd … セッションが終わるとき

このうちPostToolUsePreToolUseが、実務でよく使われます。前者は「やったあとに整える」、後者は「やる前に止める」用途。

何を走らせるか

Hooksには種類(type)があり、多くは"type": "command"を使います。シェルのコマンドをそのまま実行するという意味です。普段自分で打っているコマンドが、そのまま自動化の材料になります。

用途の例を挙げます。

  • 編集後の自動整形PostToolUseEdit|Writeの条件を付け、編集されたファイルのパスを整形ツールへ渡します
  • 触ってほしくないファイルの保護.envpackage-lock.json.git/配下への変更を止めます。止められた理由はClaudeに伝わるため、別の進め方に切り替わります
  • 入力待ちの通知Notificationのイベントでデスクトップ通知を出し、ターミナルを見張らずに済むようにします

前提条件

  • Claude Codeが動く状態であること
  • 走らせたいコマンドが、その環境で単体で動くこと(先に手で打って確かめておく)
  • 設定を書く場所を決めておくこと。自分専用なら~/.claude/settings.json、そのプロジェクト用なら.claude/settings.jsonです

手順

  1. 設定ファイルを開きます。無ければ新しく作ります
  2. hooksのブロックを追加し、その中にイベント名(PostToolUseなど)をキーとして書きます
  3. どの操作に反応するかをmatcherで指定します。ファイル編集に反応させるならEdit|Writeです
  4. 実行する内容を"type": "command"として書きます
  5. 保存し、Claude Codeで実際にその操作をさせて動きを見ます

すでにhooksのキーがある場合は、既存のイベントと並べて追加してください。全体を書き換えると、いままでのHooksが消えます。イベント名は1つのhooksオブジェクトの中のキーとして並ぶ形です。

検証の考え方

Hooksが成功したとき、会話には何も表示されません。動いたかどうかは結果の側で確かめます。整形のHooksなら、編集されたファイルが整形済みになっているかを開いて見るという確認になります。

公式ドキュメントは、整形の例で分かりやすい試し方を挙げています。シングルクォートを含む行をClaudeに書かせてから、そのファイルを開くという方法です。既定の設定では、それがダブルクォートに書き換わります。

限界と注意

Hooksは「決まったコマンドを決まった場面で走らせる」仕組みであり、判断を伴う作業には向きません。条件に合えば毎回走るため、時間のかかるコマンドを重い頻度で仕掛けると、待ち時間が増えます。

止める側のHooks(PreToolUse)は特に慎重に扱ってください。条件を広く書きすぎると、必要な編集まで止まります。まずは対象を狭く指定し、意図した場面だけで止まることを確かめてから広げる進め方が安全です。

学習上の注意

自動化は、うまく動いているときほど存在を忘れます。半年後の自分が読んで意味が分かるよう、何のためのHooksかを短くメモしておいてください。

そして、Hooksが動いた結果を無条件に信用しないでください。整形もチェックも、あくまで決めたコマンドの結果です。仕組みが働いたことと、望んだ状態になったことは別だと考えておくと安全です。

出典・参考

出典等級について(編集方針)