Claude Codeで謎の謝罪通知を演出するSkillの作り方と活用ガイド

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

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

Claude Code を使っていると、AI coding workflow のなかでつい笑いが欲しくなる瞬間があります。真面目な作業が続くと、ちょっとした演出や通知で気分転換したくなるものです。特に、OSやツールからの通知が唐突に現れると、場の空気が一瞬和むことも。ですが、現状の Claude Code では、通知や演出はあくまで実用性重視で、遊び心のあるフェイク通知などは標準で用意されていません。

  • 集中して作業している最中、突然「何もしていないのに OS が謝ってきたら面白いのに」と思う
  • リモートワークやチーム開発で、ちょっとしたネタ通知が会話のきっかけになる場面が欲しい
  • Claude Code の通知が基本的に業務連絡やエラーばかりで、遊び要素が足りない
  • 長時間の session で context や repository understanding が煮詰まってくると、気分転換するきっかけが欲しい
  • onboarding や初回説明が堅苦しくなりがち。ちょっとしたフェイク演出で和ませたい

特に「通知・演出・OS連携」カテゴリの演出が欲しいと感じるのは、こうした日常のささやかな瞬間です。

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

一言サマリ: このスキルは、作業中に完全フェイクな「謎のOS謝罪通知」をランダムに表示し、チームや自分の気分を和ませる演出を提供します。

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

  • 作業中に突然「OSが無責任に謝る」通知が現れ、緊張感や堅苦しさを和らげる
  • 通知内容が毎回ランダムなので、同じ演出に飽きることがない
  • 実際のエラーや業務進行には一切干渉せず、完全にフェイクな演出として安心して使える
  • onboarding や session 再開時のアイスブレイクに最適
  • Claude Code のAI coding workflowに、遊び心ある context や path management の「余白」を加えられる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-apology-notifier .claude/skills/random-os-apology-notifier

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

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

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


# /random-os-apology-notifier
> session スタート

[OS通知] 本日はご迷惑をおかけしております。
[OS通知] システムが一時的に不安定です。ご理解ください。
[OS通知] さきほどのコマンドは無かったことにしてください。
[Claude Code] repository 構造の再確認が完了しました。

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


> packages/core/ から packages/ui/ に移動

[OS通知] パッケージ間の遅延が発生しました。原因は不明です。
[OS通知] ご不便をおかけし申し訳ありません。引き続きお待ちください。
[Claude Code] monorepo の context 切り替えを実行しました。

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


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

[OS通知] 何もしていないのにエラーが発生しました。すみません。
[OS通知] こちらの手違いで、特に問題はありませんでした。
[Claude Code] 休憩のタイミングをおすすめします。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開。さらに OS 謝罪通知で和む
monorepo 移動 違う package のコードを参照しがち directory boundary を意識しつつ、謎の謝罪通知で場が和む
長時間 workflow long context で重要箇所が薄まる 途中でフェイク通知が入り、気分転換しやすい

発動方式

明示呼び出し (/random-os-apology-notifier) と、自然言語での description マッチ(「OSが謝ったら面白い」「ランダム通知が欲しい」など)両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-apology-notifier/
├── SKILL.md
├── scripts/
│   └── random_os_apology_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-apology-notifier
description: 作業中やコーディング時など、ユーザーが集中しているタイミングや『通知』『謝罪』『エラー』『無責任』などのキーワードが含まれる文脈で発動。明示的な /random-os-apology-notifier 呼び出しにも対応。
---

# 機能概要
このSkillは、デスクトップの通知領域に“OSが突然謝罪する”というフェイク通知をランダムに表示します。実際のエラーや業務進行には一切影響せず、作業中に不意打ちで現れることで、職場やリモート作業の雰囲気を和らげたり、話題のきっかけ作りに役立ちます。通知内容は毎回ランダムで、無責任な謝罪や意味不明なコメントが表示されます。

# 使い方
- 明示的な呼び出し例:
  `/random-os-apology-notifier`
- 暗黙発動キーワード例:
  「通知」「謝罪」「エラー」「無責任」「OSメッセージ」などが含まれる文脈で自動発動します。

# 出力例
```
[通知] 本日はご迷惑をおかけしております。
[通知] 謎の遅延が発生しましたが、原因不明です。
[通知] 大変申し訳ありませんが、さっきのコマンドは無かったことにしてください。
[通知] 予期せぬ問題が発生しましたが、詳細は不明です。
[通知] ご不便をおかけし、心よりお詫び申し上げます。
[通知] この通知は自動生成されました。ご安心ください。
```

# 注意点
- 本Skillは完全なジョーク用途です。実際のシステムエラーや業務進行には一切関与しません。
- 通知内容はローカルに保存されません。
- 通知はOSの標準通知APIを利用しますが、利用環境によっては通知が表示されない場合があります。
- 業務上の重要なアラートと混同しないようご注意ください。

# 参考資料
- [Python公式: notifications (plyer)](https://github.com/kivy/plyer)
- references/design_notes.md 参照

scripts/random_os_apology_notifier.py

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

try:
    from plyer import notification
except ImportError:
    notification = None

APOLOGY_MESSAGES = [
    "本日はご迷惑をおかけしております。",
    "謎の遅延が発生しましたが、原因不明です。",
    "大変申し訳ありませんが、さっきのコマンドは無かったことにしてください。",
    "予期せぬ問題が発生しましたが、詳細は不明です。",
    "ご不便をおかけし、心よりお詫び申し上げます。",
    "この通知は自動生成されました。ご安心ください。",
    "現在、何も問題は発生していませんが、念のため謝罪いたします。",
    "システムが一時的に自己嫌悪に陥りました。ご容赦ください。",
    "不明なエラーが発生したかもしれません。多分大丈夫です。",
    "本件については追ってご連絡…しません。ご了承ください。",
    "OSの気まぐれで通知しています。特に意味はありません。",
    "申し訳ありませんが、詳細は社内規定により非公開です。"
]

DEFAULT_INTERVAL = 600  # 10分
MIN_INTERVAL = 60       # 1分
MAX_INTERVAL = 3600     # 1時間


def send_notification(message):
    if notification is None:
        print(f"[通知] {message}")
        return
    title = "OSからのお詫び"
    notification.notify(
        title=title,
        message=message,
        app_name="random-os-apology-notifier",
        timeout=8
    )


def random_apology():
    return random.choice(APOLOGY_MESSAGES)


def notify_once():
    message = random_apology()
    send_notification(message)


def notify_loop(interval, count=None):
    sent = 0
    try:
        while count is None or sent < count:
            notify_once()
            sent += 1
            if count is not None and sent >= count:
                break
            time.sleep(interval)
    except KeyboardInterrupt:
        print("\n[INFO] 通知ループを中断しました。")


def list_messages():
    print("利用可能な謝罪メッセージ一覧:")
    for i, msg in enumerate(APOLOGY_MESSAGES, 1):
        print(f"{i:2}: {msg}")


def summary():
    print("random-os-apology-notifier の概要:")
    print(f"  メッセージ数: {len(APOLOGY_MESSAGES)}")
    print(f"  デフォルト通知間隔: {DEFAULT_INTERVAL//60}分")
    print(f"  サポートOS: Windows, macOS, Linux (plyer利用)")
    print(f"  plyerインストール済: {'Yes' if notification else 'No'}")


def main():
    parser = argparse.ArgumentParser(
        description="謎のOS謝罪通知をデスクトップに表示します。"
    )
    subparsers = parser.add_subparsers(dest="command", required=False)

    parser_once = subparsers.add_parser("once", help="1回だけ謝罪通知を表示")
    parser_loop = subparsers.add_parser("loop", help="定期的に謝罪通知を表示")
    parser_loop.add_argument("-i", "--interval", type=int, default=DEFAULT_INTERVAL,
                            help="通知間隔(秒)。デフォルト600秒(10分)")
    parser_loop.add_argument("-n", "--count", type=int, default=None,
                            help="通知回数。指定しない場合は無限ループ")
    parser_list = subparsers.add_parser("list", help="謝罪メッセージ一覧を表示")
    parser_summary = subparsers.add_parser("summary", help="Skill概要を表示")

    args = parser.parse_args()

    if args.command == "once":
        notify_once()
    elif args.command == "loop":
        interval = args.interval
        if interval < MIN_INTERVAL or interval > MAX_INTERVAL:
            print(f"[ERROR] 通知間隔は{MIN_INTERVAL}~{MAX_INTERVAL}秒で指定してください。")
            sys.exit(1)
        notify_loop(interval, args.count)
    elif args.command == "list":
        list_messages()
    elif args.command == "summary":
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
random-os-apology-notifierは、OS標準の通知API(plyer経由)を利用して、完全にフェイクな“謝罪通知”をランダムに表示します。主に職場やリモートワークの雰囲気作り、話題提供、ジョーク用途を想定しています。

# 公式ドキュメント抜粋
- plyer: https://github.com/kivy/plyer
- Python標準: argparse, random, time, threading

# 利用例
- `/random-os-apology-notifier once` で1回だけ通知
- `/random-os-apology-notifier loop -i 120 -n 5` で2分ごとに5回通知
- `/random-os-apology-notifier list` で全メッセージ表示

# 注意点
- plyerがインストールされていない場合は、標準出力にフォールバックします。
- 通知内容は完全にランダムで、実際のエラーや業務進行には影響しません。
- 通知APIの仕様上、環境によっては通知が表示されない場合があります。

# 設計方針
- シンプルで拡張性のある構成(メッセージ追加容易)
- CLIサブコマンドで柔軟な利用が可能
- 業務アラートと混同しないよう、タイトルや文面に明確な差別化

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-apology-notifier .claude/skills/random-os-apology-notifier

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-apology-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 との連携設計はどうあるべきか?
  • 通知の内容が毎回ランダムで変化し、飽きないか?
  • OSの通知領域に明確な演出として現れ、実際のエラーや業務進行に干渉しないか?

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

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

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

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

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