Claude Codeで作業中の謎通知を演出するSkillの構築手順

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

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

Claude Code を使っていると、日々の開発作業の中で「集中力の維持」や「作業の単調さ」が意外なストレス要因になることがあります。とくに長時間にわたる repository understanding や path management、monorepo の directory 構造把握など、AI coding workflow の効率化に注力するあまり、つい無機質な作業が続いてしまいがちです。

通知・演出・OS連携系のSkillが欲しくなる場面も多く、以下のような「あるある」な困りごとが挙げられます:

  • 長時間同じ directory で作業していると、集中力が途切れがちでリフレッシュのきっかけが欲しい
  • monorepo の複雑な repository 構造に没頭しすぎて、気づけば時間が過ぎている
  • Claude Code の context や memory が膨らみ、作業が単調化して気分転換できない
  • session を再開した瞬間、前回までの流れを思い出すのに苦労する
  • たまにはAIとのやりとりに「遊び」や「笑い」の余白が欲しくなる

こうした悩みは、真面目なAI coding workflowの中にちょっとした「遊び心」や「意外性」を挟むことで、意外と解消できることがあります。

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

一言サマリ: このスキルは作業中に突如『謎のOS伝説アイテムドロップ通知』をデスクトップやターミナルに爆誕させますSkill。

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

  • AI coding workflow の合間に、完全に意味不明な「伝説アイテムドロップ通知」が現れ、作業の単調さが絶妙に中断される
  • repository understanding や directory 構造把握に没頭中でも、思わず笑ってしまう演出で気分がリセットされる
  • デスクトップやターミナルに「本物っぽい」通知が現れることで、現実と仮想の境界が一瞬あいまいになる新鮮な体験が得られる
  • Claude Code の context が膨らんだ session でも、Skill の遊び心が会話に余白を生み出す
  • onboarding や session 再開時の堅苦しさを和らげ、チーム内のコミュニケーションにも話題を提供できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-fake-legendary-item-drop-alert .claude/skills/os-fake-legendary-item-drop-alert

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

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

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


# /os-fake-legendary-item-drop-alert
> session start

[通知] 伝説のスペースキー +5 を拾いました!
  └ アイテム効果: タイプ速度が一時的に爆上がり
  └ 入手場所: /src/components/LegendarySpaceKey.js
  └ レア度: ★★★★★

(作業を続けますか?)

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


> 移動: packages/auth/

[伝説アイテムドロップ!]
  謎のUSBメモリ(未鑑定)を発見!
  └ packages/auth/utils/usbMystery.js
  └ 何が入っているかは不明です
  └ レア度: ★★★★☆

(鑑定しますか?)

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


> 今日は集中できないな…

[OS伝説通知]
  古代のタブキー(発掘済)をゲット!
  └ 効果: インデントが自動で揃う気がする
  └ /scripts/tools/tabKeyRelic.py
  └ レア度: ★★★☆☆

(使う/しまう)

before / after の違い

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

発動方式

明示呼び出し (/os-fake-legendary-item-drop-alert) と暗黙発動 (「伝説アイテム」「謎の通知」などの description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-fake-legendary-item-drop-alert/
├── SKILL.md
├── scripts/
│   └── legendary_item_drop.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/legendary_item_drop.py OS伝説アイテムドロップ通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-fake-legendary-item-drop-alert
description: 作業中や長時間のコーディングセッション、または『伝説』『ドロップ』『通知』などのキーワードが出現した際に発動。集中力が高まったタイミングや明示的な /os-fake-legendary-item-drop-alert コマンド実行時にも効果的。
---

# 機能概要
このSkillは、作業中のデスクトップやターミナルに突如として『謎のOS伝説アイテムドロップ通知』を出現させる演出系ツールです。通知内容は毎回ランダムで生成され、「伝説のスペースキー+5」「未鑑定のUSBメモリ」「古代のタブキー(発掘済)」など、現実には存在しないカオスなアイテム名が表示されます。実用性はありませんが、作業の合間に思わず笑ってしまう体験を提供し、単調な作業にちょっとした刺激を与えます。

# 使い方
- 明示呼び出し: `/os-fake-legendary-item-drop-alert` をターミナルやチャットで実行すると即座に通知が発生します。
- 暗黙発動: 「伝説」「ドロップ」「通知」「ガチャ」などのキーワードが会話やコード内で検出された場合、自動的にスキルが発動します。発動頻度は1時間に1〜2回程度で、過剰な妨害はありません。

# 出力例
```
[OS伝説アイテムドロップ通知]
伝説のCapsLockキー(+3)を拾いました!
レアリティ: 神話級
効果: タイプミス抑制率+20%

[OS伝説アイテムドロップ通知]
謎のUSBメモリ(未鑑定)を発見!
レアリティ: レア
効果: 使用未確認

[OS伝説アイテムドロップ通知]
古代のタブキー(発掘済)をゲット!
レアリティ: 伝説
効果: コード整形力+10
```

# 注意点
- 通知はローカル端末のデスクトップ通知API(notify-send等)またはターミナル出力で実施されます。
- 実際のファイルやシステムには影響しません。
- 通知内容やタイミングは完全にランダム生成されます。
- ログは ~/.os_fake_legendary_item_drop_alert.log に保存されます。

# 参考資料
- references/design_notes.md を参照
- 公式API: https://docs.python.org/3/library/random.html, https://pypi.org/project/plyer/

scripts/legendary_item_drop.py

import random
import argparse
import sys
import os
import time
from datetime import datetime

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

LOG_PATH = os.path.expanduser('~/.os_fake_legendary_item_drop_alert.log')

LEGENDARY_ITEMS = [
    '伝説のスペースキー(+5)',
    '未鑑定のUSBメモリ',
    '古代のタブキー(発掘済)',
    '神話級NumLockボタン',
    '謎のマウスホイール',
    'バグ封じのCtrlキー',
    'OSの守護者ドングル',
    '時空を超えたF5キー',
    'エンジニアの涙入りSDカード',
    '未知のBluetoothアダプタ',
    '伝説のCapsLockキー(+3)',
    '神話の電源ボタン',
    '謎のPCリセットスイッチ',
    '古文書化したREADME.txt',
    '未発見のAltキー'
]

RARITIES = [
    ('コモン', '通常'),
    ('レア', '珍しい'),
    ('伝説', '非常に珍しい'),
    ('神話級', '超激レア')
]

EFFECTS = [
    'タイプミス抑制率+20%',
    'コード整形力+10',
    'バグ発生率-5%',
    '集中力持続+15分',
    'CPU温度-2℃',
    '未鑑定',
    '起動速度+3%',
    '謎の安心感',
    'デバッグ力+7',
    '使用未確認',
    'クラッシュ耐性+1',
    'やる気+5',
    '未知の効果',
    'エラー通知無効化'
]


def generate_drop():
    item = random.choice(LEGENDARY_ITEMS)
    rarity, rarity_desc = random.choice(RARITIES)
    effect = random.choice(EFFECTS)
    lines = [
        '[OS伝説アイテムドロップ通知]',
        f'{item}を拾いました!',
        f'レアリティ: {rarity}',
        f'効果: {effect}'
    ]
    return '\n'.join(lines)


def send_notification(title, message):
    if PLYER_AVAILABLE:
        try:
            notification.notify(
                title=title,
                message=message,
                timeout=6
            )
        except Exception as e:
            print(f'[通知失敗] {e}', file=sys.stderr)
    else:
        # Fallback: print to terminal
        print(f'{title}\n{message}')


def log_drop(message):
    try:
        with open(LOG_PATH, 'a', encoding='utf-8') as f:
            f.write(f'[{datetime.now().isoformat()}]\n{message}\n\n')
    except Exception as e:
        print(f'[ログ書込失敗] {e}', file=sys.stderr)


def list_logs():
    if not os.path.exists(LOG_PATH):
        print('まだドロップ履歴はありません。')
        return
    with open(LOG_PATH, 'r', encoding='utf-8') as f:
        print(f.read())

def summary_logs():
    if not os.path.exists(LOG_PATH):
        print('まだドロップ履歴はありません。')
        return
    rarity_count = {r[0]: 0 for r in RARITIES}
    total = 0
    with open(LOG_PATH, 'r', encoding='utf-8') as f:
        for line in f:
            for rarity, _ in RARITIES:
                if f'レアリティ: {rarity}' in line:
                    rarity_count[rarity] += 1
                    total += 1
    print(f'合計ドロップ数: {total}')
    for rarity in rarity_count:
        print(f'{rarity}: {rarity_count[rarity]}')


def main():
    parser = argparse.ArgumentParser(description='OS伝説アイテムドロップ通知スキル')
    subparsers = parser.add_subparsers(dest='command', help='サブコマンド')

    drop_parser = subparsers.add_parser('drop', help='伝説アイテムドロップ通知を即時発動')
    list_parser = subparsers.add_parser('list', help='過去のドロップ履歴を表示')
    summary_parser = subparsers.add_parser('summary', help='ドロップ履歴のサマリーを表示')
    auto_parser = subparsers.add_parser('auto', help='一定間隔で自動ドロップ通知 (Ctrl+Cで停止)')
    auto_parser.add_argument('--interval', type=int, default=1800, help='通知間隔[秒] (デフォルト: 1800)')

    args = parser.parse_args()

    if args.command == 'drop' or args.command is None:
        message = generate_drop()
        send_notification('OS伝説アイテムドロップ通知', message)
        log_drop(message)
    elif args.command == 'list':
        list_logs()
    elif args.command == 'summary':
        summary_logs()
    elif args.command == 'auto':
        print('自動ドロップ通知を開始します。Ctrl+Cで停止。')
        try:
            while True:
                message = generate_drop()
                send_notification('OS伝説アイテムドロップ通知', message)
                log_drop(message)
                time.sleep(args.interval)
        except KeyboardInterrupt:
            print('\n自動通知を停止しました。')
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中のユーザーに「意味不明な伝説アイテムドロップ通知」を演出することで、日常の単調な作業やコーディングにユーモアとちょっとした刺激を与えることを目的としています。現実世界のガチャ的なワクワク感を、デスクトップやターミナルに再現します。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- plyer通知API: https://plyer.readthedocs.io/en/latest/

# 利用例
- 長時間のコーディングやドキュメント作成時の気分転換
- チームでのリモートワーク雑談ネタ
- 明示的に `/os-fake-legendary-item-drop-alert` で即時発動も可能

# 注意点
- 通知内容は完全に架空で、実際のシステムやファイルには一切影響しません。
- ログはユーザーのホームディレクトリ直下に保存されます。
- plyerがインストールされていない場合はターミナル出力のみ対応します。

# 設計方針
- 実在APIのみ使用し、外部依存は最小限(plyerのみ)
- 通知頻度はデフォルトで作業妨害にならない程度(1時間1-2回)
- ログ・サマリー機能も備え、ユーザーが過去の「ドロップ」を振り返ることができます。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-fake-legendary-item-drop-alert .claude/skills/os-fake-legendary-item-drop-alert

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

3. ファイル配置確認

ls .claude/skills/os-fake-legendary-item-drop-alert
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/os-fake-legendary-item-drop-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 を取りたい
  • 作業に遊びやリフレッシュが欲しいとき: 単調なAI coding workflowの合間に、伝説アイテム通知で一息入れたい

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

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

  • 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 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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