[小ネタ] Claude Codeで入力待ち・処理完了を音声で知らせるHooks

[小ネタ] Claude Codeで入力待ち・処理完了を音声で知らせるHooks

2025.10.30

Introduction

Claude Code(CLI、VSCode)を複数のターミナル・ウィンドウで並行実行していると、
どれが入力待ちなのか、どれの処理が完了しているのか把握しづらいという問題があります。
私の場合VScodeで5〜6個のウィンドウ(Claude Code)、
ターミナルでも同じ数のClaude CodeやCodexを開いており、
コマンド入力待ちのまま放置されていたりします。

Claude Codeが実行中に他のタスク(調査や他のプロジェクトのプロンプト入力など)を実行して
無駄な時間を減らしたいのにこれでは意味がありません。
(Codexでデフォルトで完了時に音を出してくれるのでまだよい)

この記事では、Claude CodeのHooks機能を使って通知を行い、
入力待ちと処理完了を知らせる仕組みを作成します。

Environment

  • MacBook Pro (14-inch, M3, 2023)
  • OS : MacOS 15.7.1
  • Claude Code : 2.0.25

Hooks

Claude Codeには「Claude Codeのライフサイクルにおける特定のタイミングで自動実行されるシェルスクリプト」を
使うためのHooksという機能があります。

Hookイベントの種類

今回使用する主なフックポイントは以下です。

  • Notification: Claude Codeが通知を送信するとき
    • Claudeがツールを使用する許可が必要な場合
    • プロンプト入力が少なくとも60秒間アイドル状態になっている場合
  • Stop: メインのClaude Codeエージェントが応答を完了したとき

ほかにも PreToolUse、PostToolUse、UserPromptSubmit など様々なイベントがあります。

設定ファイルの配置場所

Hooksの設定ファイルは以下の場所に配置します(公式ドキュメントより):

  1. グローバル設定: ~/.claude/settings.json - 全プロジェクトに適用
  2. プロジェクト設定: .claude/settings.json - 特定プロジェクトのみ
  3. ローカル設定: .claude/settings.local.json - Git管理外。自分だけの設定。

今回はすべてのプロジェクトで通知したいので、グローバル設定を使います。

Try

通知スクリプト作成

Hookスクリプトを配置するディレクトリを作成します。
ここでは管理しやすいように ~/.claude/hooks/ を作成します。

mkdir -p ~/.claude/hooks
cd ~/.claude/hooks

入力待ち通知スクリプト(notify-waiting.sh)

以下の内容で ~/.claude/hooks/notify-waiting.sh を作成します:

#!/bin/bash
PROJECT_NAME=$(basename "$PWD")
say -v Victoria "${PROJECT_NAME}、入力待ち"

シンプルに「プロジェクト名 + 入力待ち」を音声で読み上げるだけのスクリプトです。
読み上げ内容はお好みで。

処理完了通知スクリプト(notify-complete.sh)

以下の内容で ~/.claude/hooks/notify-complete.sh を作成します。

#!/bin/bash
PROJECT_NAME=$(basename "$PWD")
say -v Victoria "${PROJECT_NAME}、完了"

こちらは「プロジェクト名 + 完了」を音声で読み上げます。
両方とも実行権限を付与しておきましょう。

chmod +x ~/.claude/hooks/notify-waiting.sh
chmod +x ~/.claude/hooks/notify-complete.sh

設定ファイルの作成

グローバル設定ファイル ~/.claude/settings.json を以下の内容で作成・編集します:

{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$HOME\"/.claude/hooks/notify-waiting.sh"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$HOME\"/.claude/hooks/notify-complete.sh"
          }
        ]
      }
    ]
  }
}

NotificationイベントとStopイベントに、それぞれのスクリプトを指定。

動作確認

とりあえずそれぞれ実行して読み上げされればOKです。

# 入力待ち通知のテスト
bash ~/.claude/hooks/notify-waiting.sh

# 処理完了通知のテスト
bash ~/.claude/hooks/notify-complete.sh

次にClaude Code で実際に動作確認します。
任意のリポジトリでClaude Codeを起動して何か質問してみましょう。
処理が完了したときと、入力待ち状態になったときに音声通知が来れば成功です。

※VSCodeでも実行されるはずですが、私の環境だと通知されないときもありました

sayコマンドつかってるだけなので、音声を変更したいときは、
↓のように適当に変更できます。

# 日本語音声
say -v Kyoko "${PROJECT_NAME}、完了"

# 英語音声
say -v Samantha "${PROJECT_NAME}, completed"

#読み上げ速度を変更

# ゆっくり(120 words/min)
say -v Victoria -r 120 "${PROJECT_NAME}、完了"

# 速め(200 words/min)
say -v Victoria -r 200 "${PROJECT_NAME}、完了"

Summary

Claude CodeのHooks機能を使って、音声で入力待ち・処理完了を通知するシンプルなHooksを作成しました。
れで並行実行していても、どれが入力待ちなのか把握できます。

References

この記事をシェアする

FacebookHatena blogX

関連記事