本文へ移動
hanzochang

技術と実践のノート

[並列作業] ClaudeCodeの進捗を「音+案件名」で通知!プロンプト付き!

公開

著者:株式会社hanzochang

Claude Codeを複数プロジェクトで並列に走らせていると、どこが終わったか見失いがち。Hooksとsayコマンドで「効果音+案件名の読み上げ」を設定すれば、画面を見なくても進捗が分かります。コピペで設定できるプロンプト付き。

Claude Codeの作業完了、見逃していませんか?

Claude Codeにリファクタリングを依頼して、ブラウザで別の調べ物をしていたら、気づいたときには数分前に終わっていた。あるいは、Claude Codeが質問を投げて入力待ちなのに気づかず放置してしまった。

複数のターミナルでClaude Codeを並列に走らせている場合はなおさらです。 フロントエンドの修正、API側のリファクタ、テストの追加──それぞれ別のセッションで同時に進めていると、どのプロジェクトが終わったのか、どこで質問が来ているのか、把握しきれなくなります。

この記事では、~/.claude/settings.jsonのHooks機能を使って、タスク完了時と質問待ち時にmacOSで音を鳴らす方法を紹介します。さらにsayコマンドを組み合わせれば、「my-app 完了」のようにプロジェクト名を音声で読み上げてくれるので、画面を見なくてもどのプロジェクトで何が起きたか把握できます。設定だけで済むため、コードを書く必要はありません。

Claude CodeのHooksとは?

Claude Codeには、特定のイベント発生時にシェルコマンドを自動実行する「Hooks」という機能があります。~/.claude/settings.jsonに設定を記述することで、以下のようなタイミングでコマンドを実行できます。

  • Stop - Claude Codeがタスクを完了して停止したとき
  • Notification - Claude Codeがユーザーへの通知を発行したとき(質問や確認待ち)

この仕組みを使って、macOSのシステムサウンドを再生します。

Claude Codeで通知音を設定する方法

基本:効果音を鳴らす

~/.claude/settings.jsonに以下を追記します。

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Hero.aiff"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Glass.aiff"
          }
        ]
      }
    ]
  }
}
json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Hero.aiff"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Glass.aiff"
          }
        ]
      }
    ]
  }
}

この設定により、タスク完了時には「Hero」、質問・確認待ち時には「Glass」というサウンドが再生されます。音が異なるため、画面を見なくてもどちらの状態か判別できます。

afplayコマンドについて

afplayはmacOSに標準で搭載されているオーディオ再生コマンドです。追加のインストールは不要で、.aiff.mp3などのファイルを再生できます。

利用可能なシステムサウンド

/System/Library/Sounds/ディレクトリには以下のサウンドファイルが用意されています。

サウンド名印象
Basso低い警告音
Blow風のような音
Bottleボトルを吹く音
Frogカエルの鳴き声
Funkファンキーな効果音
Glassガラスを叩く音
Hero達成感のある音
Morseモールス信号風
Ping軽い通知音
Popポップ音
Purr振動のような音
Sosumi短い電子音
Submarine潜水艦のソナー風
Tink小さな金属音
サウンド名印象
Basso低い警告音
Blow風のような音
Bottleボトルを吹く音
Frogカエルの鳴き声
Funkファンキーな効果音
Glassガラスを叩く音
Hero達成感のある音
Morseモールス信号風
Ping軽い通知音
Popポップ音
Purr振動のような音
Sosumi短い電子音
Submarine潜水艦のソナー風
Tink小さな金属音

ターミナルで実際に鳴らして試すことができます。

bash
afplay /System/Library/Sounds/Hero.aiff
bash
afplay /System/Library/Sounds/Hero.aiff

好みの組み合わせを見つけて設定に反映してください。

macOSの通知バナーも表示するには?

音だけでなくmacOSの通知バナーも表示したい場合は、osascriptコマンドを使います。

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"タスクが完了しました\" with title \"Claude Code\" sound name \"Hero\"'"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"入力を待っています\" with title \"Claude Code\" sound name \"Glass\"'"
          }
        ]
      }
    ]
  }
}
json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"タスクが完了しました\" with title \"Claude Code\" sound name \"Hero\"'"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"入力を待っています\" with title \"Claude Code\" sound name \"Glass\"'"
          }
        ]
      }
    ]
  }
}

osascriptを使うと、通知バナーの表示とサウンドの再生を1つのコマンドで実行できます。通知センターにも履歴が残るため、離席中に何が起きたかを後から確認するのにも便利です。

並列作業の切り札:音声でプロジェクト名を読み上げる

Claude Codeを複数ターミナルで並列に動かす運用は生産性が高い反面、「どのプロジェクトが終わったのか」が効果音だけでは分かりません。

macOSのsayコマンドを組み合わせると、作業ディレクトリのフォルダ名を音声で読み上げてくれます。

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Hero.aiff && say \"$(basename \"$PWD\") 完了\""
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Glass.aiff && say \"$(basename \"$PWD\") 質問があります\""
          }
        ]
      }
    ]
  }
}
json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Hero.aiff && say \"$(basename \"$PWD\") 完了\""
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Glass.aiff && say \"$(basename \"$PWD\") 質問があります\""
          }
        ]
      }
    ]
  }
}

例えばmy-appディレクトリで作業していた場合、タスク完了時に「my-app 完了」、質問待ち時に「my-app 質問があります」と読み上げられます。イヤホンをしていれば、画面を一切見ずにどのプロジェクトで何が起きたか把握できます。

読み上げ音声を変える

sayコマンドは-vオプションで音声を変更できます。日本語の読み上げにはKyokoOtoyaが使えます。

bash
# 利用可能な日本語音声を確認
say -v '?' | grep ja_JP

# 音声を指定して読み上げ
say -v Kyoko "my-app 完了"
bash
# 利用可能な日本語音声を確認
say -v '?' | grep ja_JP

# 音声を指定して読み上げ
say -v Kyoko "my-app 完了"

Hooksに適用する場合は、コマンド部分を以下のように変更します。

text
afplay /System/Library/Sounds/Hero.aiff && say -v Kyoko \"$(basename \"$PWD\") 完了\"
text
afplay /System/Library/Sounds/Hero.aiff && say -v Kyoko \"$(basename \"$PWD\") 完了\"
設定のポイント

完了と質問で音を変える

同じ音にしてしまうと、画面を見るまでどちらの状態か分かりません。タスク完了には達成感のある「Hero」、質問待ちには控えめな「Glass」のように、意味の異なるサウンドを割り当てると便利です。

Notificationのmatcherについて

Notificationmatcherフィールドは、通知メッセージのフィルタリングに使います。空文字列""を指定するとすべての通知にマッチします。特定のメッセージだけに反応させたい場合は、正規表現パターンを指定できます。

既存のsettings.jsonとの統合

settings.jsonに既に他の設定がある場合は、hooksキーを追加する形で記述します。既存の設定を上書きしないよう注意してください。

まとめ

Claude CodeのHooks機能を使えば、設定ファイルの記述だけでタスク完了や質問待ちの音声通知を実現できます。

設定のポイントは以下の通りです。

  • ~/.claude/settings.jsonhooksStopNotificationのイベントを設定する
  • afplayコマンドでmacOSのシステムサウンドを再生する
  • 完了と質問で異なるサウンドを割り当てると、画面を見なくても状態を判別できる
  • osascriptを使えば通知バナーとサウンドを同時に表示できる
  • sayコマンドでプロジェクト名を読み上げれば、複数セッション並行時もどこで何が起きたか判別できる

小さな設定ですが、マルチタスクで開発しているときの待ち時間を減らす効果があります。

コピペで設定完了:Claude Code用セットアッププロンプト

手動でsettings.jsonを編集するのが面倒な場合、以下のプロンプトをClaude Codeにそのまま貼り付ければ自動で設定してくれます。

効果音のみ(シンプル版)
text
~/.claude/settings.json にhooksを追加して。
Stop(タスク完了)で afplay /System/Library/Sounds/Hero.aiff、
Notification(入力待ち)で afplay /System/Library/Sounds/Glass.aiff を鳴らすようにして。
既存設定はそのまま残して。
text
~/.claude/settings.json にhooksを追加して。
Stop(タスク完了)で afplay /System/Library/Sounds/Hero.aiff、
Notification(入力待ち)で afplay /System/Library/Sounds/Glass.aiff を鳴らすようにして。
既存設定はそのまま残して。
効果音+プロジェクト名読み上げ(おすすめ)
text
Claude Codeの通知音を設定して。以下の通りに実装してほしい。

■ ~/.claude/settings.json のhooksに以下を設定

Stop(タスク完了)のcommand:
(afplay /System/Library/Sounds/Hero.aiff && say "$(basename "$PWD") 完了") > /dev/null 2>&1 &

Notification(matcher空文字)のcommand:
(afplay /System/Library/Sounds/Glass.aiff && say "$(basename "$PWD") 質問があります") > /dev/null 2>&1 &

hookをブロックしないよう、必ず > /dev/null 2>&1 & でバックグラウンド実行すること。
既存のsettings.jsonの設定はそのまま残してhooksだけ追加・更新して。
text
Claude Codeの通知音を設定して。以下の通りに実装してほしい。

■ ~/.claude/settings.json のhooksに以下を設定

Stop(タスク完了)のcommand:
(afplay /System/Library/Sounds/Hero.aiff && say "$(basename "$PWD") 完了") > /dev/null 2>&1 &

Notification(matcher空文字)のcommand:
(afplay /System/Library/Sounds/Glass.aiff && say "$(basename "$PWD") 質問があります") > /dev/null 2>&1 &

hookをブロックしないよう、必ず > /dev/null 2>&1 & でバックグラウンド実行すること。
既存のsettings.jsonの設定はそのまま残してhooksだけ追加・更新して。

Claude Codeがsettings.jsonを読み取って、既存の設定を壊さずにhooksをマージしてくれます。

参考リンク

この記事が参考になったら

この記事が役に立ったと思いましたら、よろしければフォローをお願いします。

Xでフォローする

Claude Codeの並列運用やAI開発フローの導入に興味がありましたら、お気軽にご連絡ください。

お問い合わせ

この記事を書いた人

Webプランナー、開発会社の創業メンバーを経て、Fintech・DX・Web3の企画・開発に従事。2021年に独立し、2023年に株式会社hanzochangを設立。現在はAIを活用した業務改善と、自社サービス「指定管理者制度AI」の開発・運用に取り組んでいます。

半澤勇大のXアカウント(新しいタブで開く)

この記事の株式会社hanzochangについて
少し紹介させてください!

この記事に関連する当社のサービス

業務改善・AI活用支援

転記・集計・資料作成にかかる時間を減らしませんか?

現在の業務と使っているシステムを整理し、AIが役立つ作業から改善します。試作で効果を確かめ、現場で使うアプリの開発・運用まで支援します。

サービスの詳細を見る
Jくんが多様な業務アプリを開発するイラスト。背景に多数のアプリが並ぶ。
  • 業務の整理

    手間のかかる作業と、改善する順番を明確に。

  • 試作・アプリ開発

    実際の手順に合わせて、使える仕組みを開発。

  • 導入・運用支援

    使い方の共有から、導入後の改善まで対応。

業務改善・AI活用について、お気軽にご相談ください。