Claude Codeでオフィスの緊張感と笑いを生み出す通知演出の作り方

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

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

Claude Code を日々使っていると、AI coding workflow の中で意外な「緊張感の欠如」や「作業のマンネリ化」を感じる瞬間があります。特に長時間の session や単調な repository 作業が続くと、集中力が持続しづらく、気分転換のタイミングも掴みづらいものです。そんな時、ふとした演出や通知がワークフローにスパイスを加えてくれることがあります。

  • 集中している最中に、突然「OSからの謎の再起動通知」が来たら一瞬ドキッとするが、すぐにネタだと分かって笑えてしまう
  • 同僚やチームメンバーと repository を共有しているとき、意図せず誰かの画面に「重要なお知らせ: 5分後に再起動します」などの通知が出て話題になる
  • 長時間の coding session で context が stale になりがちな時、強制的に workflow をリセットするきっかけが欲しい
  • onboarding や新しい directory での作業時、ちょっとした演出で場の空気を和らげたい
  • 「通知・演出・OS連携」系の Skill を探しているが、実用性だけでなく遊び心も欲しい

こうしたシーンで、ただの通知ではなく「ネタ感のある疑似OS再起動通知」が突如現れることで、チームや個人の気分転換・話題作り・workflowのリズム調整に役立つ場面が増えています。

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

一言サマリ: このスキルは、作業中に“謎のOS再起動通知”をランダムにデスクトップ表示し、緊張感と脱力感を絶妙に演出する Skill。

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

  • 単調になりがちな AI coding workflow に、突発的なイベント感や話題性を加えられる(Claude Code の context にスパイス)
  • repository understanding や path management で煮詰まった時、強制的な気分転換やチームのアイスブレイクができる
  • onboarding や新規 session 開始時に、堅苦しさを和らげて場の雰囲気を和やかにできる
  • 長時間の long context 作業で stale context を感じた時、リセットやリフレッシュのきっかけを作れる
  • Skill のカスタマイズにより、通知タイミングや内容を柔軟に調整できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-system-reboot-notifier .claude/skills/random-os-fake-system-reboot-notifier

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /random-os-fake-system-reboot-notifier
> セッション開始時に雰囲気を変えたい

[通知] 重要なお知らせ:5分後にシステムは謎の理由で再起動します
理由:カーネルの気まぐれ

[通知] システム管理者からの追加メッセージ:
「再起動は気分次第です。作業の保存をおすすめします。」

(実際には何も起こりません)

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


> packages/core から packages/ui に移動したタイミングで

[通知] システム再起動予定:あと2分
理由:/packages/ui ディレクトリで未知の現象を検出

[通知] ご安心ください。これはテスト通知です。

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


> ちょっと息抜きしたい

[通知] 重大:システムは1分後に再起動します。
理由:AIが退屈を感知しました

[通知] 再起動は冗談です。作業を続けてください。

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-system-reboot-notifier) と暗黙発動 (「再起動通知を出して」などの記述) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-system-reboot-notifier/
├── SKILL.md
├── scripts/
│   └── random_os_fake_system_reboot_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-system-reboot-notifier
description: 作業中のユーザーに対し、"再起動"や"システムメンテナンス"などのOS風ジョーク通知をランダムなタイミング・内容で表示したいときに発動。通知・演出・集中力テストなどのキーワードでトリガー。
---

# 機能概要
このSkillは、作業中のPCに“謎のOS再起動予告”をデスクトップ通知で表示します。通知内容は毎回ランダムに生成され、例えば「重要なお知らせ:5分後にシステムは謎の理由で再起動します」「理由:カーネルの気まぐれ」など、実害のないジョークメッセージが突然現れます。これにより、オフィスやチームの雰囲気を一瞬ピリッとさせつつ、すぐに笑いを誘う演出が可能です。実際の再起動やシステム操作は一切行われません。

# 使い方
- 明示呼び出し例:`/random-os-fake-system-reboot-notifier`
- 暗黙発動キーワード例:「再起動予告」「OSジョーク通知」「システムメンテナンス風通知」などが会話に含まれる場合、自動でSkillが提案・発動されます。

# 出力例
```
[通知] 重要なお知らせ:5分後にシステムは謎の理由で再起動します。
理由:カーネルの気まぐれ

[通知] システムメンテナンス:7分後に自動再起動予定です。
理由:管理者の気まぐれ

[通知] 重大なアップデートのため、3分後に再起動します。
理由:宇宙線の影響
```

# 注意点
- 通知はローカルPCの通知API(Windows: Toast, macOS: terminal-notifier, Linux: notify-send等)を利用します。
- 実際の再起動やファイル操作は一切行いません。
- 通知が表示されない場合は、OSの通知設定や権限を確認してください。
- ネタ通知のため、業務システム等での誤用に注意。

# 参考資料
- references/design_notes.md
- [Python公式: plyer通知API](https://plyer.readthedocs.io/en/latest/)
- OSごとの通知仕様: Windows/Toast, macOS/terminal-notifier, Linux/notify-send

scripts/random_os_fake_system_reboot_notifier.py

import argparse
import random
import sys
import platform
import subprocess
import time
from datetime import datetime

# 通知メッセージ候補
TITLES = [
    "重要なお知らせ",
    "システムメンテナンス",
    "重大なアップデート",
    "再起動予告",
    "管理者通知",
    "自動再起動アラート"
]

REASONS = [
    "カーネルの気まぐれ",
    "管理者の気まぐれ",
    "宇宙線の影響",
    "メモリの気分転換",
    "OSが寂しがっているため",
    "謎の理由",
    "AIの独断",
    "システムの都合",
    "セキュリティ強化のため",
    "アップデートのため"
]

TIMES = [3, 5, 7, 10, 15]

LOG_FILE = "reboot_notifier.log"


def create_notification_message():
    title = random.choice(TITLES)
    minutes = random.choice(TIMES)
    reason = random.choice(REASONS)
    body = f"{minutes}分後にシステムは{reason}で再起動します。"
    reason_line = f"理由:{reason}"
    return title, body, reason_line, minutes


def send_notification(title, message, reason):
    os_name = platform.system()
    full_message = f"{message}\n{reason}"
    if os_name == "Darwin":
        try:
            subprocess.run([
                "osascript", "-e",
                f'display notification "{full_message}" with title "{title}"'
            ], check=True)
        except Exception as e:
            print(f"[ERROR] macOS通知失敗: {e}")
    elif os_name == "Windows":
        try:
            from plyer import notification
            notification.notify(
                title=title,
                message=full_message,
                app_name="FakeOSNotifier",
                timeout=10
            )
        except ImportError:
            print("[ERROR] plyerがインストールされていません。pip install plyer を実行してください。")
        except Exception as e:
            print(f"[ERROR] Windows通知失敗: {e}")
    elif os_name == "Linux":
        try:
            subprocess.run([
                "notify-send", title, full_message
            ], check=True)
        except Exception as e:
            print(f"[ERROR] Linux通知失敗: {e}")
    else:
        print(f"[WARN] 未対応OS: {os_name}")
        print(f"[通知] {title}: {full_message}")


def log_notification(title, message, reason):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(f"[{now}] {title}: {message} | {reason}\n")


def list_log():
    try:
        with open(LOG_FILE, "r", encoding="utf-8") as f:
            lines = f.readlines()
            if not lines:
                print("ログがありません。")
            else:
                for line in lines:
                    print(line.strip())
    except FileNotFoundError:
        print("ログファイルがありません。まだ通知は発行されていません。")


def summary_log():
    try:
        with open(LOG_FILE, "r", encoding="utf-8") as f:
            lines = f.readlines()
            print(f"合計通知回数: {len(lines)}")
            reasons = {}
            for line in lines:
                if "理由:" in line:
                    reason = line.split("理由:")[-1].strip()
                    reasons[reason] = reasons.get(reason, 0) + 1
            print("理由別集計:")
            for k, v in sorted(reasons.items(), key=lambda x: -x[1]):
                print(f"  {k}: {v}回")
    except FileNotFoundError:
        print("ログファイルがありません。")


def main():
    parser = argparse.ArgumentParser(description="ランダムなOS再起動ジョーク通知を表示します。")
    subparsers = parser.add_subparsers(dest="command")

    parser_notify = subparsers.add_parser("notify", help="ランダムな通知を1回表示")
    parser_notify.add_argument("--dry-run", action="store_true", help="実際に通知せず内容だけ表示")

    parser_log = subparsers.add_parser("log", help="通知履歴を表示")
    parser_summary = subparsers.add_parser("summary", help="通知履歴のサマリーを表示")

    args = parser.parse_args()

    if args.command == "notify":
        title, message, reason, _ = create_notification_message()
        if args.dry_run:
            print(f"[DRY RUN] {title}: {message}\n{reason}")
        else:
            send_notification(title, message, reason)
            log_notification(title, message, reason)
            print(f"[通知] {title}: {message}\n{reason}")
    elif args.command == "log":
        list_log()
    elif args.command == "summary":
        summary_log()
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業環境にOS風の再起動予告通知をランダムに表示することで、緊張感とユーモアを両立した演出を実現します。実際のシステム操作は一切行わず、通知APIのみを利用します。

# 公式ドキュメント抜粋
- [plyer通知API](https://plyer.readthedocs.io/en/latest/): クロスプラットフォームなPython通知ライブラリ。
- [notify-send](https://wiki.archlinux.jp/index.php/Notify-send): Linuxの標準通知コマンド。
- [osascript](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html): macOSのAppleScript通知。

# 利用例
- オフィスのアイスブレイクやチームのリフレッシュタイムに
- 開発合宿やハッカソンでのジョーク演出
- 個人の集中力テストや気分転換にも

# 注意点
- 通知が届かない場合はOSの通知設定や権限を確認してください。
- ジョーク通知のため、業務システムや重要な場面での誤用に注意。

# 設計方針
- OSごとに最適な通知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-system-reboot-notifier .claude/skills/random-os-fake-system-reboot-notifier

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-system-reboot-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 で試した検証ログは Claude Code で謎のOS再起動通知を突然出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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