Claude Codeで作業空間に謎の演出を自動化するSkill構築手順

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

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

Claude Code を使った AI coding workflow の日常には、思わず「またか」と感じる瞬間がつきものです。特に context や repository understanding、path management 周りでのストレスは、多くのユーザーが共感する「あるある」でしょう。以下のような悩みが繰り返し発生します。

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

また、集中力が切れたときや、単調な directory 構造説明で気が抜けてしまう瞬間も多いはずです。そんな時に、突拍子もない演出や通知が入ることで、気分転換や作業のリズムを変えたいと感じることはありませんか。

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

一言サマリ: このスキルは、作業中に突如“謎のOS公式・ペット命名通知”を発生させ、集中しすぎた空気や単調なAI coding workflowにカオスと笑いをもたらします。

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

  • 作業の合間に、完全に無意味で理不尽な“ペット命名通知”が現れ、長い session や単調な repository onboarding の空気を一変できる
  • monorepo での directory 移動や path management の合間に、思わず笑ってしまう余白が生まれる
  • AI coding workflow の context が張り詰めすぎた時、強制的に軽いノイズが入り、気分転換できる
  • repository understanding の説明に疲れた時、突発イベントでリフレッシュできる
  • Skill の存在自体がチームやペアプロの話題作りになる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-fake-random-pet-name-notifier .claude/skills/os-fake-random-pet-name-notifier

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

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

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


# /os-fake-random-pet-name-notifier
> 新しい session を開始します

[OS公式通知] あなたのマウスは本日より “疾風のコロンブス” と命名されました。
今後、クリック時はこの名で呼びかけてください。
---
[OS公式通知] キーボードの新しい名は “静寂なる鉄槌” です。
タイプミスが減るかは未定です。

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


> packages/api/ に移動して作業を続けます

[OS公式通知] “光速のバロン” が本日よりあなたの trackpad の正式名称です。
---
[OS公式通知] USBカメラの新たな名は “虚空の監視者” に決定しました。
---
(参考) 現在の作業 directory: packages/api/

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


> ちょっと疲れたので気分転換したい

[OS公式通知] ディスプレイの称号 “蒼穹の覇者” が与えられました。
---
[OS公式通知] あなたの外付けHDDは “忘却の守護者” として登録されました。
---
(この通知に実用性はありません)

before / after の違い

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

発動方式

明示呼び出し (/os-fake-random-pet-name-notifier) と暗黙発動 (「ペットの名前をつけて」など description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-fake-random-pet-name-notifier/
├── SKILL.md
├── scripts/
│   └── os_fake_random_pet_name_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-random-pet-name-notifier
description: 作業中やターミナル操作時、または「ペット名」「命名」「通知」などのキーワード検出時に、ランダムなタイミングで“OS公式ペット命名通知”を表示します。明示的な /os-fake-random-pet-name-notifier コマンドでも発動。
---

# 機能概要
このスキルは、あなたの作業中に突然“謎のOS公式・ペット命名通知”をデスクトップやターミナルに表示します。内容は毎回ランダムで、例えば「あなたのマウスは本日より“疾風のコロンブス”と命名されました」など、PC周辺機器に意味不明な二つ名を勝手に付与する理不尽イベントを演出します。実用性はありませんが、作業にカオスと笑いをもたらし、集中力を根こそぎ奪います。

# 使い方
- 明示呼び出し: `/os-fake-random-pet-name-notifier`
- 暗黙発動: 「ペット名」「命名」「通知」「デバイス」などのキーワードが会話やコードに現れた時、自動的に発動します。

# 出力例
```
[OS通知] あなたのマウスは本日より「疾風のコロンブス」と命名されました。
[OS通知] キーボードの新しい名は「静寂なる鉄槌」です。
[OS通知] モニターの公式ペット名:「闇夜の覗き魔」
[OS通知] USBハブは「無限分岐の賢者」となりました。
[OS通知] あなたのWebカメラは「見守る千里眼」になりました。
```

# 注意点
- 本Skillは通知のみを行い、実際のデバイスやデータには一切影響しません。
- ローカルへの保存や履歴機能はありません。
- 一部OS環境ではデスクトップ通知が利用できない場合があります(その際はターミナル出力のみ)。
- 実在の命名規則やOS公式機能とは無関係です。

# 参考資料
- references/design_notes.md を参照
- [Python公式: notifications](https://pypi.org/project/plyer/)(通知API)
- [OS通知のクロスプラットフォーム実装例](https://plyer.readthedocs.io/en/latest/)

scripts/os_fake_random_pet_name_notifier.py

import random
import time
import argparse
import sys
import threading

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

# デバイス名と二つ名パターン
DEVICES = [
    'マウス', 'キーボード', 'モニター', 'USBハブ', 'Webカメラ', 'スピーカー', 'マイク', 'プリンター', '外付けHDD', 'トラックパッド', 'ルーター', 'ヘッドフォン', 'タブレット', 'スマートフォン', 'ゲームパッド'
]

NICKNAME_PATTERNS = [
    '{adj1}{adj2}の{noun}',
    '{adj1}なる{noun}',
    '{adj1}の{noun}',
    '{noun1}の{noun2}',
    '{adj1}{noun1}',
    '{adj1}し{noun1}',
]

ADJ1 = [
    '疾風', '静寂', '闇夜', '無限', '見守る', '孤高', '気まぐれ', '不屈', '眠れる', '閃光', '鉄壁', '漂泊', '忍耐', '爆速', '神秘', '不思議', '伝説', '蒼穹', '深淵', '不滅'
]

ADJ2 = [
    'なる', 'し', 'の', 'たる', 'を纏う', 'にして', 'を宿す', 'を操る', 'のごとき', 'を超えし'
]

NOUNS = [
    'コロンブス', '鉄槌', '覗き魔', '賢者', '千里眼', '守護者', '魔術師', '旅人', '探求者', '暴君', '詩人', '王', '忍者', '巨人', '狩人', '幻影', '怪盗', '執行者', '導師', '預言者'
]

def generate_nickname():
    pattern = random.choice(NICKNAME_PATTERNS)
    adj1 = random.choice(ADJ1)
    adj2 = random.choice(ADJ2)
    noun1 = random.choice(NOUNS)
    noun2 = random.choice(NOUNS)
    noun = random.choice(NOUNS)
    return pattern.format(adj1=adj1, adj2=adj2, noun=noun, noun1=noun1, noun2=noun2)

def generate_message():
    device = random.choice(DEVICES)
    nickname = generate_nickname()
    templates = [
        f'あなたの{device}は本日より「{nickname}」と命名されました。',
        f'{device}の新しい名は「{nickname}」です。',
        f'{device}の公式ペット名:「{nickname}」',
        f'{device}は「{nickname}」となりました。',
        f'あなたの{device}は「{nickname}」になりました。',
    ]
    return random.choice(templates)

def notify(message, title='OS通知'):
    if PLYER_AVAILABLE:
        try:
            notification.notify(
                title=title,
                message=message,
                timeout=5
            )
        except Exception as e:
            print(f'[通知失敗] {e}', file=sys.stderr)
            print(f'[OS通知] {message}')
    else:
        print(f'[OS通知] {message}')

def run_random_notifier(interval_min=300, interval_max=1200, stop_event=None):
    while True:
        wait = random.randint(interval_min, interval_max)
        for _ in range(wait):
            if stop_event and stop_event.is_set():
                return
            time.sleep(1)
        message = generate_message()
        notify(message)

def list_sample_messages(count=10):
    for _ in range(count):
        print('[OS通知]', generate_message())

def main():
    parser = argparse.ArgumentParser(description='OS Fake Random Pet Name Notifier')
    subparsers = parser.add_subparsers(dest='command', help='サブコマンド')

    parser_run = subparsers.add_parser('run', help='ランダムなタイミングで通知を表示')
    parser_run.add_argument('--min', type=int, default=300, help='最小通知間隔(秒)')
    parser_run.add_argument('--max', type=int, default=1200, help='最大通知間隔(秒)')

    parser_once = subparsers.add_parser('once', help='1回だけ通知を表示')

    parser_list = subparsers.add_parser('list', help='サンプル通知を複数表示')
    parser_list.add_argument('--count', type=int, default=10, help='表示数')

    args = parser.parse_args()
    if args.command == 'run':
        stop_event = threading.Event()
        try:
            run_random_notifier(interval_min=args.min, interval_max=args.max, stop_event=stop_event)
        except KeyboardInterrupt:
            stop_event.set()
            print('\n[終了] 通知スレッドを停止しました')
    elif args.command == 'once':
        notify(generate_message())
    elif args.command == 'list':
        list_sample_messages(args.count)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中にユーザーの集中力を理不尽に奪う“謎のOS公式ペット命名通知”をランダムに表示し、カオスな演出を提供します。実用性はありませんが、会話やコーディング体験にユーモアを加えます。

# 公式ドキュメント抜粋
通知APIは [Plyer](https://plyer.readthedocs.io/en/latest/) を利用し、クロスプラットフォームなデスクトップ通知を実現しています。plyerが利用できない場合は標準出力にフォールバックします。

# 利用例
- `/os-fake-random-pet-name-notifier` で即時通知
- `python os_fake_random_pet_name_notifier.py run` でバックグラウンド通知
- `python os_fake_random_pet_name_notifier.py list --count 5` でサンプル出力

# 注意点
- 通知は完全なジョークであり、実際のOSやデバイス設定には一切影響しません。
- 履歴や命名の保存機能はありません。
- 一部OSでは通知が表示されない場合があります。

# 設計方針
- ランダム性と多様な命名パターンを重視
- OSや作業環境への影響ゼロ
- 明示/暗黙両方のトリガーに対応

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-fake-random-pet-name-notifier .claude/skills/os-fake-random-pet-name-notifier

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

3. ファイル配置確認

ls .claude/skills/os-fake-random-pet-name-notifier
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/os-fake-random-pet-name-notifier で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 通知がランダムなタイミングで表示されるか?
  • 命名パターンのバリエーションが十分あるか?
  • 通知が作業やデータに影響しないか?

実際に Claude Code で試した検証ログは 謎のペット命名通知が作業中に突然現れるか試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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