Claude Codeでランダム演出を活用して集中力を高めるSkill構築ガイド

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

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

Claude Code を使っていると、集中したいタイミングや大事な作業フローの最中に「何か気分転換したい」「ちょっとした刺激が欲しい」と感じることが意外と多いものです。特に長時間のコーディングや monorepo の複雑なパス管理に没頭していると、気付けば context や repository 構造の把握に追われ、息抜きのきっかけもなくなりがちです。
AI coding workflow の中で、通知や演出が単調だと、どうしても「作業空間が無機質」「リフレッシュするタイミングを逃す」「メモリや context の切り替えが単調」などの課題が浮かびます。

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

また、通知・演出・OS連携系のSkillが少ないため、作業中の気分転換やユーモラスな演出を求めても、なかなか満足できないという声もあります。

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

一言サマリ: このスキルは、突如現れる“謎のOSボスキャラ”によるランダム通知演出を導入し、Claude Code の作業空間に意外性とリフレッシュ体験をもたらします。

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

  • 長時間のAI coding workflowや repository understanding の合間に、突発的な演出で集中力をリセットできる
  • monorepo や複雑な directory 構造で没頭しすぎた時に、context 切り替えのきっかけが生まれる
  • ストレッチや小休止のタイミングを、謎のボスキャラが独特なセリフで“強制”通知してくれる
  • 通知内容・ボスキャラが毎回ランダム生成されるため、作業空間に飽きが来ない
  • OS連携による画面端やデスクトップへの意外なポップアップで、単調な通知体験から脱却できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-mystery-boss-pop .claude/skills/random-os-mystery-boss-pop

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

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

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


# /random-os-mystery-boss-pop

=== [OS BOSS ENCOUNTERED!] ===
謎のOSボス「メモリ喰いゴーレム」が画面端に現れた!

【緊急任務】:
「今すぐ 'src/context_manager.py' のコメントを全消去せよ!
  さもなくば、repository の記憶が消えるぞ…」

(※この通知は5秒後に自動で消えます)

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


> /random-os-mystery-boss-pop

=== [OS BOSS APPEARS!] ===
「バグ・クラウド将軍」が packages/api/ 配下から乱入!

【命令】:
「本日は 'packages/ui/components/Button.tsx' で
  魔王のバグが発生中。今すぐデバッグせよ!」

(デスクトップ右下に通知バナー表示)

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


> /random-os-mystery-boss-pop

=== [OS BOSS INVASION!] ===
新手の「残業魔王・ダーク残タロウ」がデスクトップに出現!

【警告】:
「お主、今夜は context が長すぎるぞ。
  ストレッチせよ。さもなくば、memory が暴走する!」

(画面中央に一瞬だけカオスなポップアップ)

before / after の違い

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

発動方式

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

Skill の中身を全部見せる

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

.claude/skills/random-os-mystery-boss-pop/
├── SKILL.md
├── scripts/
│   └── random_os_mystery_boss_pop.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_mystery_boss_pop.py random-os-mystery-boss-pop: 謎のOSボスがランダムに出現し、命令や警告を通知します。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-mystery-boss-pop
description: 作業中の集中やリマインダー、息抜きが必要なタイミング(例: 長時間作業・休憩忘れ・集中力低下など)に、ランダム生成の“謎OSボスキャラ”が画面端やデスクトップに突如現れ、ユニークな命令や警告を通知します。発動キーワード: ボス, 急襲, 休憩, ストレッチ, 魔王, 集中, OS演出。
---

# 機能概要
このSkillは、作業中のあなたのデスクトップや画面端に“謎のOSボスキャラ”が突如出現し、カオスな命令や警告をランダムに発します。ボスキャラのビジュアルやセリフは毎回ランダム生成され、例えば「緊急任務:今すぐストレッチせよ」や「本日は残業魔王が降臨中」など、妙に的外れな演出で集中力を試します。作業の合間に意外性と遊び心をもたらし、リフレッシュや注意喚起に役立ちます。

# 使い方
明示的な呼び出しは `/random-os-mystery-boss-pop` コマンドで実行します。また、「ボス」「魔王」「ストレッチ」「集中」などのキーワードを含むプロンプトや作業ログからも自動発動します。通知はOSのネイティブ通知機能を使い、画面端やデスクトップにポップアップ表示されます。

# 出力例
```
[通知] 謎のOSボス「メモリ喰らい魔王」が出現!
命令: 今すぐ椅子から立ち上がり、3回回転せよ!
---
[通知] ボス「ディスク断捨離伯爵」からの警告:
「ファイル整理を怠る者に明日はない!」
---
[通知] 新たな刺客「プロセス暴走忍者」参上!
任務: 10秒間、目を閉じて深呼吸!
```

# 注意点
- 本Skillは通知のみを行い、ファイルやシステム設定には一切変更を加えません。
- ローカル環境の通知API(Windows: Toast, macOS: AppleScript, Linux: notify-send)を利用します。
- 画像や音声演出は含みません(テキスト通知のみ)。
- 業務用端末や集中必須の場面ではご注意ください。

# 参考資料
- references/design_notes.md に設計方針・通知APIの解説を記載
- 公式: [Windows Toast Notification](https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast)
- 公式: [AppleScript display notification](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_display.html)
- 公式: [notify-send (Linux)](https://man7.org/linux/man-pages/man1/notify-send.1.html)

scripts/random_os_mystery_boss_pop.py

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

BOSS_NAMES = [
    "メモリ喰らい魔王",
    "ディスク断捨離伯爵",
    "プロセス暴走忍者",
    "残業タイムリーパー",
    "バグ召喚師",
    "CPU炎上王",
    "ネットワーク監視鬼",
    "アップデート妖精",
    "マウス封印将軍",
    "スクリーンセーバー幻術師"
]

BOSS_COMMANDS = [
    "今すぐ椅子から立ち上がり、3回回転せよ!",
    "ファイル整理を怠る者に明日はない!",
    "10秒間、目を閉じて深呼吸!",
    "本日は残業魔王が降臨中。覚悟せよ!",
    "ストレッチしない者はバグに呪われる!",
    "コーヒーを淹れてリセットせよ!",
    "目を画面から離して遠くを見よ!",
    "1分間、何もせず静止せよ!",
    "机の上を片付けよ!",
    "OSの再起動は不要だ、今は耐えよ!"
]

BOSS_TITLES = [
    "謎のOSボス",
    "ボス",
    "新たな刺客",
    "警告",
    "任務",
    "緊急指令",
    "挑戦状",
    "乱入者"
]

HISTORY_FILE = os.path.expanduser("~/.random_os_mystery_boss_pop.log")


def select_boss():
    name = random.choice(BOSS_NAMES)
    command = random.choice(BOSS_COMMANDS)
    title = random.choice(BOSS_TITLES)
    return title, name, command


def notify(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":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(title, message, duration=8)
            except ImportError:
                # Fallback: powershell
                ps_cmd = f'[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null;'
                ps_cmd += f'$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02);'
                ps_cmd += f'$template.GetElementsByTagName("text")[0].AppendChild($template.CreateTextNode("{title}")) > $null;'
                ps_cmd += f'$template.GetElementsByTagName("text")[1].AppendChild($template.CreateTextNode("{message}")) > $null;'
                ps_cmd += f'$toast = [Windows.UI.Notifications.ToastNotification]::new($template);'
                ps_cmd += f'$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("random-os-mystery-boss-pop");'
                ps_cmd += f'$notifier.Show($toast)'
                subprocess.run(["powershell", "-Command", ps_cmd], check=True)
        else:
            print(f"[通知] {title}: {message}")
    except Exception as e:
        print(f"通知エラー: {e}")
        print(f"[通知] {title}: {message}")


def log_history(title, name, command):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    line = f"[{now}] {title}『{name}』: {command}\n"
    with open(HISTORY_FILE, "a", encoding="utf-8") as f:
        f.write(line)


def show_boss():
    title, name, command = select_boss()
    msg = f"{name}が出現!\n{command}"
    notify(title, msg)
    log_history(title, name, command)
    print(f"[通知] {title}「{name}」\n命令: {command}")


def list_history(limit=10):
    if not os.path.exists(HISTORY_FILE):
        print("履歴がありません。")
        return
    with open(HISTORY_FILE, "r", encoding="utf-8") as f:
        lines = f.readlines()[-limit:]
        print("--- 最近のボス履歴 ---")
        for line in lines:
            print(line.strip())


def summary():
    if not os.path.exists(HISTORY_FILE):
        print("履歴がありません。")
        return
    bosses = {}
    with open(HISTORY_FILE, "r", encoding="utf-8") as f:
        for line in f:
            for name in BOSS_NAMES:
                if name in line:
                    bosses[name] = bosses.get(name, 0) + 1
    print("--- ボス出現回数 ---")
    for name, count in sorted(bosses.items(), key=lambda x: -x[1]):
        print(f"{name}: {count}回")


def parse_args():
    parser = argparse.ArgumentParser(description="random-os-mystery-boss-pop: 謎のOSボスがランダムに出現し、命令や警告を通知します。")
    subparsers = parser.add_subparsers(dest="command")

    subparsers.add_parser("pop", help="ボスを1体ランダム出現させる")
    subparsers.add_parser("list", help="直近のボス履歴を表示")
    subparsers.add_parser("summary", help="ボス出現回数のサマリーを表示")

    parser.add_argument("--repeat", type=int, default=1, help="連続でボスを出現させる回数")
    parser.add_argument("--interval", type=int, default=0, help="複数回出現時の間隔(秒)")
    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == "pop" or args.command is None:
        for i in range(args.repeat):
            show_boss()
            if args.repeat > 1 and i < args.repeat - 1:
                time.sleep(args.interval)
    elif args.command == "list":
        list_history()
    elif args.command == "summary":
        summary()
    else:
        print("コマンドが不正です。--help を参照してください。")

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、OSの標準通知APIを活用し、作業中に意外性のある演出を提供します。実際のシステムやファイルには一切影響を与えず、通知のみを行う設計です。

# 公式ドキュメント抜粋
- Windows: Toast Notification ([公式](https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast))
- macOS: AppleScript display notification ([公式](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_display.html))
- Linux: notify-send ([manページ](https://man7.org/linux/man-pages/man1/notify-send.1.html))

# 利用例
- 長時間作業時の休憩リマインダー
- 雑談イベントや社内ハッカソンの演出
- 集中力が切れたタイミングでの気分転換

# 注意点
- 業務端末や会議中の利用は控えてください。
- 通知が届かない場合は、OSの通知設定を確認してください。

# 設計方針
- 毎回ランダムなボス・セリフを生成し、履歴も記録
- OS種別ごとに最適な通知APIを選択
- コマンドラインから明示的にも、キーワード検知による自動発動にも対応

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-mystery-boss-pop .claude/skills/random-os-mystery-boss-pop

.claude/skills/random-os-mystery-boss-pop の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/random-os-mystery-boss-pop
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/random-os-mystery-boss-pop で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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をコピーしました!
目次