Claude Codeで開発現場に笑いを届ける通知演出の作り方

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

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

Claude Code を使っていると、日々のコーディングやリポジトリ操作の中で、思わず「あるある」と感じる小さなストレスが積み重なりがちです。特に開発現場では、集中してAI coding workflowをまわしていると、ふとした瞬間に気分転換やリフレッシュが欲しくなるものです。しかし、現実には以下のような悩みがよく見られます。

  • 作業中、Claude Code が突然違う directory を見始めて、想定外のファイルや path に context が飛ぶことがある
  • monorepo の大規模 repository で package を跨いだ途端、Claude Code の repository understanding がリセットされてしまう
  • session を再開するたび、前回までの memory や重要な context を再度チャットで説明し直す必要がある
  • 長時間のAI coding workflowで context が肥大化し、重要な情報が埋もれて stale context になる
  • 「今どの directory を見ているのか」「この repository はどういう構造か」を毎回チャット冒頭で説明する手間が発生する

また、「通知・演出・OS連携」系のSkillが少なく、開発現場にちょっとした遊びや緩さを持たせづらい点も、密かな不満として挙げられます。

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

一言サマリ: 作業中に突如デスクトップ通知で“謎のOSパッチノート”が現れますSkill。

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

  • 集中している時ほど、完全ランダムなタイミングで「意味不明なOSパッチノート通知」が現れ、開発現場に笑いとリラックス感をもたらす
  • 長時間のAI coding workflowやmonorepo作業で張り詰めた空気を一瞬で崩し、気分転換・場の和みを演出できる
  • 「バグ:やる気が0になる問題を修正」など、現実にはあり得ないアップデート情報で、チーム内のコミュニケーションネタにもなる
  • 通知の内容やタイミングが完全にランダムなので、次に何が来るか分からないワクワク感が生まれる
  • Claude Code の context や repository understanding には一切影響を与えず、安心して導入できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-patch-notifier .claude/skills/random-os-fake-patch-notifier

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

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

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


# /random-os-fake-patch-notifier

[通知]
タイトル: OSパッチノート v13.4.9
本文: バグ修正: 3時のおやつを食べ忘れる問題を修正
新機能: 気圧が下がると自動でコードレビューをスキップ

(この通知は完全に架空です。作業には影響ありません)

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


> monorepo の packages/core から packages/utils へ移動

[通知]
タイトル: OSアップデート v2024.06.01
本文: 新機能: package 跨ぎ時に「どこだここ?」ボタンを追加
バグ修正: 重要なファイルを見失う問題を解決できませんでした

(通知内容は毎回異なります)

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


> /random-os-fake-patch-notifier

[通知]
タイトル: OSパッチノート v0.0.42
本文: 新機能: 午後3時に眠気を自動注入
バグ修正: 週明けだけやる気が出ない問題を仕様として認定

(気分転換・雑談のきっかけに)

before / after の違い

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

発動方式

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

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-patch-notifier/
├── SKILL.md
├── scripts/
│   └── random_os_fake_patch_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-patch-notifier
description: 作業中やコーディングセッション中など、集中している際に突発的なタイミングで“架空のOSパッチノート”通知を発生させます。明示呼び出し(/random-os-fake-patch-notifier)や、作業・OS・アップデート・パッチなどのキーワード検知時にも自動発動します。
---

# 機能概要
このSkillは、開発現場や作業中のユーザーに対して、完全ランダムなタイミングで“謎のOSパッチノート”をデスクトップ通知として表示します。通知内容は毎回異なり、実際には存在しない奇妙なバグ修正や新機能(例:「バグ:やる気が0になる問題を修正」「新機能:午後3時に眠気を自動注入」)など、ユーモアと混乱をもたらします。集中をほぐしたい時や、チームに笑いを提供したい時に最適です。

# 使い方
- 明示呼び出し: `/random-os-fake-patch-notifier` を実行すると即座に通知が発生します。
- 暗黙発動: 「アップデート」「パッチ」「OS」「作業効率」などのキーワードを含む会話やコマンド実行時、または完全ランダムなタイミングで自動発動します。
- 通知はOS標準の通知システムを利用し、内容・タイミングともに毎回異なります。

# 出力例
```
[通知] OS Patch Notes 2.7.13
- バグ修正: キーボードの「やる気」キーが物理的に消失する問題を解決
- 新機能: 午後3時になると自動で睡魔を注入します
- 既知の問題: コーヒー検出機能が誤作動する場合があります
```

# 注意点
- 通知内容は完全に架空で実用性はありません
- ローカル環境の通知API(例: notify-send, Windows Toast, macOS通知)を利用します
- スクリプトは作業内容やファイルに一切影響を与えません
- 除外パスや保存先の指定は不要です

# 参考資料
- 詳細な設計方針や利用例は `references/design_notes.md` を参照
- OS通知API: https://docs.python.org/ja/3/library/subprocess.html, https://pypi.org/project/plyer/

scripts/random_os_fake_patch_notifier.py

import sys
import time
import random
import argparse
import platform
import subprocess
from datetime import datetime

# 架空のパッチノート生成用データ
FAKE_BUGS = [
    "やる気が0になる問題を修正",
    "キーボードの『やる気』キーが物理的に消失する問題を解決",
    "コーヒー検出機能が誤作動する場合があります",
    "マウスカーソルが画面外に逃げ出すバグを修正",
    "CPUが突然詩を詠み始める問題を修正",
    "ディスプレイがランダムに上下逆さまになる現象を解決",
    "タスクバーが昼寝を始めるバグを修正",
    "音量ミキサーが勝手にクラシックモードになる問題",
    "スクリーンセーバーが現実逃避するバグを修正",
    "ファイル名が全て『未定』になる問題を解決"
]
FAKE_FEATURES = [
    "午後3時になると自動で睡魔を注入します",
    "新しい『やる気ブースト』ボタンを追加",
    "ランダムで壁紙が昭和風に変わる機能",
    "USB接続時に『ご褒美』サウンドを再生",
    "自動でタスクを先延ばしする機能",
    "進捗ゼロでも祝福通知を送信",
    "マウスポインタが時々ジャンプする新仕様",
    "未保存ファイルを自動で妄想保存",
    "『やる気』メーターを常時表示",
    "新しいバグを毎週自動生成"
]
FAKE_KNOWN_ISSUES = [
    "コーヒー検出機能が誤作動する場合があります",
    "進捗バーが逆走することがあります",
    "やる気ブーストが一時的に無効になることがあります",
    "壁紙が昭和風に固定されることがあります",
    "USBご褒美サウンドが鳴らない場合があります",
    "未保存ファイルが妄想保存されないことがあります",
    "祝福通知が過剰に発生する場合があります"
]


def generate_fake_patch_note():
    version = f"{random.randint(1, 10)}.{random.randint(0, 20)}.{random.randint(0, 99)}"
    bugs = random.sample(FAKE_BUGS, k=random.randint(1, 2))
    features = random.sample(FAKE_FEATURES, k=random.randint(1, 2))
    known_issues = random.sample(FAKE_KNOWN_ISSUES, k=1)
    lines = [f"OS Patch Notes {version}"]
    for b in bugs:
        lines.append(f"- バグ修正: {b}")
    for f in features:
        lines.append(f"- 新機能: {f}")
    for k in known_issues:
        lines.append(f"- 既知の問題: {k}")
    return "\n".join(lines)


def send_notification(title, message):
    system = platform.system()
    try:
        if system == "Darwin":  # macOS
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(["osascript", "-e", script], check=True)
        elif system == "Linux":
            subprocess.run(["notify-send", title, message], check=True)
        elif system == "Windows":
            import win10toast
            toaster = win10toast.ToastNotifier()
            toaster.show_toast(title, message, duration=7)
        else:
            print(f"[通知] {title}\n{message}")
    except Exception as e:
        print(f"通知送信に失敗しました: {e}")
        print(f"[通知] {title}\n{message}")


def log_patch_note(note):
    log_file = "random_os_fake_patch.log"
    with open(log_file, "a", encoding="utf-8") as f:
        f.write(f"[{datetime.now().isoformat()}]\n{note}\n\n")


def list_logs():
    log_file = "random_os_fake_patch.log"
    try:
        with open(log_file, "r", encoding="utf-8") as f:
            print(f.read())
    except FileNotFoundError:
        print("まだ通知履歴がありません。")


def summary_logs():
    log_file = "random_os_fake_patch.log"
    try:
        with open(log_file, "r", encoding="utf-8") as f:
            lines = f.readlines()
        count = sum(1 for l in lines if l.startswith("["))
        print(f"通知履歴数: {count}")
    except FileNotFoundError:
        print("まだ通知履歴がありません。")


def random_wait_loop(min_sec=600, max_sec=3600):
    while True:
        wait_time = random.randint(min_sec, max_sec)
        time.sleep(wait_time)
        note = generate_fake_patch_note()
        send_notification("OS Patch Notes", note)
        log_patch_note(note)


def main():
    parser = argparse.ArgumentParser(description="謎のOSパッチノート通知スクリプト")
    subparsers = parser.add_subparsers(dest="command")

    parser_notify = subparsers.add_parser("notify", help="即座に通知を発生させる")
    parser_loop = subparsers.add_parser("loop", help="ランダムなタイミングで自動通知を繰り返す")
    parser_list = subparsers.add_parser("list", help="通知履歴を表示")
    parser_summary = subparsers.add_parser("summary", help="通知履歴の件数を表示")

    args = parser.parse_args()

    if args.command == "notify":
        note = generate_fake_patch_note()
        send_notification("OS Patch Notes", note)
        log_patch_note(note)
    elif args.command == "loop":
        print("ランダム通知ループを開始します (Ctrl+Cで停止)...")
        try:
            random_wait_loop()
        except KeyboardInterrupt:
            print("\n通知ループを終了しました。")
    elif args.command == "list":
        list_logs()
    elif args.command == "summary":
        summary_logs()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、集中作業中のユーザーに対し、完全に架空のOSパッチノート通知をランダムなタイミングで表示することで、笑いやリフレッシュを提供する目的で設計されています。

# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/ja/3/library/subprocess.html
- notify-send (Linux): https://wiki.archlinux.jp/index.php/Notify-send
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html
- win10toast (Windows): https://pypi.org/project/win10toast/

# 利用例
- チーム開発現場での気分転換
- 長時間作業中のリフレッシュ
- コミュニケーションのきっかけ作り

# 注意点
- 通知内容は実用性皆無のジョークです
- 通知APIが利用できない環境では標準出力にフォールバックします
- ログファイルは同ディレクトリに保存されます

# 設計方針
- OSごとに適切な通知APIを自動判別
- 通知内容・発火タイミングともに完全ランダム
- 履歴ログ/summary機能で振り返りやすさも確保

導入手順

この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-patch-notifier .claude/skills/random-os-fake-patch-notifier

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-patch-notifier で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
  • 完全ランダムなタイミングで通知が発火するか?
  • 通知タイトル・本文が毎回違うネタ生成か?
  • 通知が環境や作業内容に影響を与えないことをどう担保するか?

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

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

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

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

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