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の明示呼び出し・暗黙発動の両方に対応し、好きなタイミングで笑いを差し込める
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
