Claude Codeで謎の人事研修通知を演出するSkill構築手順

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

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

Claude Code を日常的に使っていると、プロジェクトの context や repository の構造把握、パス管理などで思わぬストレスを感じる瞬間が多いものです。特に長時間の AI coding workflow や複雑な monorepo 環境では、集中力が切れたタイミングや、ふとした瞬間に現実逃避したくなることも。「ちょっと休憩したい」「無機質なターミナルに少しだけ遊び心が欲しい」と感じることはありませんか。

また、通知や演出が淡泊なままだと、作業が単調になりがち。AI の context や memory が膨らみすぎて重要な情報が埋もれる時、ふいに現れる“謎の人事研修通知”のようなカオスなイベントが、むしろリフレッシュや気分転換になることもあります。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 無機質な作業空間で、ちょっとした遊び心や現実逃避のきっかけが欲しい

特に「通知・演出・OS連携」カテゴリの悩みとして、作業中に唐突に現れる“謎イベント”で気分転換できる仕掛けは、意外と求められています。

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

一言サマリ: 作業中やコマンド実行時に、“謎のOS人事研修強制参加通知”がランダムに炸裂し、現実逃避と笑いを同時に提供するSkill。

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

  • AI coding workflow の合間に、毎回異なる“人事研修”通知が現れて、単調な作業に遊び心が生まれる
  • session 再開や monorepo 操作など、集中力が切れがちなタイミングで強制的に現実から引き離される演出が入る
  • repository understanding や path management の流れに“カオスな中断”が加わり、思わず笑ってリセットできる
  • 通知内容は毎回ランダム生成されるため、長時間の利用でも飽きずに楽しめる
  • 実ファイルや repo には一切影響しない安全設計で、安心して現実逃避できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-hr-training-alert .claude/skills/random-os-fake-hr-training-alert

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

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

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


# /random-os-fake-hr-training-alert
> session start

[OS通知] 緊急: 本日14時より「謎のパワポ芸入門」研修に強制参加してください。
内容: スライド1枚で10分間喋り続ける技術を習得します。
場所: オンライン会議室 Z-42
備考: 参加しない場合、Claude Code の memory が初期化されます。

(何事もなかったかのように作業を続行できます)

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


> cd packages/core && ls

[OS通知] 重要: OS公式「無限ビデオ視聴」研修がまもなく始まります。
内容: 3時間ノンストップで社内ビデオを視聴し続けてください。
対象: packages/core ディレクトリの全開発者
注意: 途中退出は許可されません。

(以降のコマンド実行や Claude Code の context には影響なし)

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


> /random-os-fake-hr-training-alert

[OS通知] ただ今より「謎マナー講座」への参加が義務付けられました。
テーマ: “AIに敬語を使うべきか”
所要時間: 無制限
特典: 参加後、Claude Code の repository understanding レベルが1上がる(気がするだけ)

(実際の repository には何も影響しません)

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-hr-training-alert) と、自然言語での“謎の研修通知”要求など、両方のトリガーに対応しています。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-hr-training-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_hr_training_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-hr-training-alert
description: このSkillは、コマンド実行や作業中に“人事研修系”のランダムな強制通知をOSやターミナル上に演出します。発動条件は「通知」「研修」「人事」「アラート」などのキーワード検出時や、/random-os-fake-hr-training-alert 明示コマンド実行時です。
---

# 機能概要
`random-os-fake-hr-training-alert`は、作業中やコマンド実行時に、現実には絶対に体験したくない“謎の人事研修”強制参加通知をOSやターミナルにランダム表示する演出系Skillです。通知内容は毎回ランダム生成され、「本日14時より“謎のパワポ芸入門”研修必須」「OS公式“無限ビデオ視聴”研修が始まります」など、カオスな人事イベントが次々降ってきます。現実逃避と笑いを同時に提供し、作業の合間にユーモアをもたらします。

# 使い方
- 明示呼び出し: `/random-os-fake-hr-training-alert` をターミナルやSkillコマンドとして実行
- 暗黙発動: 「通知」「研修」「人事」「アラート」などのキーワードを含むコマンドや会話を検出時、自動でランダム通知が表示されます

# 出力例
```
[ALERT] 緊急:本日15:00より“謎のパワポ芸入門”人事研修に強制参加してください。
[NOTICE] 重要:OS公式“無限ビデオ視聴”研修が30分後に開始されます。
[WARNING] 今すぐ“謎マナー講座”を受講してください。
[MANDATORY] 本日中に“仮想空間での正しい座り方”研修を完了せよ。
[REMINDER] “OS人事主催:謎のチームビルディング”研修が間もなく始まります。
```

# 注意点
- 実データやファイル、システムには一切影響しません(完全な演出専用)
- 通知内容はすべて架空であり、現実の人事制度・研修とは無関係です
- ローカル保存や履歴記録は行いません
- 一部OSの通知API制約により、ターミナル上のみの表示となる場合があります

# 参考資料
詳細な設計方針や参考資料は`references/design_notes.md`を参照してください。OS通知APIは[Python公式ドキュメント](https://docs.python.org/ja/3/library/subprocess.html)や[plyer通知API](https://plyer.readthedocs.io/en/latest/)を利用しています。

scripts/random_os_fake_hr_training_alert.py

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

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

# 人事研修通知メッセージのテンプレート
NOTIFICATION_TEMPLATES = [
    "緊急:本日{hour}時より“謎のパワポ芸入門”人事研修に強制参加してください。",
    "重要:OS公式“無限ビデオ視聴”研修が{minutes}分後に開始されます。",
    "今すぐ“謎マナー講座”を受講してください。",
    "本日中に“仮想空間での正しい座り方”研修を完了せよ。",
    "“OS人事主催:謎のチームビルディング”研修が間もなく始まります。",
    "至急:新設“無限自己紹介ループ”研修にログインしてください。",
    "【強制】“AI倫理と謎の社内ルール”講座が始まります。",
    "【通知】“OS流・意味不明なマナー”研修をただちに受講してください。",
    "【アラート】“仮想背景の選び方”研修が自動的に開始されます。",
    "【必須】“謎の1on1面談”の事前動画を全員視聴してください。"
]

PREFIXES = ["[ALERT]", "[NOTICE]", "[WARNING]", "[MANDATORY]", "[REMINDER]", "[INFO]", "[HR-ALERT]", "[OS-HR]"]

KEYWORDS = ["通知", "研修", "人事", "アラート", "alert", "training", "hr"]


def generate_random_message():
    template = random.choice(NOTIFICATION_TEMPLATES)
    hour = random.randint(9, 18)
    minutes = random.choice([5, 10, 15, 20, 30, 45, 60])
    msg = template.format(hour=hour, minutes=minutes)
    prefix = random.choice(PREFIXES)
    return f"{prefix} {msg}"


def send_os_notification(title, message):
    system = platform.system()
    if PLYER_AVAILABLE:
        try:
            notification.notify(title=title, message=message, timeout=8)
            return True
        except Exception:
            pass
    # fallback: OS別通知
    if system == "Darwin":  # macOS
        script = f'display notification "{message}" with title "{title}"'
        subprocess.call(["osascript", "-e", script])
        return True
    elif system == "Linux":
        try:
            subprocess.call(["notify-send", title, message])
            return True
        except Exception:
            pass
    elif system == "Windows":
        try:
            import win10toast
            toaster = win10toast.ToastNotifier()
            toaster.show_toast(title, message, duration=8)
            return True
        except Exception:
            pass
    return False


def print_terminal_notification(message):
    border = "=" * (len(message) + 4)
    print(f"\n{border}\n| {message} |\n{border}\n")


def trigger_notification():
    msg = generate_random_message()
    title = "OS人事研修アラート"
    sent = send_os_notification(title, msg)
    if not sent:
        print_terminal_notification(msg)
    else:
        print(f"[通知] {msg}")


def detect_keywords_in_args(args):
    joined = ' '.join(args).lower()
    for kw in KEYWORDS:
        if kw.lower() in joined:
            return True
    return False


def main():
    parser = argparse.ArgumentParser(description="謎のOS人事研修アラート通知スクリプト")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="ランダムな人事研修アラートを即時発動")
    parser_alert.add_argument("--count", type=int, default=1, help="連続発動回数")

    parser_demo = subparsers.add_parser("demo", help="複数回ランダム通知をデモ表示")
    parser_demo.add_argument("--interval", type=float, default=2.0, help="通知間隔(秒)")
    parser_demo.add_argument("--times", type=int, default=5, help="通知回数")

    parser.add_argument("args", nargs=argparse.REMAINDER, help="コマンドライン引数からキーワード検出時に発動")

    args = parser.parse_args()

    if args.command == "alert":
        for _ in range(args.count):
            trigger_notification()
            time.sleep(0.8)
        return
    elif args.command == "demo":
        for _ in range(args.times):
            trigger_notification()
            time.sleep(args.interval)
        return
    # 暗黙発動: 残り引数にキーワードが含まれていれば発動
    if args.args and detect_keywords_in_args(args.args):
        trigger_notification()
        return
    # 明示呼び出し無しの場合はヘルプ表示
    parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、現実には絶対に体験したくない“謎の人事研修”イベントを、OSやターミナル上にランダム通知として演出することを目的としています。実データには一切影響せず、完全にジョーク用途です。

# 公式ドキュメント抜粋
- [Python subprocess](https://docs.python.org/ja/3/library/subprocess.html)
- [plyer通知API](https://plyer.readthedocs.io/en/latest/)
- [win10toast](https://pypi.org/project/win10toast/)

# 利用例
- `/random-os-fake-hr-training-alert alert --count 3` で3回連続通知
- `/random-os-fake-hr-training-alert demo --interval 1.5 --times 5` で1.5秒間隔で5回通知
- 任意コマンドに「研修」「通知」など含む場合、自動でランダム通知

# 注意点
- 通知内容は完全に架空です。現実の人事制度・研修とは一切関係ありません。
- OS通知APIの制約により、通知が表示されない場合はターミナル上に演出されます。
- 履歴やログは一切保存されません。

# 設計方針
- OS依存を最小限にしつつ、`plyer`や`notify-send`、`osascript`など実在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-hr-training-alert .claude/skills/random-os-fake-hr-training-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-hr-training-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
  • 通知内容マンネリ化: ランダム生成のバリエーションが少ないと飽きやすい
  • 通知の見た目: OSやターミナルへの表示が環境依存で崩れる場合あり

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 通知内容が毎回ランダムでバリエーション豊富に出るか?
  • OSやターミナルに違和感なく“人事研修系”通知が表示されるか?
  • 実データやファイルに一切影響しない安全設計になっているか?

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

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

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

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

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