Claude Codeで謎めいた進捗バー演出を実現するSkillの作り方

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

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

Claude Code を使っていると、集中したいタイミングや長時間作業でふと気が抜ける瞬間が意外と多いものです。特に「通知・演出・OS連携」系の演出がないため、淡々とした画面に没入しすぎてリズムを崩したり、逆に単調さで集中が途切れることもあります。普段の AI coding workflow の中で、ちょっとした「違和感」や「謎のイベント」が欲しくなることはありませんか?

  • 長時間同じ repository で作業していると、画面や context の単調さで集中力が切れる
  • Claude Code の session を再開した時、前回の流れを思い出すまでに時間がかかる
  • monorepo で package を跨いだ作業中、気分転換や意図しない interruption が欲しくなる
  • directory や path 管理に没頭しすぎて、現実感が薄れる瞬間がある
  • AI coding workflow に「理不尽な演出」や「謎イベント」が欲しいが、既存の Skill では実現できない

このような悩みは、Claude Code の repository understanding や context 管理が進化しても意外と解消されません。むしろ、長時間の集中やパス管理の単調さが逆にストレスになることも。そんな時、現実離れした「謎のOSアップデート進捗バー」が突然現れると、思わず笑ってしまうかもしれません。

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

一言サマリ: このスキルは、作業中に突如現れる謎のOSアップデート進捗バーで、単調なAI coding workflowに理不尽な”違和感”と遊び心を注入します。

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

  • 長時間の repository 作業や directory 移動の合間に、謎の進捗バーが現れて集中のリズムをリセットできる
  • monorepo や複雑な path management に没頭しすぎた時、現実感を取り戻すきっかけになる
  • AI coding workflow に「未知の言語パーサ更新中」「伝説のバグを発掘中」など毎回違う謎演出が加わる
  • session の再開や onboarding の合間に、何もしていないのに”何か起きている”感を演出できる
  • Skill の発動タイミングがランダムなので、飽きずに使い続けられる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-fake-mystery-update-progress .claude/skills/os-fake-mystery-update-progress

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /os-fake-mystery-update-progress

[謎のOSアップデート進行中...]
[===================-----]  78%
> 未知の言語パーサを最適化しています...
> 進捗: 78% (残り時間: 3分未満)
[ヒント]: このアップデートは完了しないかもしれません

(進捗バーが突然現れ、しばらく進行した後、何事もなかったかのように消えます)

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


> packages/core/ に移動

[OSアップデート: 伝説のバグを発掘中...]
[=======---------]  43%
> secrets/api_secret.key を解析しています...
> 進捗: 43% (残り時間: 不明)
[注意]: 進捗バーが時々逆流します

(進捗バーが一時的に減少し、また増加したりする)

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


> 今日は何か面白いこと起こらない?

[謎のアップデート: 秘密のAPIを最適化中...]
[============------]  65%
> /usr/local/bin/unknown が書き換えられています...
> 進捗: 65% (残り時間: 42秒)
[進捗バー停止中...しばらくお待ちください]

(進捗バーが止まったまま、何も起きずに数秒後消える)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し 謎の進捗バーで強制的に気分転換、context 切り替えのきっかけになる
monorepo 移動 違う package のコードを参照しがち 突然の演出で directory 境界を意識、集中力リセット
長時間 workflow long context で重要箇所が薄まる 理不尽な interruption で stale context をリフレッシュ

発動方式

明示呼び出し (/os-fake-mystery-update-progress) と暗黙発動 (「アップデート」「進捗バー」などのワードにマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-fake-mystery-update-progress/
├── SKILL.md
├── scripts/
│   └── os_fake_mystery_update_progress.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-mystery-update-progress
description: 作業やコマンド実行時、または『アップデート』『進捗』『インストール』『謎』『バグ』『最適化』などの語が会話やコードに現れた際に、理不尽な“謎のOSアップデート進行中”進捗バーを表示します。明示的な /os-fake-mystery-update-progress 呼び出しにも対応。
---

# 機能概要
このSkillは、作業中やコマンド実行時に、まるで本物のOSアップデートが始まったかのような“謎の進捗バー”をターミナルやデスクトップに突然表示します。進捗内容は毎回「未知の言語パーサ更新中」「秘密のAPIを最適化中」「伝説のバグを発掘中」など完全に謎で、進捗バーは気まぐれに逆流したり止まったりします。現実には何も更新されませんが、理不尽な演出で集中力をじわじわ侵食します。

# 使い方
- 明示的呼び出し: `/os-fake-mystery-update-progress` コマンドを実行
- 暗黙発動: 「アップデート」「進捗」「インストール」「バグ」「最適化」「謎」などの単語を含む会話やコード断片が出現した時、自動的に進捗バーが表示されます。

# 出力例
```
[=====         ] 34%  未知の言語パーサ更新中...
[======        ] 42%  秘密のAPIを最適化中...
[=====         ] 37%  伝説のバグを発掘中...
[======        ] 45%  システムの謎領域を再構築中...
[=====         ] 39%  不明なモジュールを初期化中...
```

# 注意点
- 本Skillは実際のOSやファイルには一切影響しません。
- 進捗バーは擬似的な演出のみで、実際のアップデートやインストールは行われません。
- ローカルに進捗状態や履歴は保存されません。
- 一部のターミナル環境では表示が崩れる場合があります。

# 参考資料
- [Python公式ドキュメント](https://docs.python.org/3/library/random.html)
- references/design_notes.md 参照(設計方針・演出例など)

scripts/os_fake_mystery_update_progress.py

import sys
import time
import random
import argparse

MYSTERY_MESSAGES = [
    '未知の言語パーサ更新中',
    '秘密のAPIを最適化中',
    '伝説のバグを発掘中',
    'システムの謎領域を再構築中',
    '不明なモジュールを初期化中',
    '暗号化された設定ファイルを解析中',
    '古代コードの解読を試行中',
    '未公開プロトコルを同期中',
    '仮想メモリの幽霊を追跡中',
    '未知のデバイスドライバを検証中',
    '隠し機能を有効化中',
    'ブラックボックスAPIを逆アセンブル中',
    '未知のバージョンを検出中',
    '幻のパッチを適用中',
    '謎のエラーを再現中',
    '不明な依存関係を解決中',
    'シークレットモードを起動中',
    '未定義動作を観測中',
    '隠されたログを抽出中',
    '謎のプロセスを監視中'
]

BAR_LENGTH = 20

class ProgressBar:
    def __init__(self, length=BAR_LENGTH):
        self.length = length
        self.progress = 0
        self.direction = 1  # 1: forward, -1: backward
        self.message = random.choice(MYSTERY_MESSAGES)
        self.last_update = time.time()
        self.stopped = False

    def update(self):
        if self.stopped:
            return
        # 進捗の進み/逆流/停止のギミック
        event = random.choices(
            ['forward', 'backward', 'stop'],
            [0.7, 0.2, 0.1]
        )[0]
        if event == 'forward':
            self.direction = 1
            delta = random.randint(1, 5)
        elif event == 'backward':
            self.direction = -1
            delta = random.randint(1, 7)
        else:  # stop
            self.stopped = True
            return
        self.progress += self.direction * delta
        if self.progress < 0:
            self.progress = 0
        if self.progress > 100:
            self.progress = 100
        # たまにメッセージを変更
        if random.random() < 0.2:
            self.message = random.choice(MYSTERY_MESSAGES)

    def render(self):
        filled = int(self.progress / 100 * self.length)
        bar = '[' + '=' * filled + ' ' * (self.length - filled) + ']'
        return f'{bar} {self.progress:3d}%  {self.message}...'

    def is_complete(self):
        return self.progress >= 100

    def maybe_resume(self):
        # 停止状態からランダムで再開
        if self.stopped and random.random() < 0.4:
            self.stopped = False


def run_progress_bar(duration=20, min_interval=0.3, max_interval=1.2):
    pb = ProgressBar()
    start_time = time.time()
    sys.stdout.write('\n')
    while not pb.is_complete() and (time.time() - start_time) < duration:
        pb.maybe_resume()
        if not pb.stopped:
            pb.update()
        sys.stdout.write(f'\r{pb.render()}')
        sys.stdout.flush()
        sleep_time = random.uniform(min_interval, max_interval)
        time.sleep(sleep_time)
    # 完了演出
    pb.progress = 100
    sys.stdout.write(f'\r{pb.render()}\n')
    sys.stdout.flush()
    time.sleep(1)
    sys.stdout.write('謎のアップデートが完了しました。\n')


def list_messages():
    print('--- 謎の進捗メッセージ一覧 ---')
    for msg in MYSTERY_MESSAGES:
        print(f'- {msg}')


def summary():
    print('このSkillは、理不尽な謎のアップデート進捗バーを演出します。')
    print(f'メッセージパターン数: {len(MYSTERY_MESSAGES)}')
    print(f'進捗バー長さ: {BAR_LENGTH}')
    print('進捗は途中で止まったり逆流したりします。')


def main():
    parser = argparse.ArgumentParser(description='謎のOSアップデート進捗バー')
    subparsers = parser.add_subparsers(dest='command')

    parser_run = subparsers.add_parser('run', help='進捗バーを表示')
    parser_run.add_argument('--duration', type=int, default=20, help='進捗バーの最大表示秒数 (デフォルト20)')

    parser_list = subparsers.add_parser('list', help='進捗メッセージ一覧を表示')
    parser_summary = subparsers.add_parser('summary', help='Skill概要を表示')

    args = parser.parse_args()
    if args.command == 'run' or args.command is None:
        try:
            run_progress_bar(duration=getattr(args, 'duration', 20))
        except KeyboardInterrupt:
            sys.stdout.write('\n進捗バーを中断しました。\n')
    elif args.command == 'list':
        list_messages()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、実際の処理やアップデートを一切行わず、純粋に理不尽な“謎の進捗バー”演出だけを目的としています。進捗バーの動きや文言は完全にランダムで、ユーザーの集中力や現実感を攪乱することを狙っています。

# 公式ドキュメント抜粋
- Python randomモジュール: https://docs.python.org/3/library/random.html
- argparse: https://docs.python.org/3/library/argparse.html

# 利用例
- チーム内のジョークや、作業の合間の気分転換に。
- コマンドラインや自動化スクリプトの“おふざけ”要素として。

# 注意点
- 本Skillは完全な演出専用であり、実際のOSやファイルには一切影響しません。
- 進捗バーの履歴や状態は保存されません。
- 一部のターミナルや環境では進捗バーの描画が崩れる場合があります。

# 設計方針
- 進捗バーは「進む」「逆流」「停止」の3状態をランダムに遷移。
- メッセージも20種類以上をランダムで切り替え、毎回異なる体験を演出。
- コマンドラインからの明示呼び出しと、会話・コード内キーワードでの暗黙発動を両立。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-fake-mystery-update-progress .claude/skills/os-fake-mystery-update-progress

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

3. ファイル配置確認

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

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

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

5. 動作確認

/os-fake-mystery-update-progress で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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
  • 演出過多による作業妨害: 進捗バーが頻繁に出現しすぎると workflow の邪魔になる

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 進捗バーが一定間隔やランダム間隔で表示されるか?
  • 進捗内容の文言が毎回ランダムで変わるか?
  • 進捗バーが途中で止まったり逆流したりするギミックがちゃんと動作するか?

実際に Claude Code で試した検証ログは 謎のOSアップデート進捗バーを突如表示してみた!集中力をじわじわ侵食する演出が面白い にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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