🌟

Claude Code のタスク完了をスマホに通知する

に公開

Claude Code でタスクが完了した時、PC の通知音だけだと気づきにくい...。スマホで通知を受け取れたら便利なのに...。ということで、Claude Code からスマートフォンに直接通知を送信できる仕組みを ntfy で作ってみました。

TL;DR

  • ntfy を使って実現
  • ntfy をスマホにインストール&トピック追加
  • 通知スクリプトを作成し、 curl コマンドの allow 問題を回避
  • Claude Code のカスタムコマンドに /ntfy を追加し、実行

ntfy とは

ntfy は、HTTP ベースでシンプルにプッシュ通知を送れるサービスです。Android/iOS どちらも対応していて無料で使えます。
詳しくは色々な紹介記事(例えば これ とか)があるので割愛します。

必要な準備

モバイルアプリのインストール

OS ごとのアプリは以下の通り。

以降は iOS での設定を説明します。非常にシンプルなアプリなので Android の場合もほぼ同様に設定できると思います。

トピックの作成

ntfy では「トピック」という概念で通知を管理します。トピックは任意の文字列で、これが通知の宛先となります。

  1. 「+」ボタンをタップ
  2. トピック名を入力(例:claude-code-username)して、「Subscribe」をタップ
    • 他の人と被らないようユニークな名前を付けること(被ると通知を受け取ってしまいます)

これで、このトピックに送信された通知がスマートフォンで受信できるようになります。

通知送信スクリプトの作成

curl を使った基本的な送信方法

ntfy への通知送信は、シンプルな HTTP POST リクエストで実現できます。最も基本的な方法は以下の通りです。

curl -d "タスクが完了しました!" https://ntfy.sh/YOUR_TOPIC_NAME

より詳細な通知を送信する場合は、タイトルや優先度を指定できます。

curl \
  -H "Title: Claude Code通知" \
  -H "Priority: high" \
  -H "Tags: white_check_mark" \
  -d "ビルドプロセスが正常に完了しました。" \
  https://ntfy.sh/YOUR_TOPIC_NAME

上記コマンドを Claude Code に登録すればいいのですが、curl コマンドはセキュリティの観点から allow リストに追加しても毎回承認を求められてしまいます。これだと意味がないので、スクリプトファイルを作成し、それを allow リストに追加することで回避します。

スクリプトファイルの作成

Claude Code から呼び出せるよう通知送信用のスクリプトを作成します。
場所はどこでもいいですが、私は ~/.claude/scripts/ に配置しています。
下記のスクリプトの claude-code-username の部分を、先ほど作成したトピック名に変更します。

~/.claude/scripts/ntfy-notify.sh

#!/bin/bash

# Task completion notification script for ntfy
# Usage: ./scripts/ntfy/task-completed.sh [topic] [optional_message]
# Example: ./scripts/ntfy/task-completed.sh mytopic "Custom message"
# Example: ./scripts/ntfy/task-completed.sh mytopic (uses default message)
# Example: ./scripts/ntfy/task-completed.sh (uses default topic and message)

# Default values
DEFAULT_TOPIC="claude-code-username"
DEFAULT_MESSAGE="実装が正常に完了しました!"
TITLE="Claude Code - タスク完了"

# Handle arguments
if [ $# -eq 0 ]; then
    # No arguments - use defaults
    TOPIC="$DEFAULT_TOPIC"
    MESSAGE="$DEFAULT_MESSAGE"
elif [ $# -eq 1 ]; then
    # One argument - topic only
    TOPIC="$1"
    MESSAGE="$DEFAULT_MESSAGE"
else
    # Two or more arguments - topic and message
    TOPIC="$1"
    MESSAGE="$2"
fi

# Send notification
curl -H "Title: $TITLE" -d "$MESSAGE" ntfy.sh/$TOPIC

echo "Task completion notification sent to topic: $TOPIC"

作成したスクリプトを実行可能にします。

chmod +x ~/.claude/scripts/ntfy-notify.sh

Claude Code への統合

commands の設定

Claude Code のカスタムコマンドに /ntfy コマンドを追加し、実行できるようにします。
プロジェクト問わず利用したいので、 ~/.claude/commands/ に追加します。
先ほどと同様に、claude-code-username の部分を変更してください。

~/.claude/commands/ntfy.md

## Ntfy Notification

`ntfy` is a notification service. **When sending notifications, use the provided scripts.**

### Available Scripts

#### Task Completion Notification

Use when tasks are completed:

```bash
# Default (topic: claude-code-username)
~/.claude/scripts/ntfy-notify.sh

# Custom topic only
~/.claude/scripts/ntfy-notify.sh custom_topic

# Custom topic and message
~/.claude/scripts/ntfy-notify.sh custom_topic "Task completed!"
```

これで以下のように通知を送信できるようになりました!

/ntfy テストで通知を送って

CLAUDE.md への追加

CLAUDE.md ファイルにタスク完了時に上記の通知ルールを追加すると、タスク完了時に自動的に通知が送信されるようになります。
例えばこんな感じ。

# 通知ルール

- タスク完了時に `/ntfy` コマンドを実行

ただ、よく忘れるので、チャットの冒頭に必ず通知ルールを出力させる 設定をしておくと便利です。

まとめ

これで PC の前にいなくてもタスク完了をスマホで受け取れるようになりました。ぜひお試しください!

Discussion