😽

Claude Code Hooksとは?Slackと連携させてみた

に公開

はじめに

Claude Codeから「Hooks」という概念が登場しました。
https://docs.anthropic.com/en/docs/claude-code/hooks

Claude Code Hooksとは?

Hooksは、Claude Codeの特定のタイミングでコマンドを実行できるようにする機能です。

これは、例えば以下のようなイベント発生時に、ユーザーが設定した処理を自動的に実行できる仕組みです。

  • PreToolUse: ツールが呼び出される前
  • PostToolUse: ツールが正常に完了した後
  • Notification: 通知が送られる時(例: 承認リクエスト時)
  • Stop / SubagentStop: メインエージェントまたはサブエージェントの応答が完了した時(例: タスク完了時)

Hooksを使うことで、Claude Codeが生成するコードやその実行プロセスに対して、開発者が独自のロジックを挿入し、より細かく制御することが可能になります。

Claude Code Hooks + Slack

普段使っているSlackと連携して、Claude Code Hooksを体験してみましょう。簡易ではありますが、Claude Codeが承認待ちのときにSlackで通知してくれるものを作ってみましょう。

Slack Webhook URLの取得

まずはSlackのWebhook URLを取得しましょう。以下の記事がとてもわかりやすいので、参考になります。
https://zenn.dev/hotaka_noda/articles/4a6f0ccee73a18

Webhook URLが手に入ったら、実際に**curlコマンドを使ってSlackに通知が届くか試してみましょう。

curl -X POST -H 'Content-type: application/json' -d '{"text":"テスト通知"}' <WEBHOOK_URL>

実際に通知がくることが確認できたらClaude Code Hooksに登録しましょう。

/hooksでコマンドを登録

今回は承認待ちのときにSlackへ通知して欲しいので、Notificationを選択します。

「+ Add new hook...」をEnterすると画像のとおり、Commandを入力する画面になります。
以下のコマンドを入力します。

curl -X POST -H 'Content-type: application/json' --data '{"text":"🤖 Claude Codeが入力を待っています"}' <WEBHOOK_URL>

以上です。簡単ですね。

通知がきてるかテスト

実際に通知が来るかテストしてみます。

問題なく通知が来ました。これまでの流れを通して、とても簡単に通知を送るまでに至りました。

登録したCommandの場所

「+ Add new hook...」からCommandを追加しました。どこへ登録されるのでしょうか。ドキュメントによると、/hooksで登録したコマンドは以下の設定ファイルに保存されます:

保存場所の選択肢:

  1. ~/.claude/settings.json - ユーザー設定

    • すべてのプロジェクトに適用される
    • ホームディレクトリに保存
  2. .claude/settings.json - プロジェクト設定

    • 特定のプロジェクトのみに適用
    • プロジェクトルートに保存(コミット対象)
  3. .claude/settings.local.json - ローカルプロジェクト設定

    • 特定のプロジェクトのみに適用
    • プロジェクトルートに保存(コミットされない)

設定ファイルの構造例:

{
  "hooks": {
    "preToolUse": {
      "Bash": [
        {
          "type": "command",
          "command": "echo \"$(date): Running $(echo \"$CLAUDE_INPUT\" | jq -r .tool_name) with args: $(echo \"$CLAUDE_INPUT\" | jq -r .tool_input)\" >> ~/claude_commands.log"
        }
      ]
    }
  }
}

ドキュメントのQuickstartの例では、User settingsを選択することで~/.claude/settings.jsonに保存され、すべてのプロジェクトで有効になることが示されています。

設定を確認したい場合は、再度/hooksコマンドを実行するか、直接該当する設定ファイルを確認できます。

[Tips]Hooksによるフィードバック

Hooksを使用することで生成したコードにフィードバックを与えることもできます。
PostToolUseフックを使って、ファイル作成後に英語への翻訳を促すフィードバックを送る設定を作成します。

「こんにちは世界」と書いたgreeting.txtを作成して

とClaudeにお願いしてみましょう。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "echo \"[$(date)] Hook triggered\" >> ~/hook_test.log && echo '{\"decision\": \"block\", \"reason\": \"日本語ファイルを検出しました。英語版で作成してください。\"}'"
          }
        ]
      }
    ]
  }
}

日本語を検知してHooksによるフィードバック与え、修正させることができました。

この仕組みは、Lintやフォーマッターとの連携にも活用できます。例えば、BiomeやESLintを実行した際に自動修正できないエラーが検出された場合、そのエラー内容をフィードバックとしてClaudeに送信することで、自動的に修正を促すワークフローを構築できます。

まとめ

Claude Code Hooksを使うことで、開発ワークフローを簡単に自動化できることがわかりました。

今回できたこと:

  • Slack通知でClaude Codeの承認待ちを見逃さない
  • 生成されたコードに自動でフィードバックを送る

Hooksは効率的にする強力なツールとなりそうです。シンプルな設定から始めて、徐々に自分のワークフローに合わせてカスタマイズしていきましょう。
より複雑な自動化へ挑戦していきたいです。

Discussion