Claude Codeには「変化があった時だけAIが起きる」仕組みがある。
hooks・channelsを使えば、
何も変わってない時のトークン消費がゼロになる。
定期チェック(/loop)からイベント駆動(hooks/channels)に切り替えるだけで、
長時間の監視タスクのトークン効率が劇的に変わる。
この記事では3つの仕組みを、かんたんなものから順に解説する。
Claude Codeのトークン消費を減らしたい人。
長時間の監視タスクを効率化したい人。
そういう人向けの記事だ。
Claude Codeの定期チェックとイベント駆動、何が違う?
Claude Codeの「監視」には、2つのやり方がある。
1つ目が「ポーリング」。
定期チェックのことだ。
Claude Codeの /loop という機能を使うと「5分ごとにビルドの状態を見て」みたいな定期実行ができる。
便利なんだけど、
問題がある。
ビルドが終わってなくても、
エラーが出てなくても、
5分ごとにClaude Codeが起きてチェックする。
「何も変わってません」という報告のために、
毎回トークンを消費するわけだ。
地味にもったいない。
2つ目が「イベント駆動」。
変化があった時だけ反応する方式だ。
Claude Codeの「hooks」と「channels」がこれにあたる。
hooksは「Claude Codeの中で何かが起きた時」に発動するスクリプト。
channelsは「外のシステムからClaude Codeに通知を送る」パイプライン。
どっちも、
変化がない時はトークンを一切消費しない。
| /loop(ポーリング) | hooks / channels(イベント駆動) | |
|---|---|---|
| 動くタイミング | 設定した間隔で必ず動く | 変化があった時だけ動く |
| 変化なしの時 | チェックして「変化なし」と報告。トークン消費あり | 何もしない。トークン消費ゼロ |
| 反応速度 | 最大で設定間隔ぶん遅れる | 変化した瞬間に反応。ほぼリアルタイム |
| セットアップ | 「/loop 5m ○○して」の1行 | hooks: 設定ファイル。channels: プラグイン |
| 向いてる用途 | 通知手段がない時の代替 | CI、ログ監視、チャット連携 |
たとえるなら、
/loopは「5分ごとに郵便受けを見に行く」。
channelsは「手紙が届いたらチャイムが鳴る」。
Web技術でいうHTTPポーリング → WebSocketsへの進化と同じだ。
Claude Codeのイベント駆動はどんな場面で使える?
CIが終わったら教えてもらう(ビルド監視)
コードをプッシュして、
CI(自動テスト)が走ってる間。
今までは /loop で「CIの結果を5分ごとにチェックして」と頼んでいた。
CIが10分で終わるなら、
最初の1回は確実に「まだ終わってません」で無駄打ち。
channelsを使えば、
CIが完了した瞬間にClaude Codeに通知が届く。
GitHubのCIが終わったらそのまま結果がClaude Codeに流れてくる仕組みだ。
エラーが出た瞬間に対応する(ログ監視)
hooksのPostToolUse(ツール実行後に発動するフック)を使うと、
Claude Codeが何かを実行した後に自動でスクリプトを走らせられる。
たとえば、
Claude Codeがサーバーを起動したあと、
ログファイルにエラーが書き込まれた瞬間にフックが発動して、
Claude Codeに「エラー出たよ」と知らせる。
5分おきにログを見に行くんじゃなくて、
エラーが出た瞬間に気づける。
これが「イベント駆動」の本質だ。
スマホからClaude Codeに指示を送る(チャット連携)
個人的に一番おもしろいと思った使い方だ。
channelsはTelegram、
Discord、
iMessageに対応している。
つまり、
スマホのTelegramからClaude Codeにメッセージを送れる。
外出先から「さっきのPRどうなった?」って聞いたら、
自宅のPCで動いてるClaude Codeが答えて、
Telegramに返事が来る。
ポーリングで「PRの状態を5分ごとにチェック」なんてやる必要がなくなる。
聞きたい時に聞けばいい。
自分はまだchannelsのほうは試せてないが、
/loopでのビルド監視は正直トークンがもったいないと思ってた。
hooksのNotification(作業完了通知)は導入済みで、
Claude Codeが作業を終えたタイミングでデスクトップ通知が届くようにしている。
これだけでも「終わったかな」と覗きに行く回数が激減した。
Claude Codeのhooksとchannelsに必要なものは?
Claude Code v2.1.80以上が必要だ。
channelsはv2.1.80以降で対応している。
hooksはそれ以前のバージョンでも使える。
claude --version でバージョンを確認できる。
Claude CodeのサブスクリプションはPro(月額$20)以上、
またはAPI従量課金でも利用可能。
channelsはclaude.aiログインが必要だ(APIキー認証では使えない)。
Bunはchannelsのプラグインを動かすために必要なJavaScript実行環境だ。
Claude Codeに「Bunをインストールして」と頼めば1行で終わる。
追加料金はなし。
hooks、
channels、
/loop、
すべてClaude Codeのサブスク内で使える。
Claude Codeでイベント駆動の監視を設定する手順は?
3つの仕組みを、かんたんなものから順番に紹介する。
方法1: /loop(ポーリング)— まずはここから
一番シンプルだ。Claude Codeを開いて、こう入力するだけ:
/loop 5m デプロイが完了したか確認して、結果を教えて
これで5分ごとにClaude Codeがデプロイ状態をチェックしてくれる。
間隔は「5m」(5分)「1h」(1時間)「30s」(30秒、
ただし内部で1分に丸められる)で指定できる。
指定しなければデフォルトで10分間隔だ。
止めたい時は「ループを止めて」とClaude Codeに言えばOK。
ポーリングなのでトークン効率は最高ではないが、
セットアップが1行で終わるのが強みだ。
方法2: hooks(イベント駆動)— 設定ファイルに書く
hooksは「Claude Codeの中で特定のイベントが起きた時に、
自動でスクリプトを実行する」仕組みだ。
設定ファイル(settings.json)にフックの内容を書く。
Claude Codeに「Notificationフックを設定して。
Claude Codeが何か許可を求めてきた時に、
デスクトップ通知を出すようにして」と伝えれば、
設定ファイルを自動で書いてくれる。
使えるイベントは多数あるが、代表的なものは以下の5つ:
PreToolUse: ツール実行の「前」に発動。
危険なコマンドをブロックしたい時に。
PostToolUse: ツール実行の「後」に発動。
ファイルが変更されたら自動テストを走らせる、
とか。
Notification: Claude Codeが入力待ちになった時。
「作業終わったよ」の通知に使える。
Stop: セッション終了時に発動。ログ保存や片付け処理に。
SubagentStop: サブエージェント(並列作業用のAI)が終了した時に発動。
hooksのcommandタイプはローカルで動くスクリプトなので、
トークンを消費しない(promptタイプやagentタイプのhooksはLLMを呼び出すためトークンを消費する)。
Claude Codeのコンテキストに影響を与えず、
裏側で黙々と動いてくれる。
方法3: channels(外部からの通知)— 最もトークン効率が高い
channelsは「外のシステムからClaude Codeにメッセージを送り込む」仕組みだ。
現在対応しているのはTelegram、
Discord、
iMessageの3つ。
加えて、
webhook(外部サービスからの通知)を受け取るカスタムチャンネルも作れる。
Telegramの場合、
セットアップはこうだ。
Claude Codeに「Telegramチャンネルをセットアップして」と伝える。
TelegramのBotFatherでボットを作り、
トークンをClaude Codeに渡す。
Claude Codeを --channels オプション付きで再起動すれば、
Telegramからメッセージを送れるようになる。
channelsはまだ「リサーチプレビュー」(試験公開)の段階だ。
仕様が変わる可能性はあるが、
使える状態にはなっている。
Claude Codeのイベント駆動でよくある疑問は?
Q. /loopとchannels、どっちを使えばいい?
迷ったら /loop から始めてほしい。
1行で設定できて、
すぐ動く。
ただし、
監視対象が「通知を送れるシステム」(GitHub CI、
Slack、
チャットアプリ等)なら、
channelsに移行するとトークンを節約できる。
通知手段がない場合は /loop しか選択肢がないので、
そのまま使えばOKだ。
Q. hooksでトークンはどのくらい節約できる?
hooks自体はトークンを消費しない。
ローカルでシェルスクリプトが動くだけだ。
節約量は「hooksがなかったら何回/loopでチェックしていたか」に依存する。
たとえば5分間隔で1時間チェックしていたら12回分のトークンが浮く計算だ。
長時間の監視タスクほど、
差が大きくなる。
Q. channelsはセッションを閉じても動く?
動かない。
channelsもhooksも、
Claude Codeのセッションが開いている間だけ有効だ。
セッションを閉じると全部止まる。
セッションを閉じても動き続ける監視がほしい場合は、
Cloud scheduled tasks(クラウド上で動くスケジュールタスク)やGitHub Actionsを使う方法がある。
Q. 日本語で使える?
使える。
/loopのプロンプトは日本語で書けるし、
channelsからのメッセージも日本語で送れる。
hooksの設定ファイルはJSON形式で書くのでそこだけ英語ベースだが、
Claude Codeに「こういうhooksを設定して」と日本語で頼めば、
JSONを自動で書いてくれる。
Claude Codeのイベント駆動で知っておくべき注意点は?
channelsはリサーチプレビュー(試験公開)の段階だ。
仕様が変わる可能性があるので、
本番運用は正式リリースを待ったほうが安全だ。
セッションが開いてないと動かない。
/loop、
hooks、
channelsすべて、
Claude Codeを閉じると停止する。
常時監視が必要な場合は、
Cloud scheduled tasks(セッション不要、
クラウドで動く)を検討してほしい。
channelsのセキュリティは要注意だ。
外部からClaude Codeにメッセージを送れる仕組みなので、
送信者の制限(allowlist)が重要になる。
初期設定ではペアリングしたアカウントだけが送信できるが、
使う前に設定を確認してほしい。
/loopには7日の期限がある。
7日で自動削除されるので、
長期の監視には向かない。
ここで大事なのは、
この仕組みが「AIエージェントの効率化」の本質を突いてるということだ。
AIは「動いてるけど何もしてない」時間がコストになる。
イベント駆動にすれば、
AIは必要な時だけ動いて、
あとは眠ってる。
人間が「何かあったら起こして」と言って寝るのと同じだ。
これがAIツールのスタンダードになっていくと思ってる。
Claude Codeのトークン節約、まず何からやるべき?
まずは /loop で定期チェックをやってみてほしい。
1行で動くし、
効果がすぐわかる。
次に、
hooksの通知機能を入れると「作業終わったよ」が自動で届くようになって、
ラクになる。
Claude Codeに「Notificationフックを設定して」と言えば、
30秒で設定完了だ。
channelsは正式リリースを待ってからでもいいが、
Telegramを使ってる人は今すぐ試す価値がある。
参考リンク
- Claude Code公式 — Run prompts on a schedule: https://code.claude.com/docs/en/scheduled-tasks
- Claude Code公式 — Push events with channels: https://code.claude.com/docs/en/channels
- Claude Code公式 — Notification hooks: https://code.claude.com/docs/en/common-workflows#get-notified-when-claude-needs-your-attention
※この記事の内容は執筆時点のものです。AIは進化が速い分野のため、最新の仕様は公式サイトでご確認ください。