Claude Codeの利用料金に応じて通知音を変化させてコーディングを楽しくする
普段Claude CodeのHooks機能を使って、タスク完了時に通知を受け取るようにしています。
今回は少し遊び心を加えてClaude Codeの利用料金に応じて通知音を変える仕組みを作ってみたので、その内容を紹介しようと思います!
通知の仕組み
仕組みは非常にシンプルで、通知用のシェルスクリプトを作成し、タスク完了時にそのスクリプトを実行するだけです。
Claude CodeのHooks機能で、タスク完了時や確認要求時などにコマンドやシェルスクリプトを実行できるので、作成したシェルスクリプトを実行するように設定することで実現しました。
ディレクトリ構成
通知用のスクリプト、音声ファイル、Claude Codeの設定ファイルの3つを用意しました。
.claude/
├── hooks
│ └── notify.sh
├── sounds
│ ├── high.wav
│ ├── low.wav
│ └── medium.wav
└── settings.json
Hooksの設定
タスク完了時(Stop)と確認要求時(Notification)にスクリプトを実行するように、settings.json
にHooksの設定を定義してます。
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/notify.sh"
}
]
}
],
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/notify.sh"
}
]
}
]
}
}
通知用のスクリプト
スクリプトでは下記の流れで処理を行っています。
- 現在のClaude Codeの利用料金を取得
- 料金に応じて再生する音声ファイルを選択
- 選択した音声ファイルの再生とMacの通知を表示
利用料金はccusage
というツールを使って取得しています。
ccusage
はClaude Codeの様々な利用状況を取得できるツールで、その中に従量課金だった場合の利用金額が含まれています。
オプション指定でJSON形式で出力できるので、今日の利用状況をJSON形式で取得し、jq
コマンドで金額部分を抽出しています。
閾値や音声ファイルは好みで変更できます。
#!/bin/zsh
# 料金の閾値
HIGH_THRESHOLD=20.0
MEDIUM_THRESHOLD=5.0
# 音声ファイルのパス
SOUND_DIR="$HOME/.claude/sounds"
SOUND_LOW="low.wav"
SOUND_MEDIUM="medium.wav"
SOUND_HIGH="high.wav"
# ccusageで今日の利用料金を取得
cost=$(npx ccusage@latest --since $(date +%Y%m%d) --json | jq -r ".totals.totalCost // 0")
# 料金に応じて音声ファイルを選択
if (( $(echo "$cost >= $HIGH_THRESHOLD" | bc -l) )); then
sound="$SOUND_DIR/$SOUND_HIGH"
elif (( $(echo "$cost >= $MEDIUM_THRESHOLD" | bc -l) )); then
sound="$SOUND_DIR/$SOUND_MEDIUM"
else
sound="$SOUND_DIR/$SOUND_LOW"
fi
# 音声再生と通知表示を実行
afplay "$sound" 2>/dev/null &
osascript -e "display notification \"Claude Codeのタスクが完了しました\" with title \"Claude Code\"" 2>/dev/null &
音声について
今回は音声にポケモンの勝利音を使用することにしました。
Pokémon Game Sound Libraryというサイトで、ポケモンゲームの効果音をダウンロードすることができます。
各勝利音の序盤1~2秒程度の部分を切り出して、3つの音声ファイルを作成しました。
low
->high
になるに従って、勝利音も徐々に豪華になるようにピックアップしてます!
下記のURLから音声を聞けるので、興味がある方は聞いてみてください。
まとめ
Claude Codeの利用料金に応じて通知音を変える仕組みを作ってみました。
普段のコーディングがより楽しくなったので、皆さんもぜひ試してみてください!
Discussion
なんか可愛い取り組みですね!笑 すごく良いと思います、参考になります!
ありがとうございます!嬉しいです!😆