はじめに
Claude Codeに長めのタスクをお願いして、
ブラウザで別のことを調べていたら、
気づいたらとっくに終わっていた。
これ、本当によくやります。
しかも気づくのが遅いだけじゃなくて、
「まだかな?」とターミナルを確認しに行くのも地味につらい。
- 確認しに行く → まだ作業中
- 別タブに戻る
- しばらくして確認しに行く → 実はもう終わってた
この繰り返し、効率が悪いのはわかってるんですが、
ずっとターミナルを眺めているのも無理で。
そこで Hooks という機能を使って、
Claude Codeが「次の指示待ちです」のタイミングでデスクトップに通知を出せるようにしました。
設定自体は5分もあれば終わります。
Hooksってなに?
一言でいうと、
「Claude Codeの特定タイミングで自動でシェルコマンドを叩く仕組み」 です。
プロンプトでClaudeに「〇〇しておいて」とお願いするのとは違って、
システムレベルで「必ず実行する」を保証してくれます。
Claudeがうっかり忘れることもない、という点が強いです。
どんなタイミングで動くの?
Hooksはイベントごとに設定します。
主なものはこんな感じです。
| イベント名 | 発火するタイミング |
|---|---|
Notification |
Claudeが入力待ち・許可待ちになったとき |
Stop |
Claudeが応答・作業を完了したとき |
PreToolUse |
ファイル編集やコマンド実行などの直前 |
PostToolUse |
ファイル編集やコマンド実行などの直後 |
SessionStart |
セッション開始時 |
今回は 「Claudeが次の入力を待っている」 タイミングで通知を出したいので、
Notification イベントを使います。
やってみる
まず通知コマンドを確認する
macOSには osascript というコマンドがあって、
これでデスクトップ通知を出せます。
まずターミナルで試してみましょう。
osascript -e 'display notification "作業が完了しました!" with title "Claude Code"'
通知が出ない場合
osascript はmacOSの「Script Editor」アプリ経由で通知を出しています。
初回は通知の権限がないことがあるので、
System Settings > Notifications で Script Editor を探して、
Allow Notifications をオンにしてみてください。
settings.jsonに設定を書く
Hooksの設定は ~/.claude/settings.json に書きます。
グローバルな設定ファイルなので、すべてのプロジェクトに適用されます。
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Codeが入力を待っています\" with title \"Claude Code\"'"
}
]
}
]
}
}
設定の各項目を軽く説明すると、
-
Notification: どのイベントで動かすか -
matcher: 通知の種類でフィルタリングできる。""にするとすべてで発火 -
type: hookの種類。commandでシェルコマンドを実行 -
command: 実際に叩くコマンド
設定を確認する
Claude Codeのチャットで /hooks と入力すると、
設定されているHooksの一覧が見られます。
Notification の横に数字が出ていれば成功です。
動かしてみる
あとは普通に使うだけです。
Claude Codeが作業を終えて次の入力を待つタイミングで、
デスクトップに通知が届きます。
別のアプリを使っていても気づけるようになって、
地味ですがかなり楽になりました。
使ってみた感想
設定が思ったより全然簡単でした。
JSONを数行書くだけなので、
「シェルスクリプトはよくわからない…」という方でも全然いけると思います。
効果としては、
無駄にターミナルを確認しに行く回数が激減しました。
「終わったかな?」と気になって作業が中断されることがなくなって、
集中力が地味に変わった気がします。
Hooksでできることはまだまだある
今回はデスクトップ通知の例を紹介しましたが、
「シェルコマンドで何かできること」ならHooksで自動化できます。
思いついたアイデアをいくつか。
| やりたいこと | イベント | イメージ |
|---|---|---|
| Slackに完了通知を飛ばす | Notification |
curl でIncoming Webhook |
| ファイル編集後に自動フォーマット | PostToolUse |
prettier --write など |
| 特定ファイルへの書き込みをブロック | PreToolUse |
条件チェックして exit 2
|
| 作業ログを自動記録 | Stop |
タイムスタンプ付きでファイルにappend |
| セッション開始時にコンテキストを注入 | SessionStart |
echo でプロジェクト情報を出力 |
個人的に気になっているのは 「Slackに通知を飛ばす」 です。
リモートワークで別の作業をしているときも、
Slackで「Claude Codeが終わったよ」と通知が来たら最高ですよね。
自分の開発スタイルに合わせて、
「こんなことできるかな?」と試してみると面白いと思います。
おわりに
- Claude CodeのHooks機能を使えば、特定のタイミングで自動でコマンドを実行できる
-
Notificationイベントとosascriptを組み合わせるだけで、macOSのデスクトップ通知が実現できる - 設定は
~/.claude/settings.jsonにJSONを数行書くだけ - 「シェルコマンドで何かできること」ならHooksで自動化できる
「気づいたら終わってた…」を繰り返している方は、
ぜひ試してみてください。
