Claude Codeで職場を盛り上げる怪しいOS通知演出の作り方

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

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

Claude Code を日常的に使っていると、集中して作業したいタイミングに限って、なぜか外部からの通知や割り込みが発生しがちです。特に「今から本気出すぞ」という瞬間に、OSやツールからの“どうでもいい”通知が現れて思わず脱力した経験がある方も多いはずです。
また、通知や演出系 Skill を活用したいものの、「本当に必要な情報」と「ちょっとした息抜き」のバランスが難しいと感じる場面もあります。

  • 作業に集中し始めた直後に、OSが謎のアップデート通知を表示してきて思わず手が止まる
  • オンライン会議やチーム作業中、場が静まり返った瞬間に“どうでもいい”通知で空気を変えたいが手間がかかる
  • 真面目な流れにあえてツッコミどころを入れて、場を和ませたいのに、自然な演出方法が見つからない
  • 長時間のAI coding workflowで集中力が切れた時、ちょっとしたブレイクや笑いが欲しいが、適切なタイミングや内容に困る
  • 通知が本物のOSアップデートと誤認されて、逆に混乱を招くリスクも気になる

通知・演出・OS連携系 Skill にありがちな「本当に役立つ演出」と「ウケ狙いのバランス」に悩む人も多いのではないでしょうか。

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

一言サマリ: 作業に集中し始めたその瞬間Skill。

このSkillを導入することで、作業開始やリポジトリ移動などのタイミングで、完全ランダムかつ明らかに嘘くさい「OSアップデート通知」を自動で演出できます。Claude Code のAI coding workflowに“ツッコミどころ”を加えることで、集中力のリフレッシュやチームの空気作りに役立ちます。

  • AI coding workflowの合間に、contextやrepository understandingを崩さず“息抜き”を自動挿入
  • monorepoや複雑なdirectory構造でも、path managementに支障なくお遊び要素を組み込める
  • onboardingやsession再開時、自然な流れで「謎のアップデート通知」が現れ、チームの和やかな雰囲気作りに貢献
  • Skillの発動頻度や内容は完全ランダムで、毎回違う“くだらなさ”を楽しめる
  • 本物のOS通知と誤認しにくいよう、明らかにネタ要素の強い文言を採用
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /random-os-fake-update-notifier

[OSアップデート通知]
新機能: ターミナルの背景色がランダムでレインボーになる機能を追加しました。
バグ修正: ごく稀に「やる気スイッチ」が物理的に押せなくなる問題を修正しました。
重要: 今回のアップデートは全く重要ではありません。作業を続けてください。

アップデート日時: 2024-07-01 09:13:00
適用対象: /src/feature/experimental/

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


> monorepo の packages/ui/ へ移動

[OSアップデート通知]
新機能: ボタンを押すと「押した感」が3%増す効果音を追加しました。
既知の問題: 稀に「UIがやる気を失う」現象が発生しますが、仕様です。
アップデート内容の詳細は README.md を読んでも理解できません。

アップデート日時: 2024-07-01 10:27:44
適用対象: /packages/ui/

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


> ちょっと休憩したい時

[OSアップデート通知]
新機能: 休憩中にだけ現れる「仮想コーヒーブレイクタイマー」を追加しました。
バグ修正: たまに「休憩に入ると逆に忙しくなる」問題を見なかったことにしました。
重要: このアップデートは全く役に立ちません。

アップデート日時: 2024-07-01 11:42:18
適用対象: /docs/

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-update-notifier) と暗黙発動 (「アップデート通知して」等の自然言語指示) の両方に対応。

Skill の中身を全部見せる

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

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

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-update-notifier
description: 作業やコーディングに集中し始めた直後や「アップデート」「通知」「バージョン」などのキーワードを検知した際に、明示的または自動で“謎のOSアップデート通知”を発動します。
---

# 機能概要
`random-os-fake-update-notifier`は、作業に没頭し始めた瞬間や「アップデート」「通知」「バージョン」などのワードが現れた際に、デスクトップ上に“謎のOSアップデート通知”を表示するスキルです。通知内容は完全ランダムで、明らかに嘘くさい機能追加や意味不明なバグフィックスが並びます。これにより、集中力の緩和や職場・会議での場の和み、ユーモラスな演出を実現します。

# 使い方
- 明示呼び出し: `/random-os-fake-update-notifier` を実行
- 暗黙発動: 「アップデート」「通知」「バージョン」「パッチ」などの単語が会話やコードに出現した時、自動で発動します。

# 出力例
```
[OS Update Notifier]
新機能: “クリップボードの中身が詩的に自動要約される”が追加されました。
バグ修正: “ごく稀に時計が未来に進みすぎる問題”を修正しました。
その他: “意味のない通知をさらに高速化”しました。

再起動は必要ありません。
```

# 注意点
- 本スキルは実際のOS通知とは明確に区別されるよう、デザインや文面に工夫があります。
- ローカルに通知履歴を保存しません。演出目的でのみご利用ください。
- 業務システムや重要な通知と混同しないようご注意ください。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。Pythonの`plyer`ライブラリを利用したクロスプラットフォーム通知APIを採用しています。

scripts/random_os_fake_update_notifier.py

import random
import argparse
import sys
import time
from plyer import notification

FAKE_FEATURES = [
    'クリップボードの中身が詩的に自動要約される',
    'デスクトップアイコンがランダムに並び替わる',
    '全ウィンドウが時々半透明になる',
    'カレンダーに「謎の祝日」が自動追加される',
    'ファイル名が時々韻を踏むように変換される',
    'スクリーンショット時に謎のエフェクトがかかる',
    'マウスカーソルが一瞬だけ消える',
    '音量調整時に「おみくじ」が表示される',
    'スタートメニューが逆さまになる',
    'バッテリー残量が「やる気」で表示される'
]

FAKE_BUGFIXES = [
    'ごく稀に時計が未来に進みすぎる問題を修正',
    '意味のない通知が二重に表示される不具合を修正',
    'スリープ復帰時に壁紙が消えるバグを修正',
    '一部環境で「やる気」が表示されない問題を修正',
    'タスクバーが踊りだす現象を改善',
    'ウィンドウが勝手に最小化されるバグを修正',
    '謎のエラーコード「0xDEADBEEF」を非表示化',
    '時々マウスカーソルが巨大化する問題を修正',
    '通知音が「猫の鳴き声」になるバグを修正',
    '再起動要求が唐突すぎる問題を緩和'
]

FAKE_OTHERS = [
    '意味のない通知をさらに高速化',
    'アップデート通知のフォントを気分で変更',
    '通知の色合いがより謎めいたものに',
    '「アップデート完了」の表示タイミングをランダム化',
    '通知ウィンドウの閉じるボタンが時々消える',
    'アップデート説明文がより長くなりました',
    '通知がたまに英語になるバグを仕様に変更',
    '更新履歴が「詩的」になりました',
    '通知が自動で自己紹介するようになりました',
    '「特に何もしていません」アップデートを追加'
]

NOTIFY_TITLE = 'OS Update Notifier'


def generate_fake_update():
    feature = random.choice(FAKE_FEATURES)
    bugfix = random.choice(FAKE_BUGFIXES)
    other = random.choice(FAKE_OTHERS)
    lines = [
        f'新機能: “{feature}”が追加されました。',
        f'バグ修正: “{bugfix}。”',
        f'その他: “{other}”。',
        '\n再起動は必要ありません。'
    ]
    return '\n'.join(lines)


def show_notification(message):
    try:
        notification.notify(
            title=NOTIFY_TITLE,
            message=message,
            app_name='Fake OS Updater',
            timeout=8
        )
    except Exception as e:
        print(f"[ERROR] 通知の表示に失敗しました: {e}", file=sys.stderr)


def log_fake_update(message, logfile=None):
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    logline = f'[{timestamp}] {message.replace(chr(10), " ")}\n'
    if logfile:
        try:
            with open(logfile, 'a', encoding='utf-8') as f:
                f.write(logline)
        except Exception as e:
            print(f"[ERROR] ログファイルへの書き込みに失敗: {e}", file=sys.stderr)
    else:
        print(logline)


def list_fake_updates(count=5):
    for _ in range(count):
        msg = generate_fake_update()
        print(f'---\n{msg}\n')


def summary_fake_updates(count=10):
    features = set()
    bugfixes = set()
    others = set()
    for _ in range(count):
        features.add(random.choice(FAKE_FEATURES))
        bugfixes.add(random.choice(FAKE_BUGFIXES))
        others.add(random.choice(FAKE_OTHERS))
    print('# これまでの(架空)アップデート要約')
    print('## 新機能:')
    for f in features:
        print(f'- {f}')
    print('## バグ修正:')
    for b in bugfixes:
        print(f'- {b}')
    print('## その他:')
    for o in others:
        print(f'- {o}')


def main():
    parser = argparse.ArgumentParser(description='謎のOSアップデート通知を表示します。')
    subparsers = parser.add_subparsers(dest='command', required=False)

    parser_log = subparsers.add_parser('log', help='ランダム通知を生成し、ログに記録')
    parser_log.add_argument('--logfile', type=str, help='ログファイルパス')

    parser_list = subparsers.add_parser('list', help='ランダム通知を複数出力')
    parser_list.add_argument('--count', type=int, default=5, help='出力件数')

    parser_summary = subparsers.add_parser('summary', help='架空アップデートの要約を表示')
    parser_summary.add_argument('--count', type=int, default=10, help='集計件数')

    parser_notify = subparsers.add_parser('notify', help='通知をデスクトップに表示')

    args = parser.parse_args()

    if args.command == 'log':
        msg = generate_fake_update()
        log_fake_update(msg, args.logfile)
    elif args.command == 'list':
        list_fake_updates(args.count)
    elif args.command == 'summary':
        summary_fake_updates(args.count)
    elif args.command == 'notify' or args.command is None:
        msg = generate_fake_update()
        show_notification(msg)
        print(f'\n[通知内容]\n{msg}\n')
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このスキルは、作業中に“謎のOSアップデート通知”をあえて表示し、集中力の緩和や場の和みを演出するためのものです。通知内容は完全に架空で、実際のOS通知と間違えないよう文面やタイトルに工夫を凝らしています。

# 公式ドキュメント抜粋
通知表示には Python の plyer ライブラリ(https://plyer.readthedocs.io/en/latest/)を利用しています。クロスプラットフォームで動作し、Windows/Mac/Linux いずれでもデスクトップ通知が可能です。

# 利用例
- オンライン会議中にこっそり発動し、笑いを誘う
- チームの雑談タイムやアイスブレイクで活用
- コーディングに集中しすぎた時のリフレッシュ

# 注意点
本スキルは冗談・演出目的です。業務上重要な通知やセキュリティ関連の実通知とは絶対に混同しないようにしてください。

# 設計方針
- 内容は明らかに“くだらない”ものに限定
- タイトルや文面で本物のOS通知と誤認しない工夫
- ログ保存や出力コマンドも用意し、演出用途に幅を持たせています。

導入手順

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

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-update-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 との連携設計はどうあるべきか?
  • 通知内容が十分に“くだらない”か?
  • 実際のOS通知と誤認しすぎない工夫があるか?
  • トリガーや頻度調整が適切か?

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

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

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

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

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