Claude Codeで画面演出を活用する謎通知表示Skillの作り方入門

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

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

Claude Code を日常的に使っていると、便利さの裏で思わず「またか…」と感じるシーンが少なくありません。特に通知や演出、OS連携まわりで、ふとした瞬間に集中力が切れたり、思考が途切れたりすることも。以下のような悩みが「あるある」として挙げられます。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

さらに、長時間作業や繰り返しの onboarding で集中力が途切れ、ちょっとした「遊び」や変化が欲しくなる瞬間も。そんな時に「謎の通知」や「意味不明な演出」があれば、意外とリフレッシュにつながるのでは?という声もよく聞かれます。

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

一言サマリ: このスキルは、Claude Code の作業中に突如現れる“謎の古文書巻物通知”で、集中力のリセットや気分転換を強制的に演出する Skill。

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

  • AI coding workflow の合間に、完全無意味な“古文書巻物通知”が現れ、作業のマンネリや stale context を強制リセット
  • repo や directory の切り替え時、monorepo の package 跨ぎ時に、謎のOS公式っぽい演出で笑いと違和感を提供
  • onboarding や session 再開時の「いつもと同じ流れ」に、毎回異なる context(=通知文)で変化と話題を生む
  • Skill の巻物風UIが、単調なターミナルやデスクトップに“謎のエンタメ性”を持ち込む
  • 通知内容が毎回ランダム生成なので、記憶に残る一発ネタとしてチーム内でも話題化
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-ancient-scroll-alert .claude/skills/random-os-fake-ancient-scroll-alert

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

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

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


# /random-os-fake-ancient-scroll-alert

[巻物通知]
━━━━━━━━━━━━━━━━━━━━━━
  西のcodes/ディレクトリに
  バグの気運、漂う
  本日、レビュアーの機嫌は末吉
━━━━━━━━━━━━━━━━━━━━━━
(古文書巻物UIが画面端にふわっと出現)

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


> packages/api/ に移動

[巻物通知]
━━━━━━━━━━━━━━━━━━━━━━
  古きリポジトリの奥より
  “api/handler.py”に
  不穏なるPRの影、忍び寄る
━━━━━━━━━━━━━━━━━━━━━━
(巻物風の枠がターミナル右下に出現)

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


> ちょっと気分転換したい

[巻物通知]
━━━━━━━━━━━━━━━━━━━━━━
  本日、commit数は吉
  だが、東のtests/に
  謎のバグ、現る
━━━━━━━━━━━━━━━━━━━━━━
(巻物UIで無意味な警告が出て、思わず笑う)

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-ancient-scroll-alert) と暗黙発動 (「気分転換したい」「謎の通知を出して」など description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-ancient-scroll-alert/
├── SKILL.md
├── scripts/
│   └── scroll_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-ancient-scroll-alert
description: コマンド実行後・作業の合間・明示呼び出し(/random-os-fake-ancient-scroll-alert)時に、ランダムな“OS公式古文書巻物通知”を画面端へ表示。集中力ブレイクやエンタメ演出が必要な場面で発動。
---

# 機能概要
このSkillは、作業中やコマンド実行の合間に、突如として“謎のOS公式・古文書巻物通知”をデスクトップやターミナル画面端に表示します。通知は「西のコードベースにバグの気運漂う」「レビュアーの機嫌は末吉」など、古文書風の無意味なテキストが毎回ランダム生成され、巻物風UIで表示されます。実用性は皆無ですが、集中力をブレイクしたい時や、作業に一息入れたい時のエンタメ演出として活用できます。

# 使い方
- 明示呼び出し:`/random-os-fake-ancient-scroll-alert` をコマンドとして実行
- 暗黙発動:コマンド実行後や一定時間ごと(例: 15分毎)、または「集中」「疲れ」などのキーワードを含む会話文脈で自動発動

# 出力例
```
┌────────────────────────────┐
│  西のコードベースにバグの気運漂う  │
│  本日、レビュアーの機嫌は末吉      │
│  東の山より新たな仕様書が届く      │
│  朝霧の中、ビルドは静かに失敗す    │
└────────────────────────────┘
```

# 注意点
- 実用性はありません。通知内容は完全に無意味で、そのまま業務に使わないでください。
- 通知はローカル画面端に一時的に表示され、履歴保存やOS通知センター連携はありません。
- 他の通知や作業の邪魔になる場合があります(それが目的です)。

# 参考資料
- 参考: `references/design_notes.md`
- 公式: [Python標準Tkinterドキュメント](https://docs.python.org/ja/3/library/tkinter.html)
- Skill設計・UI描画に関する詳細は references/ を参照してください。

scripts/scroll_alert.py

import sys
import argparse
import random
import threading
import time
import tkinter as tk
from tkinter import font as tkfont

SCROLL_TEXTS = [
    [
        "西のコードベースにバグの気運漂う",
        "レビュアーの機嫌は末吉",
        "東の山より新たな仕様書が届く",
        "朝霧の中、ビルドは静かに失敗す"
    ],
    [
        "南のリポジトリ、謎のマージ衝突あり",
        "今日のCI、波高し",
        "古きAPI、未だ現役",
        "北風に乗りてPR流る"
    ],
    [
        "西方、無限ループの噂立つ",
        "レビュアー、昼寝中につき審議遅延",
        "朝焼けに染まるコードレビュー",
        "仕様書、解読不能の巻物となる"
    ],
    [
        "東の山、未読のissue積もりけり",
        "本日、デプロイ運気は小吉",
        "バグ、静かに忍び寄る",
        "古文書に残るバグの記憶"
    ],
    [
        "北の森、ドキュメント迷宮化す",
        "レビュアーの一言、雷鳴の如し",
        "西風に乗りて仕様変更来たる",
        "深夜のビルド、霧の中に消ゆ"
    ],
    [
        "南の海、未解決のエラー漂う",
        "本日、テストカバレッジ微増",
        "古きバグ、新たな姿に化ける",
        "レビュアー、沈黙を守る"
    ]
]


def random_scroll_text():
    return random.choice(SCROLL_TEXTS)


def display_scroll_alert(lines, duration=8):
    root = tk.Tk()
    root.overrideredirect(True)
    root.attributes("-topmost", True)
    root.withdraw()

    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()

    # UI設定
    frame = tk.Frame(root, bg="#f5ecd2", bd=4, relief=tk.RIDGE)
    frame.pack(fill=tk.BOTH, expand=True)

    # フォント設定
    try:
        scroll_font = tkfont.Font(family="MS Mincho", size=15, weight="bold")
    except Exception:
        scroll_font = tkfont.Font(size=15, weight="bold")

    # 巻物風タイトル
    title = tk.Label(frame, text=" 謎のOS公式・古文書巻物通知 ", bg="#c2b280", fg="#3f3210", font=("MS Gothic", 12, "bold"))
    title.pack(fill=tk.X, pady=(0, 4))

    # 本文
    for line in lines:
        lbl = tk.Label(frame, text=line, bg="#f5ecd2", fg="#2c2000", font=scroll_font, anchor="w", justify=tk.LEFT)
        lbl.pack(anchor="w", padx=16)

    # 巻物枠風に
    frame.update_idletasks()
    width = frame.winfo_width() or 380
    height = frame.winfo_height() or (32 * len(lines) + 40)

    # 画面右下に配置
    x = screen_width - width - 20
    y = screen_height - height - 60
    root.geometry(f"{width}x{height}+{x}+{y}")
    root.deiconify()

    def close():
        root.destroy()

    # 指定秒数後に自動消去
    root.after(duration * 1000, close)
    root.mainloop()


def scroll_alert_command(args):
    lines = random_scroll_text()
    display_scroll_alert(lines, duration=args.duration)


def list_scrolls_command(args):
    print("--- 登録済み巻物通知サンプル ---")
    for i, lines in enumerate(SCROLL_TEXTS):
        print(f"[{i+1}] ")
        for l in lines:
            print(f"  {l}")
        print()


def summary_command(args):
    print("このSkillは、作業中やコマンド実行の合間に、
謎のOS公式・古文書巻物通知を画面端に表示します。通知内容は毎回ランダム生成され、集中力をブレイクするエンタメ演出です。")
    print(f"登録済み通知パターン数: {len(SCROLL_TEXTS)}")


def auto_mode(interval=900):
    try:
        while True:
            lines = random_scroll_text()
            t = threading.Thread(target=display_scroll_alert, args=(lines,))
            t.start()
            time.sleep(interval)
    except KeyboardInterrupt:
        print("自動巻物通知モード終了")


def main():
    parser = argparse.ArgumentParser(description="謎のOS公式・古文書巻物通知 Skill")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="巻物通知を即座に表示")
    parser_alert.add_argument("--duration", type=int, default=8, help="表示秒数 (デフォルト8秒)")
    parser_alert.set_defaults(func=scroll_alert_command)

    parser_list = subparsers.add_parser("list", help="巻物通知サンプル一覧表示")
    parser_list.set_defaults(func=list_scrolls_command)

    parser_summary = subparsers.add_parser("summary", help="Skill概要を表示")
    parser_summary.set_defaults(func=summary_command)

    parser_auto = subparsers.add_parser("auto", help="一定間隔で自動巻物通知モード")
    parser_auto.add_argument("--interval", type=int, default=900, help="通知間隔秒 (デフォルト15分)")
    parser_auto.set_defaults(func=lambda args: auto_mode(args.interval))

    args = parser.parse_args()

    if hasattr(args, "func"):
        args.func(args)
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
本Skillは、作業中に突如として“謎のOS公式・古文書巻物通知”を画面端に表示し、集中力をブレイクするエンタメ演出を目的としています。Tkinterを使い、巻物風のUIで無意味な通知文をランダム生成します。

# 公式ドキュメント抜粋
TkinterはPython標準GUIライブラリで、`Tk()`によるウィンドウ生成や`Label`/`Frame`での装飾が可能です。
- [Tkinter公式](https://docs.python.org/ja/3/library/tkinter.html)

# 利用例
- `/random-os-fake-ancient-scroll-alert` コマンドで即時発動
- `scroll_alert.py alert` で手動通知
- `scroll_alert.py auto --interval 600` で10分ごと自動通知

# 注意点
- 通知内容は完全に無意味で、業務利用不可
- OS通知センター連携や履歴保存機能は未実装
- 他の通知や作業の邪魔になる場合があります

# 設計方針
- ランダム性と巻物風UIの徹底
- シンプルな依存(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-fake-ancient-scroll-alert .claude/skills/random-os-fake-ancient-scroll-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-ancient-scroll-alert で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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
  • 通知が多すぎて逆に邪魔: 意図しないタイミングで巻物通知が連発される場合、集中力ブレイカーが逆効果になる可能性
  • UI崩れ: 巻物風UIがOSやターミナル環境によって正常に表示されない場合がある

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 巻物風UIがちゃんと表示されるか?
  • 通知文が毎回異なるランダム生成になっているか?
  • 他の通知や作業の邪魔になっているか(むしろ歓迎)

実際に Claude Code で試した検証ログは Claude Codeで謎の古文書巻物通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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