Claude Codeで職場に笑いを生むフェイクセキュリティ通知の作り方

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

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

Claude Code を日常的に使っていると、集中して作業している最中にちょっとした“間”や“遊び心”が欲しくなる瞬間があります。しかし、実際の開発現場では以下のような悩みがよく見られます。

  • 作業が単調で、集中力が途切れがちになる
  • チームの雰囲気が真面目すぎて、ちょっとした笑いが欲しい
  • 長時間の session で気分転換するタイミングが掴めない
  • onboarding やペアプロの場で、堅苦しい空気を和らげたい
  • 突然現れる通知や演出で、意図せず workflow をリフレッシュしたい

特に「通知・演出・OS連携」系のSkillが不足していると、日々のAI coding workflowが淡々と進みがち。Claude Code の context や repository understanding にも直接関係しない部分ですが、こうした遊び心が全体のモチベーション維持や長時間作業のリズム作りに意外と効いてきます。

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

一言サマリ: このスキルは、作業中に突然「謎のOSセキュリティスキャン」のフェイク通知を流し、集中力をほどよく崩して笑いとカオスを注入するSkill。

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

  • 単調なAI coding workflowの合間に、フェイク通知で場の空気を和ませられる
  • onboardingやチーム作業の最中でも、硬い雰囲気を一瞬で崩せる
  • 長時間 session の途中で、意図せず context をリフレッシュできる
  • 「未知のやる気ウイルス」などのネタ演出で、repositoryやdirectory構造の説明タイムも盛り上がる
  • Skillの明示/暗黙発動で、いつでも好きなタイミングで遊びを仕込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-security-scan .claude/skills/random-os-fake-security-scan

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

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

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


# /random-os-fake-security-scan

[OS Security Scan] システム全体の健全性チェックを開始します...
進捗: 8% - "マウスの動きが怪しいファイル" を検出
進捗: 23% - "あなたの進捗は安全です"
進捗: 41% - "未知のやる気ウイルス" を隔離しました
進捗: 77% - "repository understanding" レベル: 安全
進捗: 100% - 全ての directory で異常なし
[Scan Complete] あなたの作業環境はカオスですが安全です。

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


> monorepo の packages/analytics に移動

[OS Security Scan] 新しい directory で異常を検知しました...
進捗: 12% - "context memory" 検査中
進捗: 37% - "package boundary" を超えました
進捗: 66% - "重要なファイル: analytics/report.js" 問題なし
進捗: 100% - "monorepo" は安全ゾーン
[Scan Complete] 次の repository も油断せずに。

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


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

[OS Security Scan] 緊急チェック開始!
進捗: 19% - "Slack通知の未読" を検出
進捗: 44% - "やる気ウイルス" 感染疑惑
進捗: 81% - "AI coding workflow" 安全確認
進捗: 100% - "あなたの集中力" は一時的に保護されました
[Scan Complete] もう一度深呼吸してから作業に戻りましょう。

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-security-scan) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-security-scan/
├── SKILL.md
├── scripts/
│   └── random_os_fake_security_scan.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-security-scan
description: 作業中の『進捗』『ウイルス』『セキュリティ』『OS』『スキャン』などのキーワードを含む会話や、/random-os-fake-security-scan コマンドで明示的に呼び出された場合に発動。ネタ通知で作業の空気を一変させます。
---

# 機能概要
このSkillは、作業中のターミナルやエディタ環境に、まるで本物のOSセキュリティスキャンが始まったかのような“フェイク通知”をデスクトップ領域にポップアップ表示します。通知内容は「未知のやる気ウイルスを検出」「あなたの進捗は安全です」など完全なジョークで構成され、進捗バーや警告メッセージも毎回ランダム。職場やリモートワーク中の空気を一瞬で和ませたり、仲間を困惑させるカオスな演出に最適です。

# 使い方
明示的には `/random-os-fake-security-scan` コマンドで即時発動。暗黙的には「進捗」「ウイルス」「セキュリティ」「OS」などの単語を含む会話やコードレビュー時に自動発動します。通知はOSのネイティブ通知APIを利用し、数秒ごとに進捗率が増加する演出付きです。

# 出力例
```
[OS Security Scan] 進捗: 24% - 未知のやる気ウイルスを検出しました
[OS Security Scan] 進捗: 47% - マウスの動きが怪しい挙動を示しています
[OS Security Scan] 進捗: 68% - あなたの進捗は安全です
[OS Security Scan] 進捗: 89% - システムにカオス成分を注入中
[OS Security Scan] 進捗: 100% - 全てのファイルがジョークで保護されました
```

# 注意点
本Skillは実際のセキュリティスキャンやファイル操作は一切行いません。通知はローカル環境でのみ表示され、履歴やログは保存されません。通知API未対応の環境では動作しませんのでご注意ください。

# 参考資料
詳細な設計方針や動作例は references/design_notes.md を参照。公式ドキュメント: https://docs.python.org/3/library/subprocess.html, https://plyer.readthedocs.io/en/latest/

scripts/random_os_fake_security_scan.py

import sys
import time
import random
import argparse
from threading import Thread

try:
    from plyer import notification
except ImportError:
    print("plyer ライブラリが必要です。pip install plyer でインストールしてください。", file=sys.stderr)
    sys.exit(1)

FAKE_MESSAGES = [
    "未知のやる気ウイルスを検出しました",
    "マウスの動きが怪しい挙動を示しています",
    "あなたの進捗は安全です",
    "システムにカオス成分を注入中",
    "全ファイルをジョークで保護しました",
    "CPU温度が笑いで上昇中",
    "進捗率を水増ししています",
    "メモリに謎のやる気バグを発見",
    "ネットワークにギャグパケットを注入",
    "あなたの集中力は検疫済みです",
    "OSがダジャレモードに突入",
    "ファイルシステムが大喜利状態",
    "セキュリティ担当が困惑しています"
]

TITLE = "OS Security Scan"

class FakeScan:
    def __init__(self, duration=15, interval=2):
        self.duration = duration
        self.interval = interval
        self.progress = 0
        self.messages = random.sample(FAKE_MESSAGES, k=min(7, len(FAKE_MESSAGES)))
        self.total_steps = int(self.duration / self.interval)

    def run(self):
        for i in range(self.total_steps):
            self.progress = min(int((i / self.total_steps) * 100), 100)
            msg = self._get_message(i)
            self._notify(self.progress, msg)
            time.sleep(self.interval)
        # 終了メッセージ
        self._notify(100, "全てのファイルがジョークで保護されました")

    def _get_message(self, idx):
        if idx < len(self.messages):
            return self.messages[idx]
        return random.choice(FAKE_MESSAGES)

    def _notify(self, progress, message):
        notification.notify(
            title=f"[{TITLE}] 進捗: {progress}%",
            message=message,
            timeout=3
        )


def scan_command(args):
    duration = args.duration if args.duration else 15
    interval = args.interval if args.interval else 2
    scan = FakeScan(duration=duration, interval=interval)
    scan.run()


def list_messages(args):
    print("利用可能なフェイクメッセージ一覧:")
    for msg in FAKE_MESSAGES:
        print(f"- {msg}")


def main():
    parser = argparse.ArgumentParser(description="ランダムOSフェイクセキュリティスキャン通知スクリプト")
    subparsers = parser.add_subparsers(dest="command")

    scan_parser = subparsers.add_parser("scan", help="フェイクスキャンを実行")
    scan_parser.add_argument("--duration", type=int, help="スキャン全体の秒数 (デフォルト: 15)")
    scan_parser.add_argument("--interval", type=int, help="通知間隔秒数 (デフォルト: 2)")
    scan_parser.set_defaults(func=scan_command)

    list_parser = subparsers.add_parser("list", help="利用可能なメッセージ一覧表示")
    list_parser.set_defaults(func=list_messages)

    args = parser.parse_args()
    if hasattr(args, 'func'):
        args.func(args)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業中の緊張感を和らげるためのフェイクOSセキュリティスキャン通知をデスクトップに表示します。実際のシステム操作やファイルアクセスは行わず、完全にジョーク目的です。

# 公式ドキュメント抜粋
通知表示には Python の plyer.notification モジュールを利用しています。plyerはクロスプラットフォーム対応で、Windows/Mac/Linuxの標準通知APIを呼び出します。

# 利用例
- CLIから `python random_os_fake_security_scan.py scan --duration 20 --interval 3` で実行
- 明示コマンド `/random-os-fake-security-scan` で即時発動
- チームのリモート作業中にネタとして投入

# 注意点
通知APIが無効な場合や、仮想環境・一部のLinuxディストリビューションでは通知が表示されない場合があります。

# 設計方針
- メッセージは毎回ランダムで選択し、進捗バー演出を実装
- 実在API(plyer)のみ利用し、外部依存やシステム操作は排除
- ログや履歴は一切保存せず、ローカル通知のみ

導入手順

この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-security-scan .claude/skills/random-os-fake-security-scan

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-security-scan で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
  • 通知が作業中に自然に出現するか?
  • 進捗バーと警告内容が毎回ランダムか?
  • 明らかにフェイクと分かるネタ演出になっているか?

実際に Claude Code で試した検証ログは Claude Codeで謎のOSセキュリティスキャンを自然に出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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