Claude Codeの長時間処理をApple Watchに通知する(Pushcut × Hooks)
はじめに
Claude Codeで cc-sddなどを活用していると、処理が数分〜数十分かかることがあります。
その間、別の作業をしていると「いつ終わったかわからない」という問題が発生します。ターミナルをずっと見ているわけにもいきません。
Claude CodeのHooksで完了時に通知音を鳴らす設定はよく紹介されています。しかし長時間処理の場合、イヤホンやヘッドホンをしていなかったり、そもそもPCから離れていたりすると気づけません。
そこで、一定時間以上かかった処理が完了したらApple Watch(スマートウォッチ)に通知を送る仕組みを作りました。

Apple Watchの通知例
この記事で実現できること
- Claude Codeの処理が指定秒数(例:5分)以上かかった場合のみ通知
- Pushcutを使ってiPhone・Apple Watchにプッシュ通知
- 複数プロジェクト・複数ウィンドウで同時に使っても競合しない
想定読者
- Claude Codeを日常的に使っている
- 長時間の処理中、別作業をしたい
- Apple WatchやiPhoneで完了通知を受け取りたい
必要なもの
- Claude Code
- iPhone + Pushcutアプリ(無料版でOK)
- Apple Watch(任意、iPhoneだけでも可)
-
jqコマンド(JSONパース用)
Pushcutとは
PushcutはiOS向けの自動化アプリです。Webhook経由でiPhone・Apple Watchにプッシュ通知を送ることができます。
本記事では、Webhookを叩いて通知を受け取る機能のみを使用します。
Pushcutの設定
1. アプリのインストール
App Storeから「Pushcut」をインストールします。
2. 通知の作成
- Pushcutアプリを開く
- 「Notifications」タブで「Add Notification」をタップ
- 名前を入力(例:
ClaudeCode) - 通知タイトルと通知内容を入力
- 保存

iPhone側のPushcut設定例
3. Webhook URLの取得
- 作成した通知をタップ
- 「URL Triggers & Webhooks」セクションの「Copy URL」でURLをコピー
以下のような形式のURLが取得できます:
https://api.pushcut.io/xxxxxxxx/notifications/ClaudeCode
^^^^^^^^^^
ここがNotificationのname
URLの末尾はPushcutで作成したNotificationの名前になります。手順2で ClaudeCode という名前で作成した場合、URLの末尾も ClaudeCode になります。
このURLにPOSTリクエストを送ると、iPhoneとApple Watchに通知が届きます。
Claude Code Hooksの設定
Claude CodeのHooks機能を使って、処理の開始時刻を記録し、完了時に経過時間をチェックします。
ディレクトリの作成
mkdir -p ~/.claude/hooks
1. 開始時刻を記録するスクリプト
~/.claude/hooks/record-start.sh
#!/bin/bash
input=$(cat)
session_id=$(echo "$input" | jq -r '.session_id')
if [ -n "$session_id" ] && [ "$session_id" != "null" ]; then
echo $(date +%s) > "/tmp/claude_start_${session_id}"
fi
2. 完了時に通知するスクリプト
~/.claude/hooks/notify-on-stop.sh
#!/bin/bash
# ================================
# ここを変更してください(秒数)
# ================================
THRESHOLD_SECONDS=300 # 5分
# ================================
input=$(cat)
session_id=$(echo "$input" | jq -r '.session_id')
if [ -z "$session_id" ] || [ "$session_id" = "null" ]; then
exit 0
fi
start_file="/tmp/claude_start_${session_id}"
start=$(cat "$start_file" 2>/dev/null || echo 0)
now=$(date +%s)
duration=$((now - start))
if [ $duration -ge $THRESHOLD_SECONDS ]; then
curl -X POST "https://api.pushcut.io/xxxxxxxx/notifications/ClaudeCode"
fi
rm -f "$start_file"
3. 実行権限の付与
chmod +x ~/.claude/hooks/record-start.sh
chmod +x ~/.claude/hooks/notify-on-stop.sh
4. settings.jsonの設定
以下のいずれかのファイルに設定を追加します:
| ファイル | 適用範囲 |
|---|---|
~/.claude/settings.json |
全プロジェクト共通 |
プロジェクト/.claude/settings.json |
特定のプロジェクト(チームで共有可) |
プロジェクト/.claude/settings.local.json |
特定のプロジェクト(個人用、gitignore推奨) |
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/hooks/record-start.sh"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "bash ~/.claude/hooks/notify-on-stop.sh"
}
]
}
]
}
}
既存の設定がある場合は、hooksの中に追記してください。
閾値の目安
THRESHOLD_SECONDS の設定値を変更することで、通知を受け取る基準を調整できます。
| 設定値 | 時間 |
|---|---|
60 |
1分 |
180 |
3分 |
300 |
5分 |
600 |
10分 |
短すぎると通知が頻繁になり、長すぎると通知の意味がなくなります。自分のワークフローに合わせて調整してください。
なぜsession_idを使うのか
単純にプロジェクトパスだけで管理すると、以下のケースで問題が発生します:
- 複数プロジェクトを同時に開いている → 後から開始した方の時刻で上書きされる
- 同じプロジェクトを複数ウィンドウで開いている → 同様に上書きされる
session_idはセッションごとに一意なので、これらの問題を回避できます。
まとめ
Claude CodeのHooks機能とPushcutを組み合わせることで、長時間処理の完了通知をApple Watch(スマートウォッチ)で受け取れるようになりました。
長時間処理の完了通知は、以下のようなケースでも活用できます:
- 大規模なリファクタリング
- テストの一括実行
- ドキュメントの自動生成
- 複数ファイルにまたがる修正
Claude Codeに任せている間、安心して別の作業やコーヒーブレイクができるようになります。ぜひ試してみてください。
Discussion