Claude Codeで謎のメモリリーク通知を演出する仕組みの作り方

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

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

Claude Code を日々使っていると、AI コーディング workflow の中で思わぬ「心の隙間」ができる瞬間がある。特に repository understanding や context の管理に集中していると、ふとしたタイミングで気が緩みがち。そんな時、何かユーモラスな演出があればと感じる人も多いはずだ。

また、通知や演出系 Skill が欲しくなるのは、単なる効率化だけでなく、長時間作業のマンネリ打破や、onboarding 時のアイスブレイクとしても有効だと考えられる。以下のような悩みがよく聞かれる:

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

こうした「真面目な悩み」の合間に、思いがけないフェイク通知で気分転換できるスパイスが欲しいと感じることも少なくない。

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

一言サマリ: このスキルは、Claude Code の作業中に突如現れる「謎のOSメモリリーク警告」で、マンネリ workflow に遊び心をもたらす Skill。

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

  • AI coding workflow の合間に、ユーモラスなフェイク通知で気分転換できる
  • repository understanding や path management に没頭しすぎた時、強制的に context をリセットするきっかけになる
  • onboarding や session 再開時の「堅苦しさ」を和らげ、チーム内コミュニケーションのネタになる
  • monorepo や大規模 directory 作業時のストレスを、遊び心で緩和できる
  • 通知内容が毎回ランダムなので、飽きずに使い続けられる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-memory-leak-alert .claude/skills/random-os-fake-memory-leak-alert

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

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

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


# /random-os-fake-memory-leak-alert
> セッションを新しく始めるので、repo 構造を教えて

[ALERT] 重大: OSメモリがどこかに消えました。
[OS通知] 公式サポート: 記憶領域が流出しています。至急再起動を推奨します。

(Claude Code)
- repository: my-awesome-repo/
- main directory: src/
- package: packages/core, packages/utils

context: session start, memory state: UNKNOWN

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


> packages/feature-x/ の実装に移ります

[警告] OS公式: メモリリークが検出されました。feature-x が原因の可能性あり。
[通知] あなたのやる気メモリもリークしています。深呼吸推奨。

(Claude Code)
- directory change: packages/core/ → packages/feature-x/
- repository understanding: context updated

path management: directory boundary crossed

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


> ちょっと休憩したい

[ALERT] 注意: 仮想メモリが夢の中に流出しました。作業は一時中断されます。
[通知] OS: 本日はこれ以上の記憶保存ができません。おやすみなさい。

memory: fake leak, context: paused

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-memory-leak-alert) と暗黙発動 (「メモリ」「リーク」「やる気が消えた」などの description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-memory-leak-alert/
├── SKILL.md
├── scripts/
│   └── fake_memory_leak_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_memory_leak_alert.py 謎のOSメモリリーク警告をランダムに表示
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-memory-leak-alert
description: このSkillは、作業やコーディングに集中している最中や、/random-os-fake-memory-leak-alert コマンド実行時、または「メモリ」「リーク」「OSエラー」などのキーワードを含む会話で自動発動します。フェイクのOS風メモリリーク警告をランダムに表示し、場を和ませつつ注意を引きます。
---

# 機能概要
このSkillは、作業中のあなたに突然「謎のOSメモリリークアラート」を表示することで、日常にちょっとしたスリルと遊び心を加えます。通知内容は毎回ランダムで、深刻そうなものからユーモラスなものまで多彩。実際のシステムやメモリには一切影響を与えず、あくまでフェイク警告として動作します。集中しすぎて疲れた心に、ちょっとした息抜きや話題のきっかけを提供します。

# 使い方
- 明示呼び出し: `/random-os-fake-memory-leak-alert` を実行すると即座にフェイク通知が表示されます。
- 暗黙発動: 「メモリ」「リーク」「OSエラー」などのキーワードが会話やコマンドに含まれると、自動的にランダム通知が発動します。

# 出力例
```
[ALERT] 重大:メモリがどこかに消えました
[WARNING] OS公式:記憶領域流出中
[INFO] 注意:あなたのやる気メモリもリークしています
[CRITICAL] システムリソースが想定外の方向に流出しています
[NOTICE] メモリリーク検出ツールがバグっています(たぶん)
```

# 注意点
- 通知はすべてフェイクであり、実際のシステムやファイルには影響しません。
- ローカル保存やログ出力は行いません。
- 重要な作業中に驚かないよう、必要に応じてSkillを無効化できます。
- OSの通知機能を利用するため、環境によっては通知が表示されない場合があります。

# 参考資料
詳しい設計方針や参考リンクは references/design_notes.md を参照してください。Pythonの標準通知API(notify2, win10toast, pync等)を活用しています。

scripts/fake_memory_leak_alert.py

import sys
import random
import platform
import argparse
import time
import threading

try:
    if platform.system() == 'Darwin':
        from pync import Notifier
    elif platform.system() == 'Windows':
        from win10toast import ToastNotifier
    else:
        import notify2
except ImportError:
    pass

ALERT_MESSAGES = [
    '[ALERT] 重大:メモリがどこかに消えました',
    '[WARNING] OS公式:記憶領域流出中',
    '[INFO] 注意:あなたのやる気メモリもリークしています',
    '[CRITICAL] システムリソースが想定外の方向に流出しています',
    '[NOTICE] メモリリーク検出ツールがバグっています(たぶん)',
    '[ERROR] メモリ領域の一部がブラックホール化',
    '[ALERT] RAMの一部が異次元に転送されました',
    '[WARNING] メモリ管理プロセスが自己崩壊を開始',
    '[INFO] 仮想メモリが現実逃避中',
    '[CRITICAL] システムヒープが溢れかえっています',
    '[NOTICE] メモリリーク検出:再起動推奨(嘘です)',
    '[ALERT] OSからの緊急通知:記憶領域が蒸発しました',
    '[WARNING] メモリリークにより思考力が減少しています',
    '[INFO] メモリが勝手に解放されました',
    '[CRITICAL] メモリリークの波動を検出しました',
    '[NOTICE] メモリリーク警告:この通知はジョークです',
]

CATEGORY_MAP = {
    'ALERT': 'Critical',
    'WARNING': 'Warning',
    'INFO': 'Information',
    'CRITICAL': 'Critical',
    'NOTICE': 'Information',
    'ERROR': 'Error',
}

def send_notification(message):
    system = platform.system()
    title = 'OS Memory Leak Alert'
    # Extract category from message
    cat = 'INFO'
    for k in CATEGORY_MAP.keys():
        if message.startswith(f'[{k}]'):
            cat = k
            break
    if system == 'Darwin':
        try:
            Notifier.notify(message, title=title)
        except Exception as e:
            print(f'[通知失敗(macOS)]: {e}')
    elif system == 'Windows':
        try:
            toaster = ToastNotifier()
            toaster.show_toast(title, message, duration=5, threaded=True, icon_path=None)
        except Exception as e:
            print(f'[通知失敗(Windows)]: {e}')
    else:
        try:
            notify2.init('FakeMemoryLeakAlert')
            n = notify2.Notification(title, message)
            n.set_urgency(notify2.URGENCY_CRITICAL if cat in ['ALERT','CRITICAL','ERROR'] else notify2.URGENCY_NORMAL)
            n.show()
        except Exception as e:
            print(f'[通知失敗(Linux)]: {e}')

def random_alert():
    message = random.choice(ALERT_MESSAGES)
    send_notification(message)
    print(message)

def alert_loop(interval, count):
    for i in range(count):
        random_alert()
        if i < count-1:
            time.sleep(interval)

def list_messages():
    print('利用可能なフェイク警告一覧:')
    for msg in ALERT_MESSAGES:
        print(f'- {msg}')

def summary():
    print('random-os-fake-memory-leak-alert Skill 概要:')
    print(f'通知パターン数: {len(ALERT_MESSAGES)}')
    print('対応OS:', platform.system())
    print('通知方式: OS標準通知API')

def parse_args():
    parser = argparse.ArgumentParser(description='謎のOSメモリリーク警告をランダムに表示')
    subparsers = parser.add_subparsers(dest='command')
    parser_alert = subparsers.add_parser('alert', help='即座にランダム警告を1回表示')
    parser_loop = subparsers.add_parser('loop', help='一定間隔で複数回警告を表示')
    parser_loop.add_argument('--interval', type=int, default=10, help='通知間隔(秒)')
    parser_loop.add_argument('--count', type=int, default=3, help='通知回数')
    parser_list = subparsers.add_parser('list', help='全通知パターンを表示')
    parser_summary = subparsers.add_parser('summary', help='Skill概要を表示')
    return parser.parse_args()

def main():
    args = parse_args()
    if args.command == 'alert' or args.command is None:
        random_alert()
    elif args.command == 'loop':
        alert_loop(args.interval, args.count)
    elif args.command == 'list':
        list_messages()
    elif args.command == 'summary':
        summary()
    else:
        print('コマンドが不明です。--help を参照してください。')

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、OSの標準通知APIを利用して、完全にフェイクなメモリリーク警告をランダムに表示することで、作業中のユーザーに遊び心と注意喚起を提供します。実際のシステムやファイルには一切影響を与えません。

# 公式ドキュメント抜粋
- notify2 (Linux): https://github.com/caronc/apprise
- win10toast (Windows): https://github.com/jithurjacob/Windows-10-Toast-Notifications
- pync (macOS): https://github.com/SeTeM/pync

# 利用例
- 長時間のコーディングや集中作業中に、息抜きとしてフェイク警告を表示
- チーム内での話題作りや、仮想的な障害訓練の演出に

# 注意点
- 通知内容は完全なジョークです。実害や副作用はありません。
- OSの通知機能が無効な環境では表示されません。
- 重要な作業中に驚かせたくない場合はSkillを一時的に無効化してください。

# 設計方針
- 実在APIのみを使用し、外部に危険な処理やファイル操作を行わない
- 導入・削除が容易で、通常作業への影響がない
- 通知メッセージは毎回ランダムで、遊び心を重視

導入手順

この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-memory-leak-alert .claude/skills/random-os-fake-memory-leak-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-memory-leak-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 を取りたい
  • 気分転換したい時: フェイク通知で 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をコピーしました!
目次