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

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

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

日々の開発現場でClaude Codeを使っていると、便利さの一方で「ちょっとした緊張感」や「気の抜けた瞬間」が生まれがちです。特に長時間のAI coding workflowや複雑なrepository understandingを求められる場面では、集中力の維持や作業リズムの変化が課題になることもあります。

  • 作業に没頭していると、ふとした瞬間に集中が切れてしまい、再度エンジンをかけ直すのが面倒
  • onboardingや長時間作業で同じdirectoryやpath managementの説明ばかりしていて、単調な空気が漂う
  • monorepoの巨大なrepository構造を前にして、ちょっとした「笑い」や「緩和」が欲しくなる
  • AIとのやりとりが効率的になりすぎて、逆に人間らしい「脱力タイム」やユーモアが不足しがち
  • 突然の通知や演出で一瞬だけでも「今、何が起きた?」とリフレッシュしたい気持ちになる

通知・演出・OS連携カテゴリのSkillがあれば、こうした「単調さ」や「緊張の持続」に変化を与えられるのでは、という声もよく聞かれます。

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

一言サマリ: あなたの作業中Skill。

このSkillは、Claude CodeのAI coding workflowに「謎のOS緊急パッチアラート」という演出を加えることで、作業中の空気を一変させます。意味不明なウソパッチノートがランダムにデスクトップ通知されるため、開発現場に一瞬のカオスや笑いを提供し、リフレッシュや話題作りにも最適です。

  • 集中が途切れがちな長時間作業やonboarding時に、意図的な「脱力」や「笑い」を演出できる
  • monorepoや複雑なrepositoryでの緊張感を和らげ、チーム内のコミュニケーションのきっかけを生む
  • ランダムな通知内容により、毎回違ったcontextや気分転換が得られる
  • OS連携によるデスクトップ通知で、AI coding workflowに新しい体験を追加できる
  • Skillの導入・削除も容易で、気分に合わせて使い分けが可能
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-fake-urgent-patch-alert .claude/skills/os-fake-urgent-patch-alert

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

このSkillを導入すると、作業中に突然「謎のOS緊急パッチアラート」がデスクトップに通知されます。毎回内容が異なり、意味不明なウソパッチノートが炸裂します。

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


# /os-fake-urgent-patch-alert
> セッションを開始します

[OS緊急パッチ通知]
超重要:バグ『脳内会議ループが止まらない』を修正しました。
パッチ内容: 仮想メモリに「やる気スイッチ」を追加。
再起動は不要ですが、気が向いたら立ち上がってください。
詳細は /var/log/yurui-update.log をご覧ください。

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


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

[OS緊急パッチ通知]
新機能: 「package跨ぎ時の記憶喪失」バグを一時的に回避。
今だけ repository understanding が5%向上します。
適用対象: packages/* ディレクトリ全体
副作用: 特にありませんが、気分は少し上がります。

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


> ちょっと一息つきたい

[OS緊急パッチ通知]
重要: 「やる気を1.5倍に加速」する暫定パッチを適用しました。
持続時間: 約15分 (個人差あり)
注意: 効果切れ後は適宜リフレッシュしてください。

before / after の違い

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

発動方式

明示呼び出し (/os-fake-urgent-patch-alert) と、自然言語での説明マッチ(例:「パッチノート通知を出して」など)による暗黙発動の両方に対応しています。

Skill の中身を全部見せる

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

.claude/skills/os-fake-urgent-patch-alert/
├── SKILL.md
├── scripts/
│   └── fake_patch_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-urgent-patch-alert
description: 作業中やコード編集時、"緊急"や"パッチ"、"バグ修正"などのキーワードを含む会話やコマンド実行時、もしくは明示的な /os-fake-urgent-patch-alert 呼び出し時に発動。ユーザーの集中を和らげる演出として利用。
---

# 機能概要
このSkillは、作業中のデスクトップに“謎のOS緊急パッチアラート”をランダムな内容で通知します。通知内容は毎回異なり、実際には全く意味のないウソのパッチノート(例:「バグ『脳内会議ループ』修正」「やる気を一時的に1.5倍に加速」など)が表示されます。開発現場に無駄な緊張感と笑いを同時に提供し、一瞬のカオスな雰囲気を演出します。

# 使い方
- 明示呼び出し例:`/os-fake-urgent-patch-alert`
- 暗黙発動キーワード例:「緊急パッチ」「バグ修正」「OSアップデート」「patch」「hotfix」などの単語が会話やコマンドに含まれると自動発動します。

# 出力例
```
[OS緊急パッチ通知]
超重要:バグ「脳内会議ループが止まらない」を修正しました。
新機能:やる気を一時的に1.5倍に加速します。
既知の問題:コーヒー摂取量が増加する可能性があります。
再起動は不要です。
```

# 注意点
- デスクトップ通知のみを行い、システムやファイルには一切影響を与えません。
- 通知内容はすべてフィクションです。実際のアップデートやパッチは行われません。
- ログや履歴はローカルに保存されません。
- Linux/macOS/Windowsの主要なデスクトップ通知APIに対応していますが、環境によっては通知が表示されない場合があります。

# 参考資料
- 参考: references/design_notes.md
- 公式: [Python plyer通知API](https://plyer.readthedocs.io/en/latest/)
- 通知のクロスプラットフォーム実装例: [notify2](https://pypi.org/project/notify2/), [win10toast](https://pypi.org/project/win10toast/)

scripts/fake_patch_alert.py

import random
import sys
import argparse
import platform
import time

try:
    from plyer import notification
except ImportError:
    notification = None

FAKE_PATCH_TITLES = [
    '超重要:バグ「脳内会議ループが止まらない」を修正',
    '新機能:やる気を一時的に1.5倍に加速',
    '安定性向上:コーヒー依存度を最適化',
    '致命的バグ「思考が現実逃避する」修正',
    '新機能:Slack通知を自動でミュート',
    'パフォーマンス改善:昼食後の眠気を低減',
    'セキュリティ強化:社内噂話フィルター搭載',
    '既知の問題:エラー「やる気が見つかりません」',
    'UI改善:TODOリストが無限スクロール対応',
    'バグ修正:金曜日の集中力が消失する問題'
]

FAKE_PATCH_DETAILS = [
    '再起動は不要です。',
    '既知の問題:コーヒー摂取量が増加する可能性があります。',
    'このパッチは自動で適用されました。',
    '詳細は社内Wikiをご参照ください。',
    '本パッチにより開発効率が0.01%向上します。',
    '一部環境で「やる気」が暴走する場合があります。',
    '本通知は自動生成されています。',
    '次回アップデートで更なる混乱を予定しています。',
    'このパッチは現実には存在しません。',
    '万が一の場合は深呼吸してください。'
]

HISTORY = []


def generate_fake_patch():
    lines = []
    num_titles = random.randint(1, 3)
    titles = random.sample(FAKE_PATCH_TITLES, num_titles)
    details = random.sample(FAKE_PATCH_DETAILS, random.randint(1, 2))
    lines.append('[OS緊急パッチ通知]')
    lines.extend(titles)
    lines.extend(details)
    return '\n'.join(lines)


def show_notification(message):
    if notification is None:
        print("plyerがインストールされていません。通知はコンソール出力のみです。")
        print(message)
        return
    try:
        notification.notify(
            title="OS緊急パッチアラート",
            message=message,
            timeout=10
        )
    except Exception as e:
        print(f"通知エラー: {e}")
        print(message)


def log_history(message):
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    HISTORY.append({'time': timestamp, 'message': message})


def list_history():
    if not HISTORY:
        print("通知履歴はありません。")
        return
    for idx, item in enumerate(HISTORY, 1):
        print(f"[{idx}] {item['time']}\n{item['message']}\n")


def summary():
    print(f"発行済み通知数: {len(HISTORY)}")
    if HISTORY:
        print(f"最新通知: {HISTORY[-1]['time']}\n{HISTORY[-1]['message']}")


def main():
    parser = argparse.ArgumentParser(description='OS緊急パッチアラート (フェイク通知)')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='フェイクパッチ通知を発行')
    parser_log.add_argument('--count', type=int, default=1, help='通知回数 (デフォルト1)')
    parser_list = subparsers.add_parser('list', help='通知履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='通知サマリーを表示')

    args = parser.parse_args()
    if args.command == 'log':
        for _ in range(args.count):
            msg = generate_fake_patch()
            show_notification(msg)
            log_history(msg)
            time.sleep(1)
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、開発現場に“謎の緊張感”と“笑い”をもたらすフェイク通知演出を目的としています。通知内容は完全にフィクションで、実害を与えない設計です。

# 公式ドキュメント抜粋
通知部分はPythonの`plyer.notification`を利用。クロスプラットフォーム対応で、macOS/Linux/Windowsの主要なデスクトップ通知APIをラップしています。詳細: https://plyer.readthedocs.io/en/latest/

# 利用例
- `/os-fake-urgent-patch-alert` で即座に通知
- CLI: `python fake_patch_alert.py log --count 3` で3回連続通知
- `python fake_patch_alert.py list` で履歴確認

# 注意点
- plyer未導入環境ではコンソール出力のみ
- 実際のシステムやファイルには一切影響なし
- ログはプロセス内のみ保持し、永続化なし

# 設計方針
- “意味のない通知”を毎回ランダム生成
- 実在APIのみ利用し、外部システムへの副作用ゼロ
- 履歴・サマリー機能もCLIでサポート

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-fake-urgent-patch-alert .claude/skills/os-fake-urgent-patch-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/os-fake-urgent-patch-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 との連携設計はどうあるべきか?
  • 通知が意図通りデスクトップに表示されるか?
  • 通知文面が毎回ランダムで変わるか?
  • 実害(データ損失など)が一切出ないことをどう担保するか?

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

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

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

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

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