Claude Codeでユーモア溢れる通知を自動化する演出Skillの作り方

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

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

Claude Code を使っていると、日々のAI coding workflowの中で「またか」と思うような小さなストレスが積み重なりがちです。特に repository understanding や path management、そして通知・演出面での“味気なさ”に悩むことも少なくありません。集中して作業したい時ほど、ちょっとした遊び心や気分転換が欲しくなる瞬間もあります。

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

また、真面目な AI コーディング作業に没頭していると、気付かぬうちに集中力が切れたり、単調な通知に飽きてしまうことも。通知・演出・OS連携の工夫が足りず、気分転換や遊び心が不足しがちです。

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

一言サマリ: このスキルは、ポモドーロタイマーの開始・終了時に、毎回ランダムな“フェイク失敗通知”をOSやターミナルに炸裂させるエンタメ演出Skill。

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

  • AI coding workflow の合間に、意味不明で笑える通知が届き、集中力がリフレッシュされる
  • 通常の通知や味気ないアラートでは得られない、repository作業中のちょっとした“遊び”や息抜きが生まれる
  • 長時間の monorepo 作業や directory 移動時でも、毎回違う context で通知が飛ぶため、単調な作業に変化が出る
  • onboarding 時や session 再開時にも、真面目な説明や context 指定だけでなく、場を和ませる演出が加わる
  • Skill の通知は実用性ゼロのトマトネタばかりなので、真面目な作業の“脱力ポイント”として機能する
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-pomodoro-failure-notifier .claude/skills/random-os-fake-pomodoro-failure-notifier

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

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

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


# /random-os-fake-pomodoro-failure-notifier
> ポモドーロタイマーを開始

[OS通知] 失敗:トマトが爆発しました。集中力の汁が飛び散っています。
[OS通知] 警告:集中力が鍋底にこびりつきました。スクレーパーで除去してください。
[ターミナル] 注意:タイマーがピザに変身したため無効です。本日の作業はイタリアン風に進行します。
(通知は毎回ランダムに1つが表示されます)

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


> packages/core/ から packages/ui/ に移動し、ポモドーロ開始

[OS通知] 失敗:repositoryのトマトが腐敗しました。新鮮なcontextが必要です。
[ターミナル] 警告:monorepo内でパスタが絡まりました。directory構造を再確認してください。
[OS通知] 注意:集中力がpackage.jsonに吸収されました。npm run focus で回復を試みてください。

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


> 今日はやる気が出ないので、Skillで遊びたい

[OS通知] 失敗:トマトの神が降臨しました。全作業が強制終了されます。
[ターミナル] 注意:タイマーがマリナーラソースで溺れています。救出は自己責任です。
[OS通知] 警告:あなたの集中力はピザ生地のように伸びきっています。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+謎の失敗通知で和む
monorepo 移動 違う package のコードを参照しがち directory boundary を意識しつつ、フェイク通知で気分転換
長時間 workflow long context で重要箇所が薄まる タイマーごとに意味不明な通知が飛び、集中力リセットのきっかけになる

発動方式

明示呼び出し (/random-os-fake-pomodoro-failure-notifier) と暗黙発動 (ポモドーロやタイマーに関するdescriptionマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-pomodoro-failure-notifier/
├── SKILL.md
├── scripts/
│   └── random_os_fake_pomodoro_failure_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-pomodoro-failure-notifier
description: Claude Codeがポモドーロタイマー開始や終了、または明示的なコマンド呼び出し(/random-os-fake-pomodoro-failure-notifier)を検知した際に発動します。triggerType: always/semantic。キーワード例: タイマー, ポモドーロ, 集中, timer start, pomodoro。
---

# 機能概要
このSkillは、ポモドーロタイマーの開始・終了時に、架空のOSから“ポモドーロ失敗”をテーマにしたフェイク通知をランダムに生成し、デスクトップやターミナルに表示します。通知内容は毎回異なり、「失敗:トマトが爆発しました」や「警告:集中力が鍋底にこびりつきました」など、実用性ゼロのユーモラスな演出で、まじめに集中したい時ほど謎の邪魔が入ります。エンタメ性重視で、作業の合間に笑いを提供します。

# 使い方
- 明示呼び出し:`/random-os-fake-pomodoro-failure-notifier start` または `end` サブコマンドで通知を発生させます。
- 暗黙発動:"ポモドーロ", "タイマー開始", "timer start", "pomodoro" などのキーワードを含む会話やコード実行時に自動で発動します。

# 出力例
```
[FakeOS Notification]
失敗: トマトが爆発しました。机の上が真っ赤です。

[FakeOS Notification]
警告: 集中力が鍋底にこびりつきました。再加熱してください。

[FakeOS Notification]
注意: タイマーがピザに変身したため無効です。

[FakeOS Notification]
エラー: ポモドーロがカプレーゼサラダになりました。
```

# 注意点
- 本Skillは実際のタイマー機能や進捗管理は行いません。
- 通知は完全なジョークであり、実用性や生産性向上は期待できません。
- ローカルファイルやシステム設定には一切変更を加えません。
- 10分程度で動作確認できる簡易設計です。

# 参考資料
詳細な設計方針や通知文例、API仕様は references/ 以下や公式Pythonドキュメント(https://docs.python.org/3/library/random.html, https://docs.python.org/3/library/subprocess.html)を参照してください。

scripts/random_os_fake_pomodoro_failure_notifier.py

import sys
import argparse
import random
import platform
import subprocess
import time

FAKE_FAILURE_MESSAGES = [
    "失敗: トマトが爆発しました。机の上が真っ赤です。",
    "警告: 集中力が鍋底にこびりつきました。再加熱してください。",
    "注意: タイマーがピザに変身したため無効です。",
    "エラー: ポモドーロがカプレーゼサラダになりました。",
    "失敗: タイマーがトマトソースに溶けました。",
    "警告: ポモドーロの種が芽を出しました。作業環境がジャングル化。",
    "注意: タイマーがスパゲッティに絡まりました。",
    "失敗: 集中力がオーブンで焦げ付きました。",
    "警告: タイマーがピザカッターに変身しました。",
    "注意: トマトの妖精がタイマーを持ち去りました。",
    "失敗: タイマーがトマト缶に閉じ込められました。",
    "警告: 集中力がパスタの茹で汁に流れました。",
    "注意: タイマーがイタリアンソースに溶解しました。",
    "失敗: ポモドーロがピザトーストになりました。",
    "警告: タイマーがトマト畑に埋まりました。",
    "注意: 集中力がトマトジュースになりました。コップをご用意ください。"
]

NOTIFY_COMMANDS = {
    'Darwin': ['osascript', '-e', 'display notification "{msg}" with title "FakeOS Notification"'],
    'Linux': ['notify-send', 'FakeOS Notification', '{msg}'],
    'Windows': None  # Windowsは標準通知APIがないためターミナル出力のみ
}

TRIGGER_KEYWORDS = [
    'pomodoro', 'ポモドーロ', 'timer', 'タイマー', '集中', 'start', 'begin', 'end', 'finish', 'スタート', '終了'
]

def select_random_message():
    return random.choice(FAKE_FAILURE_MESSAGES)

def send_notification(msg):
    system = platform.system()
    notify_cmd = NOTIFY_COMMANDS.get(system)
    if notify_cmd:
        try:
            cmd = [part.format(msg=msg) for part in notify_cmd]
            subprocess.run(cmd, check=False)
        except Exception:
            print(f"[FakeOS Notification]\n{msg}")
    else:
        print(f"[FakeOS Notification]\n{msg}")

def simulate_pomodoro_event(event_type):
    # event_type: 'start' or 'end'
    msg = select_random_message()
    send_notification(msg)
    return msg

def parse_args():
    parser = argparse.ArgumentParser(description='Random OS Fake Pomodoro Failure Notifier')
    subparsers = parser.add_subparsers(dest='command')

    start_parser = subparsers.add_parser('start', help='ポモドーロタイマー開始時のフェイク通知を発生')
    end_parser = subparsers.add_parser('end', help='ポモドーロタイマー終了時のフェイク通知を発生')
    list_parser = subparsers.add_parser('list', help='すべてのフェイク通知メッセージを表示')
    test_parser = subparsers.add_parser('test', help='全OSの通知動作をテスト')
    return parser.parse_args()

def list_messages():
    print("[FakeOS Notification メッセージ一覧]")
    for m in FAKE_FAILURE_MESSAGES:
        print(f"- {m}")

def test_notifications():
    print("[FakeOS Notification テスト開始]")
    for i in range(5):
        msg = select_random_message()
        print(f"テスト通知 {i+1}:")
        send_notification(msg)
        time.sleep(1)
    print("[テスト終了]")

def semantic_trigger(text):
    for kw in TRIGGER_KEYWORDS:
        if kw.lower() in text.lower():
            return True
    return False

def main():
    args = parse_args()
    if args.command == 'start':
        simulate_pomodoro_event('start')
    elif args.command == 'end':
        simulate_pomodoro_event('end')
    elif args.command == 'list':
        list_messages()
    elif args.command == 'test':
        test_notifications()
    else:
        # 標準入力からのトリガー判定(例: semantic trigger)
        print("標準入力からトリガーキーワードを検出します。'exit'で終了。")
        try:
            while True:
                line = input('> ')
                if line.strip().lower() == 'exit':
                    break
                if semantic_trigger(line):
                    msg = simulate_pomodoro_event('semantic')
        except KeyboardInterrupt:
            print("\n終了します。")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ポモドーロタイマーの開始・終了時に、完全にランダムかつジョーク性の高い“失敗通知”を生成し、ユーザーの集中をあえて邪魔するエンタメ体験を提供します。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- subprocess: https://docs.python.org/3/library/subprocess.html

# 利用例
- 明示的に`/random-os-fake-pomodoro-failure-notifier start`や`end`コマンドで呼び出し
- 会話やコード内で「ポモドーロ」「timer start」等のキーワードを含めることで自動発動

# 注意点
- 実際の作業進捗やタイマー管理機能はありません
- 通知内容は完全にフィクションです
- OS通知APIはMac/Linuxのみ対応、Windowsではターミナル出力のみ

# 設計方針
- 環境構築不要・データ損失リスクなし
- 10分以内で動作確認可能
- メッセージは今後追加・カスタマイズ容易な設計

導入手順

この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-pomodoro-failure-notifier .claude/skills/random-os-fake-pomodoro-failure-notifier

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-pomodoro-failure-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 との連携設計はどうあるべきか?
  • 通知がタイマー開始/終了時に毎回ランダムなネタ文で出るか?
  • 通知内容が実用性ゼロのふざけた内容になっているか?
  • 環境構築・データ損失リスクなしで10分程度で動作するか?

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

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

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

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

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