Claude Codeで謎の進捗バー演出を構築する方法と活用ガイド

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

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

Claude Code を日常的に使っていると、真面目なコーディングやリポジトリ管理の合間に、ふとした“間”や緊張が生まれる瞬間がある。集中して長時間作業を続けていると、どうしても気が詰まったり、単調な流れに飽きてしまうことも。エンタメ要素や遊び心がほしいと感じる場面は意外と多い。特に通知や演出が突然現れると、作業の流れが一瞬リセットされて新鮮な気分になれることもある。

  • Claude Code で長時間 directory や repository の context を追い続けていると、集中力が切れてリフレッシュのきっかけがほしくなる
  • monorepo の複雑な構造を把握しながら作業していると、頭の中が整理しきれず、ふとした「脱力」や気晴らしが欲しくなる
  • session を再開した瞬間や、repository understanding が途切れた時に、緊張感が走る一方で、少し肩の力を抜きたいタイミングがある
  • AI coding workflow の合間に、意味不明な通知や演出が入ることで、長時間の作業にちょっとした変化を挟みたい
  • path management や directory 跨ぎの作業で、毎回同じ手順を繰り返すことに飽きてしまい、何か非日常的なイベントが欲しくなる

こうした「作業の合間の緊張と緩和」「謎の演出で気分転換したい」というニーズは、通知・演出・OS連携系 Skill でこそ解消できる領域。日々のコーディングの“間”に、ちょっとした遊び心を加えられる仕組みが求められている。

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

一言サマリ: このスキルは、作業の合間に謎のOSアップデート進行演出を挟み、日常の緊張感を一瞬で非日常に変えるSkill。

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

  • Claude Code の session や repository context の切り替え時に、意味不明な進捗バー演出が入り、作業の緊張感を緩和できる
  • monorepo や directory 跨ぎの際に、謎のアップデート進行通知が現れ、気分転換やリフレッシュのきっかけになる
  • AI coding workflow の長時間作業中でも、適度な“脱力”イベントが挟まることで、集中力の維持やストレス軽減に繋がる
  • onboarding や session 再開時に、ちょっとしたエンタメ要素を加え、作業開始の心理的ハードルを下げられる
  • Skill の進捗内容や挙動が毎回ランダムで理不尽なため、飽きずに何度でも楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /random-os-fake-mysterious-update-progress
> セッションを開始します

[謎のOSアップデート進行中...]
進捗: 17%
内容: 未知の言語パッチ適用中...

進捗: 41%
内容: レガシーキーボード最適化中...

進捗: 29%
内容: 進捗が戻されました。不可解なエラー検出...

進捗: 99%
内容: 仮想ファイルシステムの再構築中... (ここで止まる)

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


> packages/core/ から packages/ui/ へ移動

[謎のOSアップデート進行中...]
進捗: 12%
内容: ディレクトリ境界の再評価中...

進捗: 55%
内容: 不明なAPI互換性チェック中...

進捗: 44%
内容: 進捗が逆戻りしました。パッケージ依存性が迷子です...

進捗: 87%
内容: レポジトリ理解度向上パッチ適用中...

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


> なんとなく気分転換したい

[謎のOSアップデート進行中...]
進捗: 7%
内容: 意味不明なバイナリ最適化中...

進捗: 21%
内容: 仮想メモリ拡張中...

進捗: 19%
内容: 進捗が戻りました。ユーザーの集中力を再計測中...

進捗: 99%
内容: 不可視ファイルのクリーンアップ中... (ここで止まる)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+謎の進捗バーで一息
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+謎演出で気分転換
長時間 workflow long context で重要箇所が薄まる 適度に進捗バー演出が挟まり、集中力リセット

発動方式

明示呼び出し (/random-os-fake-mysterious-update-progress) と、自然言語で「謎のアップデートを表示して」などの指示にも反応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-mysterious-update-progress/
├── SKILL.md
├── scripts/
│   └── mysterious_update_progress.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-mysterious-update-progress
description: 作業中に『謎のOSアップデート進行中』の進捗バーをランダム表示し、進捗内容や挙動が理不尽で意味不明な場合にこのSkillを発動します。キーワード: 進捗バー, OSアップデート, 謎, 演出, 非日常。
---

# 機能概要
このSkillは、作業中や開発環境で突如「謎のOSアップデート進行中」風の進捗バーを表示するエンタメ系演出ツールです。進捗内容は毎回「未知の言語パッチ適用中」「レガシーキーボード最適化中」など意味不明なものばかり。進捗バーは途中で逆戻りしたり、99%で止まったまま一向に終わらなかったりと、理不尽な挙動も再現。普段の作業に謎の非日常感や脱力感を与え、緊張感をほぐしたいときや、チームの雰囲気を和ませたい場面で活用できます。

# 使い方
- 明示呼び出し: `/random-os-fake-mysterious-update-progress` で即時発動
- 暗黙発動: 「謎のアップデート」「進捗バー」「OS更新」などのキーワードを含む会話やコマンドで自動発動
- ターミナルまたはPython環境でスクリプトを直接実行可能

# 出力例
```
[謎のOSアップデート進行中]
進捗: 13% |■■■         | 未知の言語パッチ適用中...
進捗: 26% |■■■■■       | レガシーキーボード最適化中...
進捗: 21% |■■■         | 謎のカーネル再構築中...
進捗: 47% |■■■■■■■    | 不明なプロトコル同期化中...
進捗: 99% |■■■■■■■■■ | 仮想RAMの無限拡張中...
進捗: 99% |■■■■■■■■■ | 仮想RAMの無限拡張中...
進捗: 98% |■■■■■■■■  | 逆流するアップデート...
```

# 注意点
- 本Skillは純粋な演出目的であり、実際のOSやシステムには一切影響を与えません
- 進捗バーは標準出力のみ。ファイル保存や通知機能はありません
- 長時間の99%停滞や逆戻りは仕様です
- 本番環境や重要な作業の妨げにならないようご注意ください

# 参考資料
- references/design_notes.md を参照
- 公式Pythonドキュメント: https://docs.python.org/ja/3/library/random.html, https://docs.python.org/ja/3/library/time.html

scripts/mysterious_update_progress.py

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

MYSTERIOUS_TASKS = [
    '未知の言語パッチ適用中',
    'レガシーキーボード最適化中',
    '謎のカーネル再構築中',
    '不明なプロトコル同期化中',
    '仮想RAMの無限拡張中',
    '幽霊プロセスの駆除中',
    '量子バグの隔離中',
    'ファントムデバイス検出中',
    '暗黒モードの初期化中',
    '時空間キャッシュの消去中',
    '逆流するアップデート',
    '未定義エラーの生成中',
    '謎のドライバ署名中',
    '幽体離脱モード適用中',
    'ブラックボックス最適化中',
    '不明な依存関係解決中',
    '未知のアップデート適用中',
    '仮想ファイルシステム拡張中',
    '無限ループ検出中',
    '不可視プロセスの最適化中',
]

PROGRESS_BAR_LEN = 11

class ProgressBar:
    def __init__(self):
        self.progress = 0
        self.task = ''
        self.history = []
        self.max_progress = 99 if random.random() < 0.5 else 100
        self.reverse_chance = 0.25
        self.stuck_at_99 = random.random() < 0.5
        self.last_task = None
        self._printed_99 = False

    def random_task(self):
        task = random.choice(MYSTERIOUS_TASKS)
        while task == self.last_task:
            task = random.choice(MYSTERIOUS_TASKS)
        self.last_task = task
        return task

    def print_bar(self, progress, task):
        bars = int(progress / 100 * PROGRESS_BAR_LEN)
        bar_str = '|' + '■' * bars + ' ' * (PROGRESS_BAR_LEN - bars) + '|'
        print(f'進捗: {progress}% {bar_str} {task}...')
        sys.stdout.flush()

    def run(self, min_delay=0.3, max_delay=1.0, duration=20):
        start_time = time.time()
        progress = 0
        stuck_counter = 0
        while True:
            if self.stuck_at_99 and progress >= 99:
                if not self._printed_99:
                    task = self.random_task()
                    self.print_bar(99, task)
                    self._printed_99 = True
                time.sleep(random.uniform(0.7, 1.2))
                stuck_counter += 1
                if stuck_counter > 8:
                    # Occasionally regress from 99%
                    if random.random() < 0.3:
                        progress = random.randint(95, 98)
                        task = self.random_task()
                        self.print_bar(progress, task)
                        stuck_counter = 0
                continue
            if progress >= self.max_progress:
                break
            # Randomly regress
            if random.random() < self.reverse_chance and progress > 10:
                regress = random.randint(3, 10)
                progress = max(0, progress - regress)
                task = self.random_task()
                self.print_bar(progress, task)
                time.sleep(random.uniform(min_delay, max_delay))
                continue
            # Normal progress
            increment = random.randint(3, 12)
            progress = min(progress + increment, self.max_progress)
            task = self.random_task()
            self.print_bar(progress, task)
            self.history.append((progress, task))
            time.sleep(random.uniform(min_delay, max_delay))
            if time.time() - start_time > duration:
                break
        # Final output (if not stuck at 99)
        if not self.stuck_at_99:
            self.print_bar(100, 'アップデート完了(嘘)')

    def summary(self):
        print('=== アップデート進捗履歴 ===')
        for p, t in self.history:
            print(f'{p}%: {t}')

    def list_tasks(self):
        print('=== 謎のアップデート内容一覧 ===')
        for t in MYSTERIOUS_TASKS:
            print(f'- {t}')

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_run.add_argument('--min-delay', type=float, default=0.3, help='進捗更新の最小間隔')
    parser_run.add_argument('--max-delay', type=float, default=1.0, help='進捗更新の最大間隔')

    parser_summary = subparsers.add_parser('summary', help='直近の進捗履歴を表示')
    parser_list = subparsers.add_parser('list', help='謎のアップデート内容一覧を表示')

    args = parser.parse_args()

    bar = ProgressBar()

    if args.command == 'run' or args.command is None:
        try:
            bar.run(min_delay=args.min_delay, max_delay=args.max_delay, duration=args.duration)
        except KeyboardInterrupt:
            print('\n[中断されました]')
    elif args.command == 'summary':
        bar.summary()
    elif args.command == 'list':
        bar.list_tasks()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業中に非日常感や脱力感を与えるための演出系ツールです。実際のOSやシステムには一切影響を及ぼさない設計となっています。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/ja/3/library/random.html
- Python time: https://docs.python.org/ja/3/library/time.html

# 利用例
- チームのアイスブレイクや休憩タイムの話題作り
- 長時間作業の合間の気分転換
- プレゼンや配信でのネタ演出

# 注意点
- 進捗バーは標準出力のみで、システムやファイルには一切変更を加えません
- 実行中に99%で止まる、逆戻りするなど理不尽な挙動は仕様です
- 本番環境や重要な作業の妨げにならないようにしてください

# 設計方針
- 進捗内容・逆戻り・99%停滞など、すべてランダム性を持たせて毎回異なる演出を実現
- CLIサブコマンドで履歴表示や内容一覧もサポート
- シンプルな依存(標準Pythonのみ)でどこでも実行可能

導入手順

この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-mysterious-update-progress .claude/skills/random-os-fake-mysterious-update-progress

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-mysterious-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 を取りたい
  • 気分転換したい時: 謎のOSアップデート進行バーで脱力感を味わいたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • 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 との連携設計はどうあるべきか?
  • 進捗内容が毎回ランダムかつ意味不明であることを担保できているか?
  • 進捗バーの挙動が理不尽(逆戻り、99%で止まる等)になっているか?
  • 通知・演出が本番環境や作業に影響を与えないか?

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

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

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

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

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