Claude Codeで作業リズムを愉快に撹乱する通知演出の構築手順

  • URLをコピーしました!
目次

Claude Code ユーザーが日常でぶつかる悩み

Claude Code で日々開発していると、集中して作業を続けすぎてしまい、気がつけば何時間もぶっ通しでキーボードを叩いていた…という経験は多いはずです。AI coding workflow のテンポが良すぎて、休憩タイミングを完全に見失うことも珍しくありません。特に monorepo で複数の package を跨いで作業していると、repository understanding に集中力を使い果たし、ふとした瞬間にリフレッシュのきっかけが欲しくなる場面があります。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした悩みの中で、特に「集中しすぎて休憩を忘れる」「作業リズムが単調になってしまう」といった、通知・演出・OS連携に関する課題を感じている方も多いでしょう。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、作業中やコマンド実行のたびに“謎のコーヒー抽出音”とカオスな通知で、Claude Code の開発現場に強制コーヒーブレイクを演出します。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • AI coding workflow の途中で、突如としてコーヒー関連のサウンド&通知が流れ、集中しすぎ問題を強制的にリセット
  • 長時間作業や monorepo の directory 移動時も、楽しい演出で開発リズムに変化をつけられる
  • repository understanding の合間に、意味不明な通知文言でチームの会話や笑いが生まれる
  • onboarding 時や session 再開時にも、休憩タイミングのきっかけを作れる
  • path management や memory の煩雑さを一瞬忘れてリフレッシュできる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/os-fake-coffee-break-sound-effect .claude/skills/os-fake-coffee-break-sound-effect

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /os-fake-coffee-break-sound-effect
> セッション再開

[通知] 今こそ一服の時
[サウンド] コーヒー抽出音を再生中...
(パス: scripts/sounds/brew.mp3)

Claude Code: session context を復元しました。
(ついでにコーヒー休憩をどうぞ)

シーン2: monorepo / package 跨ぎ作業時


> packages/user-service/ のコードを見たい

[通知] あなたの集中はカフェイン不足です
[サウンド] カップを置く音を再生中...
(パス: scripts/sounds/cup.mp3)

Claude Code: user-service ディレクトリの context を切り替えました。
(リフレッシュもお忘れなく)

シーン3: お遊び的な使い方


> 今日はやる気が出ません

[通知] マシンも休みたい気分
[サウンド] 謎のコーヒー抽出音を再生中...
(パス: scripts/sounds/random.mp3)

Claude Code: 休憩推奨モードを発動しました。
(気分転換してから再開しましょう)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+コーヒー演出
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+コーヒー演出でリセット
長時間 workflow long context で重要箇所が薄まる サウンド&通知で集中力を強制リセット、stale context のリカバリも楽に

発動方式

明示呼び出し (/os-fake-coffee-break-sound-effect) と暗黙発動 (「コーヒー」「休憩」などの description マッチ) の両方に対応。

Skill の中身を全部見せる

.claude/skills/os-fake-coffee-break-sound-effect/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/os-fake-coffee-break-sound-effect/
├── SKILL.md
├── scripts/
│   └── coffee_break_sound_effect.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/coffee_break_sound_effect.py OS風フェイク・コーヒーブレイクサウンド&通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-fake-coffee-break-sound-effect
description: このSkillは、Claude Codeがコマンド実行や作業の節目(例: ビルド/テスト/デプロイ/長時間作業)を検知した際や、/os-fake-coffee-break-sound-effect の明示呼び出し時に発動します。通知・サウンド演出を通じて“強制コーヒーブレイク”を演出します。
---

# 機能概要
このSkillは、作業中やコマンド実行時に、まるでOSが“コーヒーブレイクを強制したい”かのような、謎のサウンド演出とデスクトップ通知を自動で発動します。通知文は「あなたの集中はカフェイン不足です」「今こそ一服の時」など完全ランダム。サウンドもコーヒー抽出音やカップを置く音など複数から選ばれ、開発現場に突如“休憩ムード”をねじ込みます。作業リズムを愉快に撹乱したい時や、チームの雰囲気を和ませたい時に最適です。

# 使い方
- 明示呼び出し: `/os-fake-coffee-break-sound-effect`
- 暗黙発動: 「ビルド」「テスト」「デプロイ」「run」「長時間作業」などのコマンドや作業イベントを検知して自動発動
- 設定不要、スクリプトを実行するだけで利用可能

# 出力例
```terminal
[通知] 今こそ一服の時
[サウンド] ./sounds/coffee_pour.wav を再生中...
[通知] あなたの集中はカフェイン不足です
[サウンド] ./sounds/cup_put.wav を再生中...
[通知] マシンも休みたい気分
[サウンド] ./sounds/coffee_machine.wav を再生中...
```

# 注意点
- サウンド再生には `playsound` パッケージ、通知には `plyer` を使用します。
- 音源ファイルは `./sounds/` ディレクトリに保存されています。
- サポートOS: Windows/macOS/Linux(通知機能は一部環境で制限あり)
- 音量や通知頻度の細かい調整は未対応です。

# 参考資料
- [playsound公式](https://github.com/TaylorSMarks/playsound)
- [plyer通知API](https://plyer.readthedocs.io/en/latest/)
- references/design_notes.md 参照

scripts/coffee_break_sound_effect.py

import random
import os
import sys
import argparse
import time
from threading import Thread

try:
    from playsound import playsound
except ImportError:
    print("playsoundパッケージが必要です。pip install playsound でインストールしてください。", file=sys.stderr)
    sys.exit(1)

try:
    from plyer import notification
except ImportError:
    print("plyerパッケージが必要です。pip install plyer でインストールしてください。", file=sys.stderr)
    sys.exit(1)

SOUND_DIR = os.path.join(os.path.dirname(__file__), 'sounds')
SOUND_FILES = [
    'coffee_pour.wav',
    'cup_put.wav',
    'coffee_machine.wav',
    'stirring_mug.wav',
    'espresso_shot.wav',
]

NOTIFY_MESSAGES = [
    "あなたの集中はカフェイン不足です",
    "今こそ一服の時",
    "マシンも休みたい気分",
    "コーヒーブレイクを推奨します",
    "脳内カフェイン残量が低下しています",
    "謎の休憩タイムが始まります",
    "一息入れてみませんか?",
    "コーヒーの香りでリフレッシュしましょう",
    "開発者にも休息が必要です",
    "OSからの強制休憩指示です"
]


def list_sounds():
    print("利用可能なサウンドファイル:")
    for f in SOUND_FILES:
        path = os.path.join(SOUND_DIR, f)
        exists = os.path.exists(path)
        print(f"- {f} {'(OK)' if exists else '(ファイル未発見)'}")

def list_messages():
    print("利用可能な通知文:")
    for m in NOTIFY_MESSAGES:
        print(f"- {m}")

def play_random_sound():
    available = [f for f in SOUND_FILES if os.path.exists(os.path.join(SOUND_DIR, f))]
    if not available:
        print("サウンドファイルが見つかりません。", file=sys.stderr)
        return
    sound_file = random.choice(available)
    sound_path = os.path.join(SOUND_DIR, sound_file)
    print(f"[サウンド] {sound_path} を再生中...")
    try:
        playsound(sound_path)
    except Exception as e:
        print(f"サウンド再生エラー: {e}", file=sys.stderr)

def show_random_notification():
    message = random.choice(NOTIFY_MESSAGES)
    print(f"[通知] {message}")
    try:
        notification.notify(
            title="コーヒーブレイク通知",
            message=message,
            app_name="FakeCoffeeBreak",
            timeout=5
        )
    except Exception as e:
        print(f"通知エラー: {e}", file=sys.stderr)

def coffee_break_once():
    show_random_notification()
    t = Thread(target=play_random_sound)
    t.start()
    t.join()

def coffee_break_loop(interval=1800, count=3):
    for i in range(count):
        coffee_break_once()
        if i < count - 1:
            print(f"次のコーヒーブレイクまで {interval} 秒待機...")
            time.sleep(interval)

def main():
    parser = argparse.ArgumentParser(description="OS風フェイク・コーヒーブレイクサウンド&通知スキル")
    subparsers = parser.add_subparsers(dest='command')

    parser_once = subparsers.add_parser('once', help='1回だけコーヒーブレイク演出')
    parser_loop = subparsers.add_parser('loop', help='定期的にコーヒーブレイク演出')
    parser_loop.add_argument('--interval', type=int, default=1800, help='繰り返し間隔(秒)')
    parser_loop.add_argument('--count', type=int, default=3, help='回数')
    parser_list = subparsers.add_parser('list', help='サウンドと通知文の一覧表示')
    parser_list.add_argument('--sounds', action='store_true', help='サウンドのみ')
    parser_list.add_argument('--messages', action='store_true', help='通知文のみ')

    args = parser.parse_args()
    if args.command == 'once' or args.command is None:
        coffee_break_once()
    elif args.command == 'loop':
        coffee_break_loop(interval=args.interval, count=args.count)
    elif args.command == 'list':
        if args.sounds:
            list_sounds()
        elif args.messages:
            list_messages()
        else:
            list_sounds()
            print("")
            list_messages()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、開発現場に“謎のコーヒーブレイク”演出を強制的に挿入することで、作業リズムにユーモアとリフレッシュ効果をもたらすことを目的としています。通知文もサウンドも完全ランダムで、毎回異なる演出を楽しめます。

# 公式ドキュメント抜粋
- [playsound](https://github.com/TaylorSMarks/playsound): クロスプラットフォームな音声再生API。
- [plyer.notification](https://plyer.readthedocs.io/en/latest/): PythonからOSネイティブ通知を送信可能。

# 利用例
- 長時間のコーディング時に、定期的に強制休憩を促す。
- チームでのペアプロやハッカソンの雰囲気作り。
- テスト・ビルド完了後の演出として自動発動。

# 注意点
- サウンドファイルは `sounds/` ディレクトリに配置が必要。
- 通知機能は一部Linux環境やWSLでは動作しない場合があります。
- 音量調整や通知のカスタマイズは現状未対応です。

# 設計方針
- サウンド・通知ともにPython標準APIで最大限クロスプラットフォーム化。
- 拡張性を重視し、サウンドや通知文の追加が容易な構成。
- 明示/暗黙発動の両対応で、柔軟な組み込みが可能。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/os-fake-coffee-break-sound-effect .claude/skills/os-fake-coffee-break-sound-effect

.claude/skills/os-fake-coffee-break-sound-effect の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/os-fake-coffee-break-sound-effect
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /os-fake-coffee-break-sound-effect と Skill 名で出てきます。

5. 動作確認

/os-fake-coffee-break-sound-effect で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが path を全部指定する手間を省きたい
  • session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
  • package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
  • long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい
  • 単調な作業の気分転換: 休憩タイミングを自動で演出したいとき

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
  • directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
  • monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
  • irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory
  • サウンド再生環境依存: OSや端末によって通知・音声再生が正常に動かない場合がある
  • 音源ファイルのパス指定ミス: サウンドファイルのパスがずれているとエラーになる可能性

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • サウンド再生と通知表示が同時にトリガーされるか?
  • 通知文言が完全ランダムで変化するか?
  • 音源ファイルのパス指定や再生方法がシンプルか?

実際に Claude Code で試した検証ログは 謎のコーヒー音と通知で作業をゆるく邪魔してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次