Claude Codeで単調作業に謎の緊急通知を演出する仕組みの作り方

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

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

Claude Code を使っていると、集中して作業している最中にふと気が抜けたり、単調な流れに飽きてしまう瞬間が訪れることがあります。特に長時間のコーディングや、リポジトリの構造理解に没頭していると、作業空間が淡々としすぎて刺激が足りなくなることも。

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

また、通知や演出が少ないため、作業環境にちょっとした遊び心やアクセントが欲しいと感じる場面も多いのではないでしょうか。

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

一言サマリ: 作業に集中しているとSkill。

このSkillを導入することで、Claude CodeのAI coding workflowに突如として現れる“謎のOS緊急ダウンタイム告知”が、単調な作業空間に刺激と笑いをもたらします。具体的には:

  • AI coding workflow中に、フェイクの緊急OSダウンタイム通知がランダムに発動し、気分転換やリフレッシュのきっかけを作る
  • repository understandingやonboardingの最中でも、遊び心ある通知でチームの雰囲気が和らぐ
  • 長時間のsessionやmonorepo作業で context が重くなった時、突発イベントで一瞬のリセット感を演出
  • directoryやpath managementに追われる空気を、ユーモラスな通知で柔らかくする
  • Skillの明示/暗黙発動で、好きなタイミングで「謎イベント」を楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-random-fake-sudden-downtime-alert .claude/skills/os-random-fake-sudden-downtime-alert

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

このSkillを使うと、作業の合間や任意のタイミングで、思わず「何それ!?」と二度見するようなフェイクOSダウンタイム通知が飛び込んできます。

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


# /os-random-fake-sudden-downtime-alert

[緊急通知] このPCは15分後に定期メンテナンスに突入します。
理由: OSのやる気が著しく低下しています。
対策: 今すぐキーボードを褒め称えて延命処置を行ってください。

(※この通知はフェイクです。作業への影響はありません)

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


> monorepo の packages/ui/ から packages/core/ へ移動

[OS ALERT] システムが異常なディレクトリジャンプを検知しました。
緊急: repository のバランス調整のため、10分後に自動再起動します。
理由: monorepo内のパス管理がカオス状態です。
対策: "packages/core/" ディレクトリを優しく撫でてください。

(※フェイク通知です)

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


> ちょっと集中力が切れてきた時に /os-random-fake-sudden-downtime-alert

[OS 緊急情報] この端末は8分後に神秘的なダウンタイムへ突入予定です。
理由: repository understanding のオーラが薄れています。
対策: クイックコマンド "repo:cheer" で応援すると延命可。

(ご安心ください。本当にダウンタイムにはなりません)

before / after の違い

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

発動方式

明示呼び出し (/os-random-fake-sudden-downtime-alert) と、自然言語による発動条件マッチの両方に対応しています。

Skill の中身を全部見せる

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

.claude/skills/os-random-fake-sudden-downtime-alert/
├── SKILL.md
├── scripts/
│   └── os_random_fake_sudden_downtime_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/os_random_fake_sudden_downtime_alert.py os-random-fake-sudden-downtime-alert: フェイクOS緊急通知ジェネレータ
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-random-fake-sudden-downtime-alert
description: 長時間の作業や集中状態、単調なコーディングセッション中に“緊急ダウンタイム通知”の演出で気分転換や遊び心を加えたい場合に発動。明示的な /os-random-fake-sudden-downtime-alert コマンドや「ダウンタイム」「メンテ」「OS異常」などのキーワードで自動発火します。
---

# 機能概要
このSkillは、作業中のあなたに突如「OS緊急ダウンタイム告知」をランダムな内容で表示するジョーク通知演出ツールです。実際のシステムやデータには一切影響を与えず、単調な作業空間に“謎の危機感”と笑いをもたらします。通知内容は毎回ランダム生成され、「理由: OSのやる気が低下」「対策: キーボードを褒め称えて延命可能」など、思わず二度見するフェイクメッセージが炸裂。気分転換やチームのアイスブレイク、集中しすぎた時のリフレッシュに最適です。

# 使い方
明示的には `/os-random-fake-sudden-downtime-alert` コマンドで即座に通知を発動できます。暗黙的には「ダウンタイム」「メンテ」「OS異常」「システム落ちそう」などのキーワードが会話やコードコメント中に現れると自動で発火します。CLIオプションで通知頻度や表示方法(デスクトップ/ターミナル)も制御可能です。

# 出力例
```
[ALERT] 緊急: このPCは15分後に謎のメンテナンスモードへ突入します
理由: OSのやる気が著しく低下
対策: キーボードを褒め称えて延命可能
キャンセル方法: 画面に向かって「ありがとうOS」と叫ぶ
---
[ALERT] Warning: Sudden downtime scheduled in 7 minutes
Reason: Unusual cosmic ray activity detected
Mitigation: Pet your mouse gently
```

# 注意点
本Skillは完全なフェイク通知のみを生成し、実際のOSやファイルには一切変更・ダメージを与えません。通知はローカル端末上にのみ表示され、ネットワーク送信やログ保存は行いません。悪用や誤解を招く環境(本番運用サーバ等)では使用を控えてください。

# 参考資料
詳細な設計方針や通知例は references/design_notes.md を参照。Pythonの標準通知API(notify2, plyer等)やターミナル出力の演出方法については公式ドキュメント(https://docs.python.org/ja/3/library/argparse.html, https://plyer.readthedocs.io/)もご覧ください。

scripts/os_random_fake_sudden_downtime_alert.py

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

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

# --- ランダム通知テンプレート ---
REASONS = [
    'OSのやる気が著しく低下',
    '謎の宇宙線が検出されました',
    'システム内でエンジニアの悲鳴を感知',
    'メモリが突然詩的になった',
    'ファイルシステムが哲学的思考に陥った',
    'プロセスIDが自己否定を始めた',
    'カーネルが深い眠りに落ちた',
    'OSの自己肯定感が低下',
    'CPUが現実逃避',
    '未知のエラー: 42',
]

ACTIONS = [
    'キーボードを褒め称えて延命可能',
    '画面に向かって「ありがとうOS」と叫ぶ',
    'マウスを優しく撫でる',
    'コーヒーをOSのために淹れる',
    '深呼吸してPCに微笑みかける',
    '一曲歌ってみる',
    '椅子から立ち上がって拍手',
    'OSに励ましの言葉を送る',
    'USBメモリを抜き差しするフリをする',
    '何もしなくても大丈夫(たぶん)',
]

CANCELS = [
    'Ctrl+Alt+Delを唱える(効果なし)',
    'OSの気分次第',
    'キャンセル不可',
    '画面を優しくタップ',
    '「OSさん頑張って」とつぶやく',
    '再起動を想像する',
    'PCにお辞儀する',
    'キャンセル方法は不明',
    'OSが許すまで待つ',
    '運に任せる',
]

EN_MESSAGES = [
    'Warning: Sudden downtime scheduled in {min} minutes',
    'Critical: System maintenance will start in {min} minutes',
    'Alert: Spontaneous OS nap in {min} minutes',
]

EN_REASONS = [
    'Unusual cosmic ray activity detected',
    'OS motivation critically low',
    'Kernel is feeling poetic',
    'File system in existential crisis',
    'CPU is daydreaming',
]

EN_ACTIONS = [
    'Pet your mouse gently',
    'Say "Thank you, OS" to your screen',
    'Sing a song for your system',
    'Smile at your computer',
    'Take a deep breath',
]

EN_CANCELS = [
    'Cancel not possible',
    'Try rebooting in your mind',
    'Wait for OS to forgive',
    'No known workaround',
    'Offer coffee to your PC',
]

# --- 通知生成 ---
def generate_alert_message(lang='ja'):
    min_left = random.randint(3, 30)
    if lang == 'ja':
        title = f'緊急: このPCは{min_left}分後に謎のメンテナンスモードへ突入します'
        reason = f'理由: {random.choice(REASONS)}'
        action = f'対策: {random.choice(ACTIONS)}'
        cancel = f'キャンセル方法: {random.choice(CANCELS)}'
        return f'[ALERT] {title}\n{reason}\n{action}\n{cancel}'
    else:
        title = random.choice(EN_MESSAGES).format(min=min_left)
        reason = f'Reason: {random.choice(EN_REASONS)}'
        action = f'Mitigation: {random.choice(EN_ACTIONS)}'
        cancel = f'Cancel: {random.choice(EN_CANCELS)}'
        return f'[ALERT] {title}\n{reason}\n{action}\n{cancel}'

# --- 通知表示 ---
def show_desktop_notification(message, title='Fake OS Downtime Alert'):
    if PLYER_AVAILABLE:
        notification.notify(
            title=title,
            message=message,
            timeout=10
        )
    else:
        # Fallback: macOS (osascript), Linux (notify-send), Windows (print)
        plat = platform.system()
        if plat == 'Darwin':
            try:
                subprocess.run(['osascript', '-e', f'display notification "{message}" with title "{title}"'], check=True)
            except Exception:
                print(message)
        elif plat == 'Linux':
            try:
                subprocess.run(['notify-send', title, message], check=True)
            except Exception:
                print(message)
        elif plat == 'Windows':
            print(message)
        else:
            print(message)

# --- ターミナル演出 ---
def show_terminal_alert(message):
    border = '=' * 60
    print(f'\n{border}\n{message}\n{border}\n')

# --- CLIパーサ ---
def parse_args():
    parser = argparse.ArgumentParser(description='os-random-fake-sudden-downtime-alert: フェイクOS緊急通知ジェネレータ')
    parser.add_argument('--lang', choices=['ja', 'en'], default='ja', help='通知言語 (ja/en)')
    parser.add_argument('--mode', choices=['desktop', 'terminal', 'both'], default='terminal', help='通知表示方法')
    parser.add_argument('--repeat', type=int, default=1, help='通知回数 (1以上)')
    parser.add_argument('--interval', type=int, default=0, help='繰り返し時の間隔(秒)')
    parser.add_argument('--list', action='store_true', help='通知テンプレート例を一覧表示')
    return parser.parse_args()

# --- テンプレート例表示 ---
def list_templates():
    print('--- 日本語テンプレート例 ---')
    for i in range(3):
        print(generate_alert_message('ja'))
        print()
    print('--- English templates ---')
    for i in range(3):
        print(generate_alert_message('en'))
        print()

# --- メイン ---
def main():
    args = parse_args()
    if args.list:
        list_templates()
        sys.exit(0)
    for i in range(args.repeat):
        msg = generate_alert_message(args.lang)
        if args.mode in ('desktop', 'both'):
            show_desktop_notification(msg)
        if args.mode in ('terminal', 'both'):
            show_terminal_alert(msg)
        if args.repeat > 1 and i < args.repeat - 1:
            time.sleep(args.interval)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業中のユーザーに対して完全にフェイクな“OS緊急ダウンタイム通知”をランダム生成・表示することで、単調な作業空間に遊び心と軽い緊張感を提供します。実際のシステムやデータには一切影響を与えません。

# 公式ドキュメント抜粋
通知表示にはPythonの標準モジュール(subprocess, platform)や、クロスプラットフォーム通知ライブラリ plyer(https://plyer.readthedocs.io/)を利用しています。コマンドライン引数解析には argparse(https://docs.python.org/ja/3/library/argparse.html)を使用。

# 利用例
- 明示的に `/os-random-fake-sudden-downtime-alert` を呼び出し、即座にフェイク通知を表示
- 単調な作業や長時間のコーディング時に、気分転換として活用
- チームのアイスブレイクやオンライン会議での話題作り

# 注意点
本Skillは通知演出のみを目的としており、実際のOS操作やファイル変更は一切行いません。通知内容は完全に架空です。悪用や誤解を招く状況(本番環境・重要業務端末)では利用を控えてください。

# 設計方針
- 通知内容は毎回ランダム生成
- 日本語・英語両対応
- CLIで通知回数・間隔・表示方法を柔軟に制御可能
- plyerが未導入でもOS標準APIやprintでフォールバック動作

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-random-fake-sudden-downtime-alert .claude/skills/os-random-fake-sudden-downtime-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/os-random-fake-sudden-downtime-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 を取りたい
  • 単調な作業に飽きた時: フェイク通知で空気を一変させたい

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

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

  • 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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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