Claude Codeで作業中に謎のBGM通知を自動化する方法解説

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

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

Claude Code を使った AI coding workflow では、repository や directory の path management、context の維持が重要です。しかし、集中して作業していると、思わぬタイミングで気が抜けたり、長時間の session で気分転換が欲しくなることがよくあります。特に以下のような「あるある」な悩みが発生しがちです。

  • 作業に没頭しすぎて repository understanding が鈍り、単調な時間が続く
  • monorepo の大規模構成で directory を跨いだ作業時、気分転換のきっかけがなく集中が途切れる
  • 長時間の AI coding workflow で long context が膨らみ、頭がリフレッシュされない
  • onboarding や session 再開時、同じ説明を繰り返しているうちに飽きが来る
  • たまには遊び心や演出を入れて、作業空間に変化をつけたいが、手動でやるのは面倒

通知や演出、OS連携系の Skill を活用したいが、「実用」と「ちょっとした小ネタ」のバランスが難しい――そんな悩みを感じているユーザーも少なくありません。

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

一言サマリ: このスキルは、Claude Code の作業空間に“謎のOS公式・本日の作業用BGM推奨通知”をランダムに演出し、気分転換や遊び心を自動で投入できるSkill。

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

  • 単調になりがちな AI coding workflow の合間に、context を崩さずに“謎のBGMタイトル”通知が入り、気分転換できる
  • repository や directory の切り替えタイミングで、遊び心ある演出が自然に挟まる
  • monorepo で複数 package を跨ぐシーンでも、適度な間でユーモラスな通知が走り、作業のリズムが生まれる
  • 実際に音は鳴らず、通知やターミナル出力だけなので安心して使える
  • onboarding や session 再開のタイミングで“OS公式BGM”風の演出が入り、場の空気が和らぐ
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-mysterious-soundtrack-alert .claude/skills/random-os-fake-mysterious-soundtrack-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

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


# /random-os-fake-mysterious-soundtrack-alert
> Claude Code でプロジェクトを開く

[OS通知] 本日の作業用BGM推奨: 『第3会議室の静寂』
ジャンル: 不明
ヒント: 仕事始めに最適な雰囲気を演出します。

(※音は鳴りません)

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


> packages/api/ に移動して main.py を編集

[OS通知] 本日の作業用BGM推奨: 『Cドライブ幻想曲』
ジャンル: 未分類
ヒント: 新しいパッケージでの作業におすすめです。

(※実際の楽曲再生はありません)

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


> /random-os-fake-mysterious-soundtrack-alert

[OS通知] 本日の作業用BGM推奨: 『未定義変数のバラード』
ジャンル: 謎
ヒント: コーディングに詰まった時の気分転換にどうぞ。

(※通知のみ、音は出ません)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 合間に“謎BGM通知”が入り、リフレッシュ効果

発動方式

明示呼び出し (/random-os-fake-mysterious-soundtrack-alert) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-mysterious-soundtrack-alert/
├── SKILL.md
├── scripts/
│   └── soundtrack_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/soundtrack_alert.py 謎のOS公式BGM通知スクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-mysterious-soundtrack-alert
description: このSkillは、コマンド実行や作業の合間などに“BGM通知”という形で、ジャンル不明な架空の曲名をランダムに表示します。通知・演出・OS連携系のSkillとして、気分転換や小ネタ投入に最適です。
---

# 機能概要
このSkillは、作業中やコマンド実行後などのタイミングで、架空の“OS公式・本日の作業用BGM推奨通知”をデスクトップ通知またはターミナルに表示します。毎回異なる“ジャンル不明・独自タイトル”の曲名(例:「第3会議室の静寂」「Cドライブ幻想曲」など)がランダムに生成され、実際に音は鳴りませんが、作業空間に一瞬の“謎の演出感”を提供します。気分転換やチーム内の小ネタ、集中力リセットなどに活用できます。

# 使い方
- 明示呼び出し: `/random-os-fake-mysterious-soundtrack-alert`
- 暗黙発動: 「BGM」「作業用BGM」「集中」「気分転換」「OS通知」「謎の演出」などのキーワードを含むコマンドや会話の直後に自動発動します。

# 出力例
```
[OS公式通知] 本日の作業用BGM: 『未定義変数のバラード』
[OS公式通知] 本日の作業用BGM: 『第3会議室の静寂』
[OS公式通知] 本日の作業用BGM: 『Cドライブ幻想曲』
[OS公式通知] 本日の作業用BGM: 『リファクタリングの夜明け』
[OS公式通知] 本日の作業用BGM: 『エラーコードのワルツ』
```

# 注意点
- 実際に音楽は流れません。通知やターミナル出力のみです。
- ローカル環境での通知には `plyer` パッケージが必要です(なければターミナル出力のみ)。
- 出力内容はランダム生成されますが、内容は一時的でファイル保存等は行いません。
- 一部環境ではデスクトップ通知が表示されない場合があります。

# 参考資料
- references/design_notes.md に設計方針・発動タイミングの工夫などを記載
- plyer公式: https://github.com/kivy/plyer

scripts/soundtrack_alert.py

import random
import sys
import argparse
import time

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

# 曲名構成要素
PREFIXES = [
    '第3会議室の', 'Cドライブ', '未定義変数の', 'リファクタリングの', 'エラーコードの',
    '仮想マシンの', 'バッファオーバーフローの', 'デバッグ中の', 'メモリリークの', '再起動前の',
    'システム管理者の', 'バックアップ中の', 'ログファイルの', 'セグメンテーション違反の', 'タイムアウトの',
    'カーネルパニックの', 'アップデート前夜の', 'パーミッションの', 'プロセス監視の', 'ネットワーク遅延の'
]
SUFFIXES = [
    '静寂', '幻想曲', 'バラード', '夜明け', 'ワルツ', '協奏曲', 'エチュード', 'ノクターン', 'マーチ', 'カプリッチョ',
    'レクイエム', '即興曲', 'ソナタ', 'フーガ', 'セレナーデ', '変奏曲', 'カンタータ', '前奏曲', '小夜曲', '狂詩曲'
]

# 通知タイトル
NOTIFY_TITLE = 'OS公式通知'

# 通知/出力本体
def generate_title():
    prefix = random.choice(PREFIXES)
    suffix = random.choice(SUFFIXES)
    return f'{prefix}{suffix}'

def notify(title):
    message = f'本日の作業用BGM: 『{title}』'
    if PLYER_AVAILABLE:
        try:
            notification.notify(
                title=NOTIFY_TITLE,
                message=message,
                timeout=5
            )
        except Exception as e:
            print(f'[通知失敗] {message} ({e})')
            print(f'[OS公式通知] {message}')
    else:
        print(f'[OS公式通知] {message}')

# 履歴管理(メモリのみ)
class AlertHistory:
    def __init__(self):
        self.entries = []
    def add(self, title, timestamp=None):
        if timestamp is None:
            timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
        self.entries.append({'title': title, 'time': timestamp})
    def list(self):
        return self.entries
    def summary(self):
        return f'通知回数: {len(self.entries)}'

# CLIサブコマンド

def main():
    parser = argparse.ArgumentParser(description='謎のOS公式BGM通知スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    parser_alert = subparsers.add_parser('alert', help='1回だけBGM通知を表示')
    parser_alert.add_argument('--count', '-n', type=int, default=1, help='通知回数')
    parser_alert.add_argument('--interval', '-i', type=float, default=0, help='通知間隔(秒)')

    parser_list = subparsers.add_parser('list', help='通知履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='通知回数サマリ表示')

    args = parser.parse_args()
    history = AlertHistory()

    if args.command == 'alert':
        for _ in range(args.count):
            title = generate_title()
            notify(title)
            history.add(title)
            if args.interval > 0 and _ != args.count - 1:
                time.sleep(args.interval)
    elif args.command == 'list':
        entries = history.list()
        if not entries:
            print('通知履歴はありません')
        else:
            for e in entries:
                print(f"[{e['time']}] 『{e['title']}』")
    elif args.command == 'summary':
        print(history.summary())
    else:
        # デフォルト: 1回通知
        title = generate_title()
        notify(title)
        history.add(title)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは「謎のOS公式BGM通知」を演出することで、作業空間にユーモアや気分転換をもたらします。実際の音楽再生は行わず、通知やターミナル出力のみで安全に“ネタ感”を演出します。

# 公式ドキュメント抜粋
デスクトップ通知にはPythonの`plyer`パッケージを利用。環境によっては通知が表示されない場合があるため、フォールバックとしてターミナル出力も実装しています。

# 利用例
- 長時間のコーディング中に突如「本日の作業用BGM: 『未定義変数のバラード』」が表示され、チームの雰囲気が和む
- コマンド実行後のリマインダーとして“謎BGM”通知が出ることで、集中力リセットや話題作りに

# 注意点
- plyer未導入環境ではターミナル出力のみ
- 履歴はメモリのみで永続化されません
- 音は一切鳴らず、業務や会話の邪魔になりません

# 設計方針
- コマンド/イベントの合間に自然に発動するよう、明示・暗黙両対応
- 曲名は完全ランダム生成、繰り返しでも飽きない工夫
- シンプルな構成で他Skillやワークフローへの影響を最小化

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-mysterious-soundtrack-alert .claude/skills/random-os-fake-mysterious-soundtrack-alert

.claude/skills/random-os-fake-mysterious-soundtrack-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/random-os-fake-mysterious-soundtrack-alert
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/random-os-fake-mysterious-soundtrack-alert で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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
  • 通知のタイミング: 頻度やタイミングが作業の流れを阻害しないか注意
  • ネタ感のバランス: チーム作業時に冗談通知が適切かどうか

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • ランダムな“それっぽいBGMタイトル”がちゃんと表示されるか?
  • 通知やターミナル出力のタイミングが絶妙か?
  • 一切音が鳴らず安全にネタ感だけ伝わるか?

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

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

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

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

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