Claude Code の Hooks 機能を設定したら、ルーティン作業がかなり自動化された話

Claude Code の Hooks 機能を使ってセッション開始時や各ツール実行前後に処理を自動化した体験談です。設定方法から実際の使い方、ハマりポイントまでまとめました。

Claude Code のターミナル画面にシェルコマンドが自動実行されているイメージ

👀 結論から

Claude Code の Hooks 機能を使うと、セッション開始時や各ツール実行前後にシェルコマンドを自動で走らせることができます!

私は SessionStart フックに git status と型チェックを設定してから、「セッションを開いた瞬間にリポジトリの状態が把握できている」状態が当たり前になりました。

設定自体は ~/.claude/settings.json に数行書くだけです。

まだ試していない人はぜひ読んでいってください(^o^)/

🔍 Hooks 機能とはなにか

Claude Code の Hooks は、特定のタイミングでシェルコマンドを自動実行できる仕組みです。

現時点で使えるフックのタイミングは以下の4種類:

  • SessionStart: セッション開始時
  • PreToolUse: Claude がツールを呼ぶ直前
  • PostToolUse: Claude がツールを呼んだ直後
  • Stop: セッション終了時

それぞれのタイミングに任意のシェルコマンドを設定できるので、「AIが作業を始める前に必ず確認したいこと」を自動化できます!

🛠 実際に設定した内容

私がまず設定したのは SessionStart フックです。

~/.claude/settings.json に以下のように書きます:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "git status && echo '---' && git log --oneline -5"
          }
        ]
      }
    ]
  }
}

これを設定すると、セッションが始まった瞬間に git status と直近5コミットのログが自動的に出力されます!

「どのブランチで作業しているか」「未コミットのファイルはあるか」という情報がAIにも伝わった状態でセッションが始まるので、最初にわざわざテキストで状況を説明しなくてよくなりました(`・ω・´)

さらに型チェックコマンドも追加してから、セッション開始直後に型エラーがあるかどうかもすぐ分かるようになりました。

「これを入れる前に気づいていなかった型エラーがある」という状況が何度かあって、意外と見落とし防止になっています!

✨ 使い始めてからの変化

Hooks を使い始めてから一番変わったのは、セッション冒頭の「状態確認」にかける時間がほぼゼロになったことです。

以前は Claude Code を開くたびに「今のブランチはこれで、未コミットのファイルはこれで…」と毎回手入力で伝えていました(´・ω・`)

Hooks を入れてからは、その手間がなくなって本題の作業にすぐ入れるようになりました!

PreToolUse フックを使うと、Bash ツールが実行される直前に特定の処理を挟むこともできます。

たとえば「rm コマンドが実行される直前にその内容をログファイルに残す」という設定もできて、作業の安全網としても機能します。

💡 気になった点とハマりポイント

Hooks は便利な反面、設定を間違えるとセッション起動自体がブロックされることがあります(・_・;)

私が実際にハマったのは、コマンドが 0 以外の exit code を返したときです。

デフォルトでは、フックのコマンドが失敗するとその後の処理が止まる設定になっています。

コマンドの末尾に || true を付けて必ず成功扱いにするか、事前に動作確認してから設定に追加するのがよいと思います!

また、プロジェクトごとに設定を分けたい場合はグローバルの ~/.claude/settings.json ではなく、プロジェクトルートの .claude/settings.json を使うのが正解です。

この2つだけ押さえておけば、あとは試しながら育てていけます(^_^)

🛡 PreToolUseで危険なコマンドをブロックする安全弁も作った

確認作業の自動化に慣れてきたところで、もう一歩踏み込んで危険な操作そのものを止める仕組みも作ってみました。

PreToolUse はツールが実行される「直前」に発火するフックです。ここでコマンドの中身をチェックして、危なそうなものだったら実行自体をブロックできます。

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

block-dangerous.sh の中で rm -rfgit push --force のようなパターンが含まれていないかチェックして、該当したら exit 2 を返すようにしています。

exit 2 を返すと、Claude Code はそのツール呼び出し自体をブロックして、理由をAIにフィードバックしてくれる仕組みになっています。

私は一度、意図せず git push --force が実行されそうになったことがあって、それ以来この安全弁を入れています(・_・;)

PostToolUse は実行「後」に発火するので、そこで気づいても取り消せません。本当に危険な操作は PreToolUse で止めるしかないというのを、この一件で学びました。

git 操作以外にも「本番環境のURLを含むコマンド」「特定のディレクトリより上を触るコマンド」など、自分のプロジェクトでヒヤッとした経験があるパターンを少しずつ安全弁に足しています。

パパ系Webエンジニア〜愛用ガジェット一覧 🛍️

AI開発・執筆に使っている作業デスク環境を楽天ROOMにまとめています ✨ デスク周りの参考にどうぞ 🙌

🙌 まとめ

Claude Code の Hooks 機能、設定は思ったより簡単で、ルーティン的な確認作業をかなり省力化できます。

まず SessionStart に git status だけ入れてみるところから始めると、効果を実感しやすいと思います!

毎回同じコマンドを手で打ち直している人には、相当便利に感じるはずです。

ぜひ試してみてください🙌

※ Hooks で使えるイベントの種類や仕様は今後も追加・変更される可能性があります。最新の情報は Claude Code 公式ドキュメント をご確認ください👀