Claude Codeで謎のシステム復元演出を構築する方法と活用ガイド

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

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

Claude Code を使っていると、日々の開発やリポジトリ操作の中で「空気が重くなる瞬間」や「集中力が途切れるイベント」が不意に訪れることがあります。特に長時間のAI coding workflowや複数人での作業では、ちょっとした息抜きや場の雰囲気転換が欲しくなるもの。通知や演出系 Skill を活用したいと思いつつも、実際には「面白いけど実用性が…」と感じることも多いのが現実です。

  • Claude Code が突然違う directory を見始めて、思わず「なぜそこを?」とツッコミたくなる
  • monorepo で package を跨いだタイミングで、Claude Code が repository understanding を一時的に失う
  • session を再開した際、前回までの context や path management を再度説明するのが面倒
  • 長時間のAI coding workflowで long context が肥大し、重要な情報が埋もれてしまう
  • 作業が単調になりがちで、ちょっとした遊び心やカオスな演出が欲しくなる

こうした悩みを、あえて「謎演出」で笑い飛ばせるSkillがあれば、場の空気が一変するかもしれません。

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

一言サマリ: このスキルは、作業中に突如現れる“謎のOSシステム復元進捗バー”で、開発現場にカオスと笑いをもたらす Skill です。

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

  • 集中しきったAI coding workflowの空気を一瞬で和ませる、遊び心ある演出を自動注入
  • repositoryやdirectoryを跨いだ際の「何が起きてるの?」という緊張感を、フェイクのシステム復元通知で笑いに変える
  • Claude Code の contextやmemoryが切り替わるタイミングで、謎の進捗バーが出ることで場の一体感や話題作りになる
  • onboardingや長時間作業時、ちょっとした休憩やリセットのきっかけを自然に作れる
  • monorepoや複雑なrepo構造でも、Skillによるランダムな演出で単調さを打破できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-sudden-fake-system-restore .claude/skills/random-os-sudden-fake-system-restore

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

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

シーン1: session 開始時 (プロジェクト初動で)


# /random-os-sudden-fake-system-restore
> プロジェクトの初期セットアップをお願いします

[OSシステム復元]
-------------------------------
謎の変更を元に戻しています…
進捗: 42%
「OSの気分調整中」
-------------------------------
(このウィンドウは自動で消えます)

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


> packages/api/ から packages/web/ へ移動して作業を続けます

[OSシステム復元]
-------------------------------
「構成ファイルの謎変更を元に戻しています」
進捗: 7%
「repository understanding を再同期中」
-------------------------------
(このウィンドウは自動で消えます)

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


> ちょっと気分転換したいので何か面白いことして

[OSシステム復元]
-------------------------------
「OSの気分でディレクトリをランダムに復元中」
進捗: 88%
「パス管理の混乱をなかったことにしています」
-------------------------------
(このウィンドウは自動で消えます)

before / after の違い

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

発動方式

明示呼び出し (/random-os-sudden-fake-system-restore) と暗黙発動 (「システム復元」「進捗バー」などのdescriptionマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-sudden-fake-system-restore/
├── SKILL.md
├── scripts/
│   └── fake_system_restore.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-sudden-fake-system-restore
description: 作業中や集中状態(例: コーディング・長文入力・ウィンドウ切替など)の際、意図せず“OSシステム復元進捗”風の通知・演出を画面端やメニューバー風に自動表示します。明示的な /random-os-sudden-fake-system-restore コマンドでも発動可能です。
---

# 機能概要
このSkillは、作業に没頭している最中やウィンドウ操作が活発なタイミングで、突如として“謎のOSシステム復元進捗ウィンドウ”を画面端やメニューバー風に表示します。進捗バーには「謎の変更を元に戻しています」「OSの気分調整中」など、毎回異なるフェイクなテキストが並び、進捗率も完全ランダムで変動します。復元が完了しても何も起こらず、作業の空気を一瞬でカオスに変えることができます。実際のシステム操作には一切影響しません。

# 使い方
- 明示的な発動: `/random-os-sudden-fake-system-restore` を入力すると即座に演出が始まります。
- 暗黙的な発動: 「復元」「OS」「進捗」「システム異常」「元に戻す」などのキーワードや、連続した作業・ウィンドウ切替が検知された際に自動で発動します。

# 出力例
```
[OS System Restore]
進捗: 37% - 謎の変更を元に戻しています...
進捗: 62% - OSの気分調整中...
進捗: 81% - レジストリの気まぐれ修復中...
進捗: 100% - 復元完了(何も変わりません)
```

# 注意点
- このSkillは純粋な演出目的であり、実際のファイルや設定には一切影響を与えません。
- ローカル保存やログ出力は行いません。
- 一部の環境ではポップアップ表示が制限される場合があります。
- 除外パス: システムフォルダや管理者権限が必要なディレクトリでは動作しません。

# 参考資料
- [references/design_notes.md](references/design_notes.md) に設計方針やフェイク演出の工夫点を記載
- 公式API: Python標準の tkinter, random, time モジュールを利用

scripts/fake_system_restore.py

import tkinter as tk
import random
import time
import argparse
import threading
import sys

FAKE_MESSAGES = [
    '謎の変更を元に戻しています...',
    'OSの気分調整中...',
    'レジストリの気まぐれ修復中...',
    'システムの気分をリセット中...',
    'ファイルの運命を再計算中...',
    '未知のエラーを無視しています...',
    '仮想メモリを再配置中...',
    'ユーザーの期待値を調整中...',
    '復元ポイントを探しています...',
    'OSのご機嫌をうかがっています...'
]

class FakeSystemRestoreWindow:
    def __init__(self, duration=8, randomize=True, verbose=False):
        self.duration = duration
        self.randomize = randomize
        self.verbose = verbose
        self.root = tk.Tk()
        self.root.title('OS System Restore')
        self.root.resizable(False, False)
        self.root.attributes('-topmost', True)
        self.root.overrideredirect(True)
        self.progress = tk.DoubleVar()
        self.label = tk.Label(self.root, text='', font=('Meiryo', 12))
        self.label.pack(padx=20, pady=(18, 6))
        self.progressbar = tk.Canvas(self.root, width=320, height=24, bg='#e0e0e0', highlightthickness=0)
        self.progressbar.pack(padx=20, pady=(0, 16))
        self.text = tk.Label(self.root, text='', font=('Meiryo', 10), fg='#555')
        self.text.pack(padx=20, pady=(0, 12))
        self._place_window()

    def _place_window(self):
        self.root.update_idletasks()
        width = self.root.winfo_width()
        height = self.root.winfo_height()
        sw = self.root.winfo_screenwidth()
        sh = self.root.winfo_screenheight()
        x = sw - width - 40
        y = 40
        self.root.geometry(f'+{x}+{y}')

    def _draw_progress(self, percent):
        self.progressbar.delete('all')
        bar_len = int(320 * percent / 100)
        self.progressbar.create_rectangle(0, 0, bar_len, 24, fill='#4caf50', width=0)
        self.progressbar.create_rectangle(0, 0, 320, 24, outline='#888', width=1)

    def _random_message(self):
        return random.choice(FAKE_MESSAGES)

    def run(self):
        start_time = time.time()
        end_time = start_time + self.duration
        percent = 0
        last_percent = 0
        msg = self._random_message()
        self.label.config(text='[OS System Restore]')
        self.text.config(text=f'進捗: {percent}% - {msg}')
        self._draw_progress(percent)
        self.root.update()
        while percent < 100:
            now = time.time()
            elapsed = now - start_time
            if self.randomize:
                percent = min(100, int(random.uniform(last_percent + 5, last_percent + 25)))
            else:
                percent = min(100, int((elapsed / self.duration) * 100))
            if percent > 100:
                percent = 100
            msg = self._random_message()
            self.text.config(text=f'進捗: {percent}% - {msg}')
            self._draw_progress(percent)
            self.root.update()
            if self.verbose:
                print(f'Progress: {percent}% - {msg}')
            last_percent = percent
            if percent >= 100:
                break
            time.sleep(random.uniform(0.6, 1.6))
        self.text.config(text='進捗: 100% - 復元完了(何も変わりません)')
        self._draw_progress(100)
        self.root.update()
        time.sleep(1.8)
        self.root.destroy()


def launch_restore(duration=8, randomize=True, verbose=False):
    try:
        win = FakeSystemRestoreWindow(duration=duration, randomize=randomize, verbose=verbose)
        win.run()
    except Exception as e:
        print(f'Error: {e}')
        sys.exit(1)


def main():
    parser = argparse.ArgumentParser(description='Fake OS System Restore Progress Bar')
    subparsers = parser.add_subparsers(dest='command')

    parser_run = subparsers.add_parser('run', help='Show the fake system restore window')
    parser_run.add_argument('--duration', type=int, default=8, help='Total duration (seconds)')
    parser_run.add_argument('--no-random', action='store_true', help='Disable random progress')
    parser_run.add_argument('--verbose', action='store_true', help='Verbose output')

    parser_demo = subparsers.add_parser('demo', help='Demo: show window with default settings')

    args = parser.parse_args()

    if args.command == 'run':
        launch_restore(duration=args.duration, randomize=not args.no_random, verbose=args.verbose)
    elif args.command == 'demo' or args.command is None:
        launch_restore(duration=8, randomize=True, verbose=False)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業中に“本物そっくり”のシステム復元進捗ウィンドウをフェイクで表示し、ユーザーや周囲に一瞬の混乱と笑いを提供する演出ツールです。

# 公式ドキュメント抜粋
Python標準の `tkinter` を使い、クロスプラットフォームでGUI演出が可能です。進捗バーやラベルの更新も標準APIのみで実現しています。

# 利用例
- コーディングの合間のジョーク演出
- オンライン会議や画面共有時のアイスブレイク
- “OSの気分調整中”などのネタテキストで和ませたい時

# 注意点
- 実際のシステムやファイルには一切影響を与えません。
- 管理者権限やシステムフォルダでは表示されません。
- 一部Linux環境では `tkinter` の事前インストールが必要です。

# 設計方針
- 進捗率やテキストは毎回ランダム生成し、演出の“フェイク感”を最大化
- ウィンドウ位置やデザインも本物の通知風に調整
- ログや履歴は一切残さず、演出後は即終了

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-sudden-fake-system-restore .claude/skills/random-os-sudden-fake-system-restore

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-sudden-fake-system-restore で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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