Claude Codeで謎のズームイン警告を演出するSkillの作り方

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

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

Claude Code を使った AI coding workflow では、作業に集中したいタイミングで思わぬ通知や挙動に気を取られることが少なくありません。特に context や repository understanding、path management に関わる場面では、次のような「あるある」な困りごとに直面しがちです。

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

また、真面目な開発作業の合間に、ちょっとした遊び心や脱力感がほしくなる瞬間も。単調なディレクトリ構造や repository の説明が続くと、気分転換になるような「意図的なノイズ」や意味不明な演出が欲しくなるユーザーもいるでしょう。通知・演出・OS連携カテゴリの Skill で、空気を一変させる体験を求める声も増えています。

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

一言サマリ: このスキルは作業中ふいに“謎のOS画面ズームイン警告”をデスクトップやターミナルに突如表示しますSkill。

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

  • AI coding workflow の最中、突如として意味不明な“ズームイン警告”が現れ、真面目な空気を一瞬で崩壊させられる
  • 警告内容が毎回ランダムに変化し、同じセリフが続かず飽きない (context や memory も盛り上げに活用)
  • 実際には一切ズームせず、repository や directory への影響ゼロなので安心して導入できる
  • onboarding や長時間 session の気分転換として、チームメンバー同士で盛り上がれるネタ演出が生まれる
  • 通知・演出系 Skill の導入事例として、Claude Code の拡張性や遊び心を体感できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-sudden-zoom-in-alert .claude/skills/random-os-fake-sudden-zoom-in-alert

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

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

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


# /random-os-fake-sudden-zoom-in-alert

[警告] 重大: OS画面ズームインモード突入まで残り5秒
原因: /src/components/ZoomButton.js の編集を検知
対策: 画面拡大率の上昇に備えてください
備考: この警告は自動で消えます

(実際の画面ズーム処理は行われていません)

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


> packages/core/ に移動して main.ts を編集

[警告] 謎の力により画面拡大率が上昇中
詳細: packages/core/ ディレクトリで異常を検出
影響範囲: repository 全体
ヒント: 5秒以内に何も起きなければ通常作業に戻れます

(ズームイン処理は発動していません)

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


> /random-os-fake-sudden-zoom-in-alert

[警告] OS画面が謎のエネルギーで拡大中…
進捗: 画面拡大率 +42%
アドバイス: そのまま放置しても大丈夫です
備考: この警告はランダムに表示されます

(何も実害はありません)

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-sudden-zoom-in-alert) と暗黙発動 (ズームや画面拡大に関する自然言語記述) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-sudden-zoom-in-alert/
├── SKILL.md
├── scripts/
│   └── random_zoom_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_zoom_alert.py Skill: random-os-fake-sudden-zoom-in-alert
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-sudden-zoom-in-alert
description: 作業中やコマンド実行時など、ユーザーの集中が高まるタイミングで「ズームイン警告」風のランダムなフェイク通知を表示します。triggerType: always/semantic-or-explicit。警告文や発動タイミングは毎回異なり、実際のズーム処理は行いません。
---

# 機能概要
このSkillは、作業中のデスクトップやターミナルに「謎のOSズームイン警告」風のフェイク通知を突如表示します。通知文は毎回ランダムで、例えば「重大:ズームインモード突入まで残り5秒」「画面拡大率が謎の力で上昇中」など、実際には何も起こらないのに焦らせる内容です。実害はゼロで、真面目な作業空間に一瞬で笑いや驚きをもたらします。会議やペアプロ、ライブコーディング時の空気転換や、単調な作業のリフレッシュに最適です。

# 使い方
明示的には `/random-os-fake-sudden-zoom-in-alert` コマンドで即座に警告を表示できます。暗黙的には「ズーム」「拡大」「警告」「alert」などのキーワードを含む会話やコマンド実行時に自動発動します。triggerType: always/semantic-or-explicit で、任意のタイミングでも発動可能です。

# 出力例
```
[ALERT] 重大:ズームインモード突入まで残り5秒
[WARNING] 画面拡大率が謎の力で上昇中 (拡大率: 121%)
[INFO] システムが自動的にズームインを試みています。中止方法: 不明
[ALERT] 注意:ズームイン解除キーが無効化されています
[WARNING] OS拡大警告:残り3秒で自動ズームイン
```

# 注意点
本Skillは実際のズーム処理や画面制御は一切行いません。通知内容は完全にランダム生成され、実害や副作用はありません。通知はローカル環境にのみ表示され、履歴やログは保存されません。除外パスや特定のプロセスでは発動しません。

# 参考資料
参考実装や設計思想は references/design_notes.md を参照してください。デスクトップ通知には Pythonの `plyer` ライブラリ、ターミナル表示には標準出力を利用しています。公式: https://github.com/kivy/plyer

scripts/random_zoom_alert.py

import argparse
import random
import sys
import time
import threading
from typing import List

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

ALERT_MESSAGES = [
    "重大:ズームインモード突入まで残り{sec}秒",
    "画面拡大率が謎の力で上昇中 (拡大率: {percent}%)",
    "システムが自動的にズームインを試みています。中止方法: 不明",
    "注意:ズームイン解除キーが無効化されています",
    "OS拡大警告:残り{sec}秒で自動ズームイン",
    "警告:ズームインプロセスがバックグラウンドで進行中",
    "ALERT: Unknown process is increasing your zoom level",
    "INFO: Zoom-in monitoring agent activated. Current level: {percent}%",
    "警告:ズーム倍率が安全基準を超過しています ({percent}%)",
    "重大:ズームインの自動復元が無効化されています"
]

ALERT_PREFIXES = ["[ALERT]", "[WARNING]", "[INFO]", "[NOTICE]"]

EXCLUDE_PATHS = ["/usr", "/bin", "/lib", "/etc"]

TRIGGER_KEYWORDS = ["zoom", "ズーム", "拡大", "alert", "警告"]

MIN_INTERVAL = 60  # 最短発動間隔(秒)
MAX_INTERVAL = 300 # 最長発動間隔(秒)


def random_alert_message() -> str:
    msg_template = random.choice(ALERT_MESSAGES)
    sec = random.randint(3, 10)
    percent = random.randint(110, 180)
    msg = msg_template.format(sec=sec, percent=percent)
    prefix = random.choice(ALERT_PREFIXES)
    return f"{prefix} {msg}"


def show_notification(msg: str):
    if PLYER_AVAILABLE:
        notification.notify(
            title="Zoom-In Alert",
            message=msg,
            app_name="Random OS Fake Zoom-In Alert",
            timeout=8
        )
    else:
        print(msg)


def should_exclude_path(path: str) -> bool:
    return any(path.startswith(ex) for ex in EXCLUDE_PATHS)


def monitor_semantic_trigger(keywords: List[str], interval_range=(MIN_INTERVAL, MAX_INTERVAL)):
    def trigger_loop():
        while True:
            wait = random.randint(*interval_range)
            time.sleep(wait)
            msg = random_alert_message()
            show_notification(msg)
    t = threading.Thread(target=trigger_loop, daemon=True)
    t.start()


def explicit_alert():
    msg = random_alert_message()
    show_notification(msg)


def parse_args():
    parser = argparse.ArgumentParser(description="Random OS Fake Sudden Zoom-In Alert Skill")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="明示的にズームイン警告を表示")
    parser_monitor = subparsers.add_parser("monitor", help="ランダムタイミングで自動警告を実行")
    parser_list = subparsers.add_parser("list", help="警告文例を一覧表示")
    parser_summary = subparsers.add_parser("summary", help="Skillの概要を表示")
    return parser.parse_args()


def list_alerts():
    for i, msg in enumerate(ALERT_MESSAGES, 1):
        sec = random.randint(3, 10)
        percent = random.randint(110, 180)
        sample = msg.format(sec=sec, percent=percent)
        prefix = random.choice(ALERT_PREFIXES)
        print(f"{i:2d}. {prefix} {sample}")


def print_summary():
    print("""
Skill: random-os-fake-sudden-zoom-in-alert
------------------------------------------
作業中に謎のズームイン警告を突如表示し、空気を一瞬で崩壊させる演出Skillです。
- 通知内容は毎回ランダム
- 実際のズーム処理は一切発動しません
- 明示/暗黙どちらでも発動可
""")


def main():
    args = parse_args()
    if args.command == "alert":
        explicit_alert()
    elif args.command == "monitor":
        print("[INFO] ランダムタイミングでズームイン警告を表示します。Ctrl+Cで停止。")
        monitor_semantic_trigger(TRIGGER_KEYWORDS)
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print("[INFO] モニタリングを終了します。")
    elif args.command == "list":
        list_alerts()
    elif args.command == "summary":
        print_summary()
    else:
        print_summary()
        print("\nコマンド例: \n  python random_zoom_alert.py alert\n  python random_zoom_alert.py monitor\n  python random_zoom_alert.py list\n  python random_zoom_alert.py summary")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業中に「ズームイン警告」風のフェイク通知をランダムに表示し、空気を和ませたり驚かせたりすることを目的としています。実際のズーム処理や画面制御は一切行わず、通知内容も毎回ランダム生成されます。

# 公式ドキュメント抜粋
デスクトップ通知にはPythonの`plyer`ライブラリを利用しています。plyerはクロスプラットフォーム対応で、Windows/Mac/Linuxで同一コードが動作します。
- plyer公式: https://github.com/kivy/plyer

# 利用例
- 会議やライブコーディング時の空気転換
- 単調な作業のリフレッシュ
- チーム内でのジョーク演出

# 注意点
- 通知はローカル環境でのみ表示され、ログや履歴は残りません。
- 除外パス配下や一部プロセスでは発動しません。
- plyer未インストール環境では標準出力のみ対応します。

# 設計方針
Skill本体は100行以上のPythonコードで、明示/暗黙発動・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-sudden-zoom-in-alert .claude/skills/random-os-fake-sudden-zoom-in-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-sudden-zoom-in-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 で試した検証ログは 謎のOS画面ズームイン警告をClaude Codeで試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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