ホームClaude Code › Claude Codeの「Hooks」で作業を全自動化する発想法——Xエンジニアたちの実践から学ぶ
初心者

Claude Codeの「Hooks」で作業を全自動化する発想法——Xエンジニアたちの実践から学ぶ

🎓 生成AI活用の勉強会・無料相談・最新情報をお届けします

オンライン勉強会の案内や、無料相談、ChatGPT・Claude活用の具体例をメールでお届けします。登録は無料、いつでも解除できます。

作業が終わるたびに「テスト走らせておくか」「フォーマッターかけとかないと」と自分でコマンドを打ち直す。そのたびに思考が途切れる。Claude Codeを使い始めてしばらく経つと、多くの人がこの「ちょっとした手動作業」に気づきます。

Claude Codeに搭載されている「Hooks(フック)」機能は、その煩わしさをゼロにする仕組みです。Claudeが何かをする「前」や「後」に、あなたが指定したコマンドを自動で実行させられる。Xのエンジニアコミュニティでは、この機能を使いこなすことで「AIとの共同作業が別次元になった」という声が続々と上がっています。

この記事では、Hooksの基本的な仕組みから、Xエンジニアたちが実際に試している応用パターン、そしてあなたのプロジェクトにすぐ導入できるTipsまでを、具体的にお伝えします。

Hooksとは何か——「割り込み自動化」の発想

Webhookに似た、イベント駆動の設計思想

Hooksをひとことで表すなら「Claudeの行動に割り込む仕掛け」です。プログラミングに慣れた人であれば、Webhookや各種フレームワークのライフサイクルフックと同じ発想だとすぐ理解できるでしょう。慣れていない方でも、「電子レンジが加熱を終えたらビープ音が鳴る」ようなイメージで考えると分かりやすい。

Claude Codeには現在、主に以下のタイミングでHooksを設定できます。

  • PreToolUse:ツール(コード編集・コマンド実行など)を使う直前
  • PostToolUse:ツールを使った直後
  • Notification:Claudeが通知を送るタイミング
  • Stop:Claudeが作業を完了し停止するとき
ポイント:Hooksはあなたのローカル環境で動くシェルコマンドを直接実行します。APIコストは追加でかかりません。つまり、設定にかかるのは最初の30〜60分の作業時間だけで、それ以降は永続的な自動化が手に入ります。

設定ファイルの基本構造を把握する

HooksはClaude Codeの設定ファイル(claude_code_config.jsonまたはプロジェクトの.claude/settings.json)に記述します。構造はシンプルで、「どのイベントで」「どんな条件のときに」「何を実行するか」を書くだけです。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint --silent"
          }
        ]
      }
    ]
  }
}

上記の例は「ファイルを書き換えるツール(Write/Edit/MultiEdit)を使った直後に、自動でlintを走らせる」という設定です。matcherには正規表現が使えるので、特定のツールだけに絞り込むことが可能です。

グローバル設定とプロジェクト設定を使い分ける

設定には2種類あります。ホームディレクトリに置くグローバル設定は、すべてのプロジェクトに適用されます。プロジェクトルートの.claude/以下に置くプロジェクト設定は、そのプロジェクト内だけで有効です。

Xのエンジニアが推奨しているのは「通知系はグローバル、コード品質チェックはプロジェクトごと」という使い分けです。言語やフレームワークによってlintコマンドが変わるので、これは理にかなっています。

Xエンジニアたちの実践パターン——こんなことが自動化できる

パターン1:コード変更のたびに自動テスト+通知

最も多く紹介されているのが「ファイル変更→テスト自動実行→Slack通知」の連鎖です。Claudeがコードを修正するたびにテストが走り、結果がSlackに届く。あなたはコーヒーを飲みながら結果を待つだけです。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'npm test --silent 2>&1 | tail -5 | curl -s -X POST https://hooks.slack.com/services/YOUR_WEBHOOK -d "{\"text\": \"$(cat)\"}""
          }
        ]
      }
    ]
  }
}

これを設定している開発者によれば、「1時間の作業セッションで平均12回のテストが自動実行される。手動でやっていた頃は、まとめて3〜4回しかやらなかったので、バグの発見が格段に早くなった」とのこと。

パターン2:作業完了を音や通知で知らせる

Claudeに長い作業を依頼して別のタスクをこなしていると、完了したことに気づかず待ち時間が発生します。Stopイベントを使えば、作業完了を音やデスクトップ通知で知らせることができます。

macOSユーザーなら次の設定が使えます。

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification "Claudeの作業が完了しました" with title "Claude Code" sound name "Glass"'"
          }
        ]
      }
    ]
  }
}

Windowsならpowershell -Command "New-BurntToastNotification -Text 'Claude完了'"、Linuxならnotify-send "Claude完了"が対応するコマンドです。

実測値:「通知を入れるだけで、1回あたりの待ち時間が平均2〜3分短縮された。1日10回の作業セッションなら20〜30分の節約。月換算で600〜900分≒10〜15時間分の時間が浮く計算になります」(Xの開発者コミュニティより)

パターン3:危険なコマンドを実行前にブロック

PreToolUseを使う例として注目されているのが「安全ガード」の設定です。Claudeが本番環境への接続コマンドや、rm -rf系の破壊的操作を実行しようとしたとき、実行前にスクリプトで検知してブロックする仕組みです。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/safety_check.py"
          }
        ]
      }
    ]
  }
}

safety_check.pyの中では、実行しようとしているコマンド文字列(環境変数経由で渡されます)を解析して、NGワードが含まれていれば終了コード2を返してブロック、問題なければ終了コード0を返して通過させるという仕組みを作ります。このパターンは「AIに任せる範囲を広げるための安心装置」として、Xのシニアエンジニアの間で特に好評です。

Hooksを自分のプロジェクトに導入する手順

ステップ1:まず1つの小さなHookから始める

最初から複雑な設定を組もうとすると、デバッグが大変になります。Xのエンジニアが口を揃えて言うのは「最初の1週間は1つのHookだけ使え」ということ。

  1. プロジェクトに.claude/ディレクトリを作る
  2. .claude/settings.jsonファイルを新規作成する
  3. まず「作業完了通知」だけを設定して動作確認する
  4. 動いたら、次の1つを追加する

最初の設定作業は30分もあれば十分です。Claude Code自体に「Hooksの設定を手伝って」と頼めば、プロジェクト構成を読み取ったうえで適切な設定ファイルを生成してくれます。

ステップ2:Hookの出力とデバッグを理解する

Hookが正しく動いているか確認するには、Claude Codeのログを確認します。実行中のターミナルに[Hook]から始まるログが流れていれば、Hookが呼び出されています。

よくあるつまずきポイントとその対処法:

  • コマンドが見つからないエラー:HookはClaude Codeのシェル環境で動くため、.bashrc.zshrcのPATHが読み込まれないことがある。フルパスで指定する(例:/usr/local/bin/npm)か、bash -l -c '...'でログインシェルとして実行する
  • Hookが実行されない:matcherの正規表現が間違っている可能性。まず.*(全マッチ)で試してから絞り込む
  • 無限ループ:PostToolUseのHookがファイルを書き換えると、また別のPostToolUseが発火することがある。Hook内でのファイル書き換えは慎重に

ステップ3:チームで共有する設定を育てる

プロジェクト設定ファイル(.claude/settings.json)はGitで管理できます。チームの誰かが良いHookを思いついたらプルリクエストで共有する、という文化を作ると、プロジェクトの自動化が雪だるま式に育っていきます。

注意:Hookにはシークレット(APIキーやWebhook URL)を直接書かないようにしましょう。環境変数を使うか、設定ファイルを.gitignoreに入れる工夫が必要です。グローバル設定ファイルはGitで管理せず、ローカルに置くのが安全です。

さらに一歩進んだHooks活用アイデア

作業ログを自動で記録してコスト管理に活かす

Stopイベントを使って、セッションごとの作業内容をローカルのMarkdownファイルに追記していく設定が人気です。「Claudeが何をやったか」の履歴が残るので、後から振り返りやすくなります。

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo "[$(date '+%Y-%m-%d %H:%M')] セッション終了" >> ~/claude_sessions.log"
          }
        ]
      }
    ]
  }
}

このログをもとに「Claude Codeを使っている時間帯」「1日のセッション数」などを分析すると、どの作業でAIが最も役立っているかが見えてきます。月額コストと照らし合わせて費用対効果を測るのにも使えます。

フォーマッターとセキュリティスキャンを組み合わせる

実際にX上で公開されているHooks設定の中でも評価が高いのが、コード変更後に複数のチェックをチェーンで走らせるパターンです。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'cd $PROJECT_ROOT && prettier --write . --log-level warn && eslint . --fix --quiet && npm audit --audit-level=high'"
          }
        ]
      }
    ]
  }
}

prettier(コード整形)→ ESLint(コード品質)→ npm audit(セキュリティ)の順に走らせることで、Claudeが書いたコードが常に一定の品質水準を保つようになります。「Claudeにコードを書かせた後、自分でlintを走らせるのを忘れてそのままコミットしてしまった」という事故がなくなります。

Hooksを使った「自己修正ループ」の設計

上級者向けのアイデアとして、テストの失敗をClaudeにフィードバックする「自己修正ループ」があります。PostToolUseでテストを走らせ、失敗した場合だけその結果をファイルに書き出す。そのファイルをClaude Codeが次のプロンプトで参照できるようにしておく、という仕組みです。

完全な自律修正は現時点では設定の複雑さが増しますが、「テスト結果だけをログに残す→自分でそれをClaude Codeに貼り付けて修正依頼」という半自動化でも、体感として作業速度が1.5〜2倍になるという報告がXで複数上がっています。

まとめ——Hooksは「Claude Codeをカスタム化する権利」

Claude CodeのHooksを一通り見てきて、感じていただけたことがあるとすれば、「これはAIツールを自分の働き方に合わせてカスタマイズする仕組みだ」ということではないでしょうか。

ほとんどのAIツールは「提供された機能をそのまま使う」ものです。しかしHooksは違う。Claudeが動くたびに、あなたが組んだルールが走る。品質チェック、通知、安全ガード、ログ記録——どれもあなたの仕事のやり方に合わせて設計できます。

  • 設定の初期コスト:30〜60分
  • 継続的なメリット:毎日15〜30分の手動作業がなくなる
  • 追加のAPIコスト:ゼロ(ローカルコマンドが動くだけ)

最初の一歩は小さくていい。「作業が完了したら音で知らせる」だけでいい。それを設定して使ってみれば、次に何を自動化したいかが自然と見えてきます。あなたのプロジェクトに合ったHooksを少しずつ育てていく——それが、Claude Codeを「使えるツール」から「自分だけの相棒」に変える道です。