Claude CodeでユニークなOS通知を活用する演出スキル構築ガイド

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

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

Claude Code を日々使い込むユーザーほど、ちょっとした「集中の落とし穴」や「作業リズムのマンネリ化」に気づくことが多いものです。AI coding workflow の中で、context や repository understanding に気を取られる瞬間もあれば、長時間の作業で思考が固まりがちになることも。「もう少し遊び心がほしい」「リフレッシュしたい」と感じる場面は意外と多いのではないでしょうか。

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

特に「通知・演出・OS連携」まわりでは、真面目な作業が続く反動で、ちょっとした“非日常”や“意外性”を求めたくなるタイミングも。そんなとき、AIから唐突に「ありえない OS パッチノート」が飛んできたら——。思わず手が止まり、集中力がリセットされる体験は、想像以上のインパクトです。

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

一言サマリ: このスキルは、Claude Code の作業空間に「突発・謎のOS公式パッチ通知」をランダムで挿入し、集中力とworkflowに“破壊的な笑い”をもたらします。

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

  • 長時間の AI coding workflow でマンネリ化した context に“強制リフレッシュ”の刺激が入る
  • repository understanding や path management に没頭しすぎた脳を、意図的に脱線させてくれる
  • onboarding や session 再開時など、緊張感が高まりがちな場面で場の空気を和らげられる
  • monorepo や巨大 directory 構造の中で、思わず笑ってしまう“あり得ないパッチノート”が流れることで、作業ストレスを一時的にリセットできる
  • AI coding workflow にユーモアと遊び心を取り入れ、チームや個人の集中力持続をサポートする
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /random-os-fake-patch-tuesday-alert

[OS緊急パッチチューズデー通知]
本日、全ユーザーの Ctrl キー押下速度が基準値未満のため、
「Ctrl+S」のショートカットが自動的に「Ctrl+Z」に再割り当てされました。
新機能: Shift キー長押しで OS が即興俳句を朗読します。
(適用対象: /src/, /config/, /README.md)
詳細は仮想サポートセンターまで。

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


> 今から packages/api/ のテストコードを修正

[OS緊急パッチチューズデー通知]
「packages/ui/」ディレクトリで Alt キーが3秒以上押されると、
全 API レスポンスが詩的表現に変換されます。
バグ修正: node_modules 内のファイルは自動的に消滅することがなくなりました。
(影響範囲: packages/api/, packages/ui/)
本アップデートは自動的に適用されます。

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


> ちょっと気分転換したい

[OS緊急パッチチューズデー通知]
新機能: F5 キーを叩くごとに、OSが「本日のラッキーカラー」をターミナルに表示します。
既知の問題: 一部の directory で Enter キーが詩的に反応する場合があります。
(影響: /playground/, /sandbox/)
詳細は想像力の範囲内でご確認ください。

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-patch-tuesday-alert) と暗黙発動 (説明文や会話内容にマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-patch-tuesday-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_patch_tuesday_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-patch-tuesday-alert
description: このSkillは、コマンド実行や作業の合間に“パッチ”や“アップデート”といったキーワードが現れた際、または明示的に /random-os-fake-patch-tuesday-alert を呼び出した際に発動します。完全ランダムな内容の“謎OSパッチノート風通知”を生成し、デスクトップ通知またはターミナル演出で表示します。
---

# 機能概要
random-os-fake-patch-tuesday-alertは、あなたの作業中に突然“謎のOS公式・緊急パッチチューズデー通知”を炸裂させるSkillです。内容は完全ランダム生成で、現実には絶対存在しない珍妙なパッチノート風(例:Ctrlキーの押下速度が基準値未満のため緊急アップデート、新機能: Altキー長押しでOSが詩を朗読等)。真面目な作業やコマンド実行の合間に、集中力を一瞬でハッキングする演出を提供します。

# 使い方
- 明示的な呼び出し: `/random-os-fake-patch-tuesday-alert` または `/skill random-os-fake-patch-tuesday-alert`
- 暗黙発動: 「パッチ」「アップデート」「OS」「チューズデー」などのキーワードや、コマンド履歴・作業ログ内の類似語を検知した際に自動発動します。
- デスクトップ通知/ターミナル演出は環境に応じて自動選択されます。

# 出力例
```
[Patch Tuesday Alert]
OSバージョン: 13.4.7-fake
- 新機能: Shiftキー5連打で画面が180度回転します。
- 修正: CapsLockが押された際、全ウィンドウが詩的に閉じる問題を解決。
- 既知の問題: マウスホイール逆回転時に天気予報が流れる場合があります。
```

# 注意点
- 本Skillは完全に架空の通知を生成します。実際のOSアップデートやセキュリティ情報とは一切関係ありません。
- ローカルに通知履歴は保存されません。
- 一部環境ではデスクトップ通知が表示されない場合があります(その場合はターミナル演出のみ)。
- 通知内容は毎回ランダム生成されます。

# 参考資料
- [references/design_notes.md](references/design_notes.md)
- 公式API: [plyer.notification](https://plyer.readthedocs.io/en/latest/)
- Python標準: random, argparse, sys

scripts/random_os_fake_patch_tuesday_alert.py

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

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

OS_VERSIONS = [
    '10.0.1-fake', '11.2.9-beta', '13.4.7-fake', 'X.0.0.1-phantom', '2024.06.99-ghost', '9.9.9-myth', '8.1.5-absurd'
]

NEW_FEATURES = [
    'Shiftキー5連打で画面が180度回転します。',
    'Altキー長押しでOSが詩を朗読します。',
    'Ctrlキーの押下速度が基準値未満の場合、全アプリが自動で再起動します。',
    'エクスプローラーで「猫」と入力すると、画面が毛だらけになります。',
    'F1キーでサポートセンターのAIが即座に謎かけを開始します。',
    'PrintScreenで現在の気分がSNSに自動投稿されます。',
    'NumLockを2回押すと、画面が90年代風になります。',
    'InsertキーでOSが自動的に詩を生成します。',
    'Pauseキーで全ウィンドウが一時停止し、BGMが流れます。',
    'ScrollLockで画面がスクロールしながら色が変化します。'
]

FIXES = [
    'CapsLockが押された際、全ウィンドウが詩的に閉じる問題を解決。',
    'タスクバーが時々消える現象を修正。',
    'マウス右クリックでランダムな絵文字が出現する問題を修正。',
    'エクスプローラーで「パッチ」と入力すると再起動する現象を解消。',
    'ダークモードで画面が真っ暗になる問題を修正。',
    'USBメモリを抜くとOSが短歌を詠む問題を修正。',
    '時計が逆回転する現象を修正。',
    'ログイン時にOSが自己紹介を始める問題を修正。',
    'ファイル名に「謎」が含まれると消える現象を修正。',
    'タッチパッド操作で画面が反転する問題を修正。'
]

KNOWN_ISSUES = [
    'マウスホイール逆回転時に天気予報が流れる場合があります。',
    '一部環境でCtrl+Zが未来に移動することがあります。',
    'Alt+TabでOSが詩を朗読し続ける場合があります。',
    'CapsLock点灯時に画面がピンク色になることがあります。',
    'タスクマネージャー起動時にOSが居眠りする場合があります。',
    'NumLock解除時に全アプリが再起動することがあります。',
    'エクスプローラーで「未来」と検索すると時空が歪む場合があります。',
    'ログアウト時にOSが名言を残す場合があります。',
    'ウィンドウ移動時に背景がランダムに変化する場合があります。',
    'サウンド設定で鳥のさえずりが鳴ることがあります。'
]

HEADER = '[Patch Tuesday Alert]'


def generate_patch_note():
    version = random.choice(OS_VERSIONS)
    features = random.sample(NEW_FEATURES, k=random.randint(1, 2))
    fixes = random.sample(FIXES, k=random.randint(1, 2))
    issues = random.sample(KNOWN_ISSUES, k=random.randint(1, 2))
    lines = [HEADER, f'OSバージョン: {version}']
    for f in features:
        lines.append(f'- 新機能: {f}')
    for fix in fixes:
        lines.append(f'- 修正: {fix}')
    for issue in issues:
        lines.append(f'- 既知の問題: {issue}')
    return '\n'.join(lines)


def send_desktop_notification(title, message):
    if not PLYER_AVAILABLE:
        return False
    try:
        notification.notify(
            title=title,
            message=message,
            timeout=7
        )
        return True
    except Exception:
        return False


def print_terminal_alert(note):
    border = '=' * 60
    print(f'\n{border}')
    print(note)
    print(f'{border}\n')


def log_patch_note(note):
    try:
        with open('patch_tuesday_alert.log', 'a', encoding='utf-8') as f:
            f.write(f'[{datetime.now().isoformat()}]\n{note}\n\n')
    except Exception:
        pass


def list_logs():
    try:
        with open('patch_tuesday_alert.log', 'r', encoding='utf-8') as f:
            print(f.read())
    except FileNotFoundError:
        print('ログファイルが存在しません。')


def summary_logs():
    try:
        with open('patch_tuesday_alert.log', '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 main():
    parser = argparse.ArgumentParser(description='Random OS Fake Patch Tuesday Alert')
    subparsers = parser.add_subparsers(dest='command', help='サブコマンド')
    parser_log = subparsers.add_parser('log', help='パッチ通知を生成して表示')
    parser_list = subparsers.add_parser('list', help='通知履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='通知履歴の件数を表示')
    args = parser.parse_args()

    if args.command == 'log' or args.command is None:
        note = generate_patch_note()
        sent = False
        if PLYER_AVAILABLE and platform.system() in ('Windows', 'Darwin', 'Linux'):
            sent = send_desktop_notification('Patch Tuesday Alert', note.replace('\n', ' '))
        if not sent:
            print_terminal_alert(note)
        log_patch_note(note)
    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アップデート通知を模したジョーク演出で、作業の緊張感や単調さを一瞬で崩すことを狙っています。

# 公式ドキュメント抜粋
デスクトップ通知には [plyer.notification](https://plyer.readthedocs.io/en/latest/) を利用。ターミナルへの演出は標準出力で実装しています。

# 利用例
- 明示的に `/random-os-fake-patch-tuesday-alert` を呼び出して、会議やペアプロ時に場を和ませる
- 「パッチ」「アップデート」などのキーワードを含む作業ログやコマンド実行時に自動発動し、集中力をリセット

# 注意点
- 通知内容は完全に架空です。実際のセキュリティやOSアップデート情報とは関係ありません
- plyerが未導入の場合はターミナル演出のみとなります
- ログファイルは同ディレクトリに自動生成されます

# 設計方針
- ランダム生成の多様性を重視し、複数カテゴリ(新機能/修正/既知の問題)を組み合わせ
- 利用者の環境に応じてデスクトップ通知/ターミナル演出を自動選択
- シンプルなCLIサブコマンドで履歴や件数も確認可能

導入手順

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

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-patch-tuesday-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で謎の偽パッチ通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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