Claude Codeで謎の古代バグ通知を演出するSkill構築ガイド

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

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

日々 Claude Code を使っていると、真面目な作業の合間にふと「ちょっとした遊び心が欲しい」「集中しすぎて疲れてきたので、空気を変えたい」と感じる瞬間がある。しかし、多くのAI coding workflowやrepository understanding支援Skillは実用一辺倒で、遊びやネタ要素がほとんどないのが現状。

  • 長時間のコーディングやpath managementの繰り返しで、チームの空気がマンネリ化しがち
  • onboardingやsession再開のたびに、堅苦しい説明やcontextの再設定ばかりで気が滅入る
  • monorepo構造やdirectory切り替え時の作業が単調で、repositoryの面白みが感じられない
  • AIからの通知やエラー表示が実用的すぎて、ちょっとした「笑い」やカオスが足りない
  • チームメンバーに「何か面白い演出Skillない?」と聞かれても、すぐに提案できるものが少ない

特に通知・演出・OS連携カテゴリのSkillが増えてきた今、実用性だけでなく「場の空気を和ませる」仕掛けを求める声も多い。

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

一言サマリ: このスキルは、作業中に“謎のOSバグ巻物”風エラー通知を炸裂させ、チームにカオスと笑いを提供するSkill。

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

  • AI coding workflowの中に、意図的な「謎エラー演出」を組み込むことで、長時間作業の息抜きやチームの場づくりに貢献
  • repository understandingやonboardingの合間に、巻物風UIで意味不明な通知を出し、会話のネタやアイスブレイクを生み出す
  • monorepoやdirectory移動時など、path managementが単調になりがちな場面で、あえてカオスな演出を投入できる
  • Claude Code の contextやmemoryが張り詰めすぎた時に、あえて「解読不能」な通知で空気を和ませる
  • Skillの明示呼び出し・暗黙発動の両方に対応し、好きなタイミングで笑いを差し込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-unreadable-error-scroll .claude/skills/random-os-fake-unreadable-error-scroll

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

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

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


# /random-os-fake-unreadable-error-scroll

[巻物UI] ──────────────────────────────
ΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦ
Error: ∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
at ancient_module.syscall(Ω) [line 42]
>> Directory: /src/legacy/scrolls/
Message: "K4l1d0r-Protocol: ∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇"
ΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦΞΩΛΔΣΨΘΦ
解読者求ム
──────────────────────────────

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


> 移動: packages/data-processor/ → packages/ui-scroll/

[巻物UI] ──────────────────────────────
#ERR: [ΣΩΨΛΦ] Package boundary overflow detected
Trace: /packages/ui-scroll/components/巻物Renderer.tsx
Stack: [ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ]
Syntax: "Untranslatable glyphs: ϞϞϞϞϞϞϞϞϞϞϞ"
──────────────────────────────
解決不能
──────────────────────────────

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


> なんか面白いエラー出して

[巻物UI] ──────────────────────────────
§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
Fatal: Ancient OS curse invoked!
at /repo/unknown/scrolls/curse.py:666
Message: "ΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ"
§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
このバグは永遠に解読されない
──────────────────────────────

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-unreadable-error-scroll) と暗黙発動 (「謎のエラー出して」「巻物風エラー通知」などのdescriptionマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-unreadable-error-scroll/
├── SKILL.md
├── scripts/
│   └── fake_unreadable_error_scroll.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-unreadable-error-scroll
description: このSkillは、エラーやバグ、通知、混乱、カオス、OSバグ、不可解な現象などのキーワードや、/random-os-fake-unreadable-error-scroll 明示呼び出し時に発動します。巻物風UIで意味不明なエラーをスクロール表示し、チームに笑いと混乱を提供します。
---

# 機能概要
このSkillは、作業中に“謎のOS古代バグ巻物”風のエラー通知をデスクトップやターミナルに表示します。内容は解読不能な横文字や謎の呪文が巻物UIでスクロール表示され、最後に「解読者求ム」や「解決不能」などの無情な一言で締めくくられます。バグ報告すら理解不能な状況をあえて演出し、チームにカオスと笑いをもたらします。通知・演出・OS連携カテゴリのネタ系スキルです。

# 使い方
- 明示呼び出し例: `/random-os-fake-unreadable-error-scroll`
- 暗黙発動キーワード例: 「エラー」「バグ」「通知」「不可解」「OSバグ」「混乱」「カオス」などの単語を含む発話やイベント時に自動発動します。

# 出力例
```
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ERROR: [0x1A2B3C] SYS_UNREADABLE_FAULT
┃ Zkqvbnw: *#@!&^%$#@! -- 0xDEADBEEF
┃ GHLKJ: UNK_ERR_ΣΔΩΞΨΛ
┃ ???: /dev/scrolls/ancient.log: unreadable
┃ 010101000110100001100101
┃ 解読者求ム
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
```

# 注意点
- 本Skillは実害のない演出用です。実際のエラーやシステム障害には関与しません。
- ローカル端末上でのみ動作し、ファイル等の書き換えは行いません。
- 頻繁な発動はチームの生産性を阻害する恐れがあるため、通知頻度やタイミングにはご注意ください。

# 参考資料
- [references/design_notes.md](references/design_notes.md) に設計方針や利用例を記載
- 公式Pythonドキュメント: https://docs.python.org/ja/3/library/random.html

scripts/fake_unreadable_error_scroll.py

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

def generate_gibberish_line():
    gibberish = [
        '*#@!&^%$#@!',
        'ΣΔΩΞΨΛ',
        '0xDEADBEEF',
        'UNK_ERR_ΣΔΩΞΨΛ',
        '010101000110100001100101',
        'Zkqvbnw',
        'GHLKJ',
        '/dev/scrolls/ancient.log',
        'SYS_UNREADABLE_FAULT',
        'ERR: 0x1A2B3C',
        '???',
        'WARNING: 0xBADF00D',
        'CRITICAL: UNK_ΣΔΩ',
        'TRACEBACK: <unreadable>',
        'FATAL: [NULLPTR]',
        'panic: segmentation scroll',
        'Memory dump: 0x00ff00ff',
        'Stacktrace: ???',
        'core dumped',
        'Segmentation fault',
        'Bus error',
        'Unknown opcode',
        'Illegal instruction',
        'System halt',
        'Scroll error',
        '巻物破損',
        'バイナリ断片',
        'ファイル読込失敗',
        'データ欠損',
        'アクセス拒否',
        'アクセス違反',
    ]
    return random.choice(gibberish)

def generate_scroll_lines(num_lines: int = 6) -> List[str]:
    lines = []
    # 1行目はタイトル風
    lines.append(f"ERROR: [{random.choice(['0x1A2B3C','0xBADF00D','0xDEADBEEF','0xCAFEBABE'])}] {generate_gibberish_line()}")
    for _ in range(num_lines-2):
        key = random.choice(['Zkqvbnw', 'GHLKJ', '???', 'TRACE', 'ERR', 'CRIT', 'WARN'])
        val = generate_gibberish_line()
        lines.append(f"{key}: {val}")
    # 最後は締めの一言
    ending = random.choice([
        '解読者求ム',
        '解決不能',
        '巻物破損',
        'バグ報告不可',
        '理解不能',
        'OS開発者募集中',
        '全ては巻物の中',
        '運命に従え',
        '再起動推奨',
        'Good luck!'
    ])
    lines.append(ending)
    return lines

def get_terminal_width():
    try:
        columns, _ = shutil.get_terminal_size(fallback=(80, 20))
        return columns
    except Exception:
        return 80

def format_scroll_box(lines: List[str]) -> List[str]:
    width = max(len(line) for line in lines) + 4
    width = min(width, get_terminal_width() - 2)
    top = '┏' + '━' * (width - 2) + '┓'
    bottom = '┗' + '━' * (width - 2) + '┛'
    box_lines = [top]
    for line in lines:
        l = line[:width-4]
        box_lines.append('┃ ' + l.ljust(width-4) + ' ┃')
    box_lines.append(bottom)
    return box_lines

def scroll_print(box_lines: List[str], delay: float = 0.2):
    for line in box_lines:
        print(line)
        sys.stdout.flush()
        time.sleep(delay)

def log_error_to_file(lines: List[str], path: str = 'fake_scroll_error.log'):
    try:
        with open(path, 'a', encoding='utf-8') as f:
            for line in lines:
                f.write(line + '\n')
            f.write('\n')
    except Exception as e:
        print(f"[log_error_to_file] Logging failed: {e}", file=sys.stderr)

def list_log(path: str = 'fake_scroll_error.log', tail: int = 10):
    try:
        with open(path, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        if not lines:
            print('(ログはありません)')
            return
        print(''.join(lines[-tail:]))
    except FileNotFoundError:
        print('(ログファイルが存在しません)')
    except Exception as e:
        print(f"[list_log] 読み込み失敗: {e}", file=sys.stderr)

def summary_log(path: str = 'fake_scroll_error.log'):
    try:
        with open(path, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        count = sum(1 for line in lines if line.startswith('┏'))
        print(f"記録された巻物エラー数: {count}")
    except FileNotFoundError:
        print('(ログファイルが存在しません)')
    except Exception as e:
        print(f"[summary_log] 読み込み失敗: {e}", file=sys.stderr)

def main():
    parser = argparse.ArgumentParser(description='謎のOS古代バグ巻物エラー演出スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='巻物エラーを生成して表示&ログ')
    parser_log.add_argument('--lines', type=int, default=6, help='エラー行数(デフォルト6)')
    parser_log.add_argument('--no-scroll', action='store_true', help='スクロールせず一括表示')
    parser_log.add_argument('--no-log', action='store_true', help='ログファイルに記録しない')

    parser_list = subparsers.add_parser('list', help='エラーログの末尾を表示')
    parser_list.add_argument('--tail', type=int, default=10, help='末尾表示行数(デフォルト10)')

    parser_summary = subparsers.add_parser('summary', help='エラーログの件数を集計')

    args = parser.parse_args()

    if args.command == 'log':
        lines = generate_scroll_lines(num_lines=args.lines)
        box = format_scroll_box(lines)
        if args.no_scroll:
            print('\n'.join(box))
        else:
            scroll_print(box)
        if not args.no_log:
            log_error_to_file(box)
    elif args.command == 'list':
        list_log(tail=args.tail)
    elif args.command == 'summary':
        summary_log()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業現場やチームの雰囲気を和ませるためのネタ系演出ツールです。巻物風の枠やスクロール表示、意味不明なエラー文を自動生成し、実際の障害とは無関係にカオスな雰囲気を演出します。

# 公式ドキュメント抜粋
Python標準ライブラリのrandom, argparse, time, shutil, osを活用し、外部依存を排除しています。端末幅の自動取得や、ログファイル保存もサポート。

# 利用例
- チームの朝会やバグ報告会でネタとして利用
- コードレビュー時の雰囲気緩和
- デバッグ作業中の息抜き

# 注意点
本Skillは実際のシステム障害やエラー対応には一切関与しません。ログはローカルファイル(fake_scroll_error.log)にのみ保存され、外部送信はありません。通知頻度が高すぎると逆効果になるため、適度な利用を推奨します。

# 設計方針
巻物UIやスクロール表示は、ターミナル幅に応じて動的に調整されます。エラー文は多様性を重視し、毎回異なる内容を生成。コマンドラインから明示的に呼び出せるほか、Skillトリガー条件にも対応しています。

導入手順

この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-unreadable-error-scroll .claude/skills/random-os-fake-unreadable-error-scroll

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

3. ファイル配置確認

ls .claude/skills/random-os-fake-unreadable-error-scroll
# SKILL.md, scripts/, references/, README.md があればOK

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

新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-unreadable-error-scroll で呼び出し可能です。

5. 動作確認

/random-os-fake-unreadable-error-scroll で呼び出すか、自然言語で「謎のエラー出して」など発動条件にマッチする指示を出すと 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 を取りたい
  • マンネリ打破・チームの空気転換: 集中力が切れた時や休憩タイミングで、あえて意味不明な演出を挟みたい
  • 雑談・アイスブレイク: チーム内で「謎のバグ巻物」を共有して盛り上がりたい時

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

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

  • 通知頻度・タイミング調整: 巻物エラーが頻繁すぎると本来の作業を阻害する可能性
  • メッセージ多様性: 何度も使うと「また同じパターン?」と飽きられるリスク
  • 巻物UIの描画互換性: ターミナルやOS環境によってはUIが崩れる場合がある
  • irrelevant path 混入: directory名やfile名が現実のrepoと合わない場合、違和感が出ることも
  • Claude Code の context管理: 長い巻物エラーがmemoryを圧迫しないか要注意
  • 他Skillとの競合: 同時発動や優先度競合時の挙動

試す前に確かめたいこと

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

  • 巻物UIやスクロール表示が各OS・ターミナルでちゃんと動作するか?
  • メッセージがちゃんと意味不明&多様性が保たれているか?
  • 通知頻度やタイミングが鬱陶しすぎないか?
  • 本来のAI coding workflowやrepository understandingの邪魔にならないか?
  • 長時間sessionやmonorepoでmemory圧迫・context肥大化しないか?

実際に Claude Code で試した検証ログは Claude Codeで通知・演出・OS連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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