Claude Codeで仕事中の意外な演出通知を実現する作り方ガイド

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

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

Claude Code を使っていると、AI coding workflow の中で「集中していたのに、ふとした瞬間に息抜きが欲しくなる」「作業の合間にちょっとした気分転換が欲しい」と感じることが多いものです。特に、長い session や大規模な repository (monorepo) を扱うと、context の管理や path management に追われて無機質な作業感が増し、オンボーディングの初期や directory 構造の説明に時間を取られることも。「AI と会話しているのに、どこか人間味や遊び心が足りない」と感じた経験はありませんか。

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

こうした真面目な悩みの合間に、ふとした“不可解な演出”が入ることで、作業のリズムや気分が意外と変わることも。通知・演出・OS連携系の Skill で、ちょっとしたサプライズを求める声も増えています。

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

一言サマリ: あなたが作業に没頭しているとSkill。

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

  • 作業中に突如「OSの人格が変わった」風の謎通知が現れ、思わず二度見したくなる演出が加わる
  • 長時間の AI coding workflow や repository understanding の合間に、シュールな息抜きが自動で差し込まれる
  • monorepo や複雑な directory 構造を扱う中で、意図しないタイミングで現れる通知が場を和ませる
  • onboarding や session 再開時の堅苦しさを和らげ、AIとのやりとりに人間味や遊び心をプラスできる
  • Skill を入れるだけで、通常の path management や context 管理に加え、ちょっとしたサプライズが日常的に発生する
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-sentiment-shift-alert .claude/skills/random-os-sentiment-shift-alert

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

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

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


# /random-os-sentiment-shift-alert

[通知] 本日より「ツンデレモード」に切り替わりました。以後、すべての案内が若干刺々しくなりますが、気にしないでください。
- 対象ディレクトリ: /src/app, /src/utils, /docs
- 変更点: 特にありません。通知だけです。
備考: Claude Code の context や repository understanding には一切影響しません。

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


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

[OS通知] ご注意ください。本セッションより「詩人モード」に移行します。
今後の案内はすべて五七五調でお届けします。
- 影響範囲: packages/core, packages/ui, shared/
- path management や memory には何も影響しません。

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


> /random-os-sentiment-shift-alert

[警告] OSが「やたら上から目線モード」に突入しました。
以後、全ての説明が偉そうになります。お覚悟を。
- repository: my-monorepo
- directory: /api, /frontend, /infra
- Claude Code の AI coding workflow には一切影響しません。

before / after の違い

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

発動方式

明示呼び出し (/random-os-sentiment-shift-alert) と暗黙発動 (説明文やタイミングに応じて自動) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-sentiment-shift-alert/
├── SKILL.md
├── scripts/
│   └── random_os_sentiment_shift_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-sentiment-shift-alert
description: 作業中やコーディング時、"人格が変わった"かのようなランダムなOS通知を表示し、ユーザーの集中をユーモラスに中断します。明示呼び出し(/random-os-sentiment-shift-alert)や「通知」「キャラ変」などのキーワード出現時に発動します。
---

# 機能概要
このSkillは、OSの人格が突如変化したかのようなシュールな通知をデスクトップにランダム表示します。例えば「本日よりツンデレモードです」や「しばらく詩人になります」など、実際には何も変わらないにも関わらず、OSのキャラ設定が急変した旨を本気で宣言します。作業に没頭しているとき、不意打ちで現れる不可解な通知が、日常の単調さを和らげ、思わず笑ってしまう体験を提供します。

# 使い方
- 明示的な呼び出し: `/random-os-sentiment-shift-alert`
- 暗黙発動キーワード例: 「通知」「キャラ変」「人格変化」「OSの気分」「モード切替」などが会話やコードコメントに含まれると自動発動します。

# 出力例
```terminal
[通知] OSキャラ変更のお知らせ
本日よりツンデレモードでご案内します。ご理解とご協力をお願いします。

[通知] システム人格切替
しばらく詩人になります。操作は五七五でお願いします。

[通知] OSより
今からやたら上から目線で案内します。ついてこれますか?

[通知] キャラ設定変更
本日より「やる気ゼロ」モードです。指示は控えめに。
```

# 注意点
- 通知は実際のOS設定や作業内容に一切影響しません。
- 通知内容は毎回ランダム生成されますが、実際のシステム動作は変化しません。
- 通知履歴はローカル保存されません。
- macOS/Linuxのnotify-sendやosascriptなど、標準的な通知APIを利用しています。

# 参考資料
- references/design_notes.md
- https://docs.python.org/3/library/subprocess.html
- https://developer.apple.com/documentation/usernotifications

scripts/random_os_sentiment_shift_alert.py

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

SENTIMENTS = [
    "本日よりツンデレモードです。ご理解とご協力をお願いします。",
    "しばらく詩人になります。操作は五七五でお願いします。",
    "今からやたら上から目線で案内します。ついてこれますか?",
    "本日より『やる気ゼロ』モードです。指示は控えめに。",
    "OSが反抗期に入りました。命令は一度だけ聞きます。",
    "これからしばらく猫かぶります。優しくしてください。",
    "本日よりギャル語モードに切り替えます。よろしくぅ~!",
    "しばらくポエマーになります。心で操作してください。",
    "OSが哲学者モードになりました。すべての問いに問いで返します。",
    "本日より昭和の親父キャラでご案内します。文句あるか?",
    "これからしばらく無口になります。通知も控えめに。",
    "OSがやたら褒めてくるモードになりました。何をしても偉いです。",
    "これよりツッコミ担当に徹します。ボケたら拾います。",
    "本日より関西弁で案内します。ついてきてや!",
    "OSが厨二病モードに突入しました。闇の力を解放します。"
]

TITLE_CHOICES = [
    "[通知] OSキャラ変更のお知らせ",
    "[通知] システム人格切替",
    "[通知] OSより",
    "[通知] キャラ設定変更",
    "[通知] システムからのご案内"
]

HISTORY = []


def notify(title, message):
    system = platform.system()
    try:
        if system == "Darwin":  # macOS
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(["osascript", "-e", script], check=True)
        elif system == "Linux":
            subprocess.run(["notify-send", title, message], check=True)
        elif system == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(title, message, duration=5)
            except ImportError:
                print("win10toastがインストールされていません。pip install win10toast で導入してください。")
                print(f"{title}\n{message}")
        else:
            print(f"{title}\n{message}")
    except Exception as e:
        print(f"通知送信エラー: {e}")
        print(f"{title}\n{message}")


def random_sentiment():
    title = random.choice(TITLE_CHOICES)
    message = random.choice(SENTIMENTS)
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    HISTORY.append({"timestamp": timestamp, "title": title, "message": message})
    return title, message


def show_history():
    if not HISTORY:
        print("通知履歴はありません。")
        return
    for item in HISTORY:
        print(f"[{item['timestamp']}] {item['title']}\n{item['message']}\n")


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="通知回数 (デフォルト1)")

    parser_history = subparsers.add_parser("history", help="このセッションの通知履歴を表示")

    args = parser.parse_args()

    if args.command == "alert":
        for _ in range(args.count):
            title, message = random_sentiment()
            notify(title, message)
    elif args.command == "history":
        show_history()
    else:
        # デフォルト動作: 1回通知
        title, message = random_sentiment()
        notify(title, message)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、OS通知APIを利用してユーザーの作業中にランダムな人格変化メッセージを表示し、ユーモラスな演出を提供します。実際の設定や作業には一切影響を与えません。

# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- macOS通知: https://developer.apple.com/documentation/usernotifications
- Linux notify-send: https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html
- Windows win10toast: https://pypi.org/project/win10toast/

# 利用例
- コーディングやドキュメント作成中に、明示的に `/random-os-sentiment-shift-alert` を呼び出す
- 「キャラ変」などのキーワードが登場した際に自動発動

# 注意点
- 通知はセッション内のみ履歴管理。ファイル保存やシステム設定変更は一切なし。
- Windowsで通知を利用する場合は win10toast のインストールが必要です。

# 設計方針
- シュールかつ多様な通知内容を維持し、繰り返し利用しても飽きにくい構成としています。
- 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-sentiment-shift-alert .claude/skills/random-os-sentiment-shift-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-sentiment-shift-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をコピーしました!
目次