Claude Code ユーザーが日常でぶつかる悩み
Claude Code を日常的に使っていると、AI coding workflow の中で「ちょっとした息抜き」や「作業の合間に笑える瞬間」が欲しくなることがあります。特に集中して repository understanding や path management をしていると、単調な作業が続き、気分転換のきっかけを見失いがちです。通知や演出系 Skill の需要も高まっていますが、実用一辺倒では面白みに欠けるという声も少なくありません。
- 長時間の session で context が膨らみ、気がつくと作業がマンネリ化している
- monorepo で directory を行き来していると、Claude Code の挙動が単調に感じる
- repository onboarding 時、作業の合間に一息つけるような「遊び」が欲しい
- 通知系 Skill は多いが、workflow に直接絡まない「ネタ系通知」が少ない
- AI coding workflow の合間に、思わず笑える非日常的な演出が欲しい
特に「通知・演出・OS連携」カテゴリでは、作業効率だけでなく、気分転換やチーム内の雰囲気作りにも寄与する Skill へのニーズが高まっています。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に突如“謎のOS失恋通知”をランダムに炸裂させ、真面目な workflow に非日常と笑いを届ける Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 長時間の Claude Code セッションや repository understanding の合間に、思わず笑える通知で気分転換できる
- monorepo や複雑な directory 構成でも、突発的なジョーク通知でオンボーディングや作業開始が和やかになる
- AI coding workflow の中に「遊び」を取り入れ、チームや個人の作業環境を柔らかく演出できる
- 通知が毎回ランダムかつシュールなので、path management の単調さを打破できる
- Skill の明示呼び出し・暗黙発動どちらにも対応し、使い方の自由度が高い
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-breakup-notifier .claude/skills/random-os-breakup-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-breakup-notifier
> 新しいリポジトリで作業を始めます
【重要なお知らせ】
あなたの愛用マウスは、ついに新しいパートナー(タッチパッド)との未来を選びました。
フォルダ: src/components/
今後は、クリックの感触にご注意ください。
(Claude Codeからの通知は以上です)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ へ移動します
【悲報】
エディタ(VSCode)がそっとあなたのもとを去りました。
新しい恋人: packages/web/utils/editor.js
理由: "もう補完しない関係でいたい"
(Claude Codeからの通知は以上です)
シーン3: お遊び的な使い方
> ちょっと気分転換したい
【ごめんね】
CtrlキーはAltキーと付き合うことにしました。
これからはショートカットも二人のものです。
(Claude Codeからの通知は以上です)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突発的なデジタル失恋通知で気分転換。集中力がリセットされる |
発動方式
明示呼び出し (/random-os-breakup-notifier) と暗黙発動 (「気分転換したい」「面白い通知が欲しい」など description マッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-breakup-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-breakup-notifier/
├── SKILL.md
├── scripts/
│ └── random_os_breakup_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_breakup_notifier.py |
random-os-breakup-notifier: デジタル失恋通知をランダムに表示 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-breakup-notifier
description: 作業中やコマンド実行時、または「失恋」「別れ」「通知」などのキーワードを含む会話やコード生成時に、突発的に“謎のOS失恋通知”を表示して場を和ませたい時に発動します。
---
# 機能概要
random-os-breakup-notifierは、作業中のデスクトップやターミナルに突如「デジタル失恋」をテーマにしたシュールな通知を表示するジョーク系スキルです。通知内容は毎回ランダムで、「あなたのマウスが新しいパートナーに乗り換えました」「CtrlキーはAltキーと付き合うことに」など、意味不明かつユーモラスなメッセージが炸裂します。真面目な作業現場に非日常を持ち込み、ちょっとした笑いとリフレッシュを提供します。
# 使い方
- 明示呼び出し例: `/random-os-breakup-notifier` を実行すると即座に通知が表示されます。
- 暗黙発動キーワード例: 「失恋」「別れ」「通知」「デスクトップ」「マウス」「エディタ」などの単語を含む会話やコード生成時に自動発動します。
- 通知は一定の間隔またはランダムなタイミングで表示されます。
# 出力例
```
[重要] あなたの愛用マウスが新しいパートナーに乗り換えました。
[悲報] エディタがそっとあなたのもとを去りました。
[ごめん] 今日からCtrlキーはAltキーと付き合うことに。
[速報] ターミナルが「距離を置きたい」と言っています。
[通知] あなたのデスクトップが他のユーザーと再起動しました。
```
# 注意点
- 本Skillはジョーク用途専用であり、実際のシステムやファイルには一切影響しません。
- 通知内容はローカルに保存されず、履歴も残りません。
- OSの通知API(macOS: osascript, Linux: notify-send, Windows: toast通知)を利用しますが、環境によっては表示されない場合があります。
- 業務や重要な作業を妨げないよう、通知頻度にはご注意ください。
# 参考資料
- references/design_notes.md に設計方針や通知APIの詳細を記載
- 公式: https://github.com/notify-send/notify-send, https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/
scripts/random_os_breakup_notifier.py
import sys
import os
import random
import time
import argparse
import platform
import subprocess
from typing import List
BREAKUP_MESSAGES = [
'[重要] あなたの愛用マウスが新しいパートナーに乗り換えました。',
'[悲報] エディタがそっとあなたのもとを去りました。',
'[ごめん] 今日からCtrlキーはAltキーと付き合うことに。',
'[速報] ターミナルが「距離を置きたい」と言っています。',
'[通知] あなたのデスクトップが他のユーザーと再起動しました。',
'[悲報] ファイルシステムがあなたをブロックしました。',
'[重要] CapsLockキーが新しい恋に落ちました。',
'[速報] ショートカットがあなたの手元から旅立ちました。',
'[ごめん] スクロールホイールはもう戻ってきません。',
'[通知] あなたのタスクバーが距離を置きたがっています。',
'[悲報] クリップボードは他のアプリを選びました。',
'[重要] あなたのUSBメモリが新しいPCに心変わりしました。',
'[ごめん] Wi-Fiはもうあなたのことを覚えていません。',
'[速報] スリープモードが永遠の眠りにつきました。',
'[通知] あなたのテーマカラーが他のユーザーのものになりました。'
]
NOTIFY_COMMANDS = {
'Darwin': lambda msg: ['osascript', '-e', f'display notification "{msg}" with title "OS失恋通知"'],
'Linux': lambda msg: ['notify-send', 'OS失恋通知', msg],
'Windows': lambda msg: [sys.executable, '-c', f'import win10toast;win10toast.ToastNotifier().show_toast("OS失恋通知", "{msg}", duration=5)']
}
DEFAULT_INTERVAL = 600
def detect_os() -> str:
return platform.system()
def show_notification(msg: str):
os_name = detect_os()
if os_name == 'Darwin':
subprocess.run(NOTIFY_COMMANDS['Darwin'](msg), check=False)
elif os_name == 'Linux':
subprocess.run(NOTIFY_COMMANDS['Linux'](msg), check=False)
elif os_name == 'Windows':
try:
import win10toast
toaster = win10toast.ToastNotifier()
toaster.show_toast("OS失恋通知", msg, duration=5)
except ImportError:
subprocess.run(NOTIFY_COMMANDS['Windows'](msg), check=False)
else:
print(msg)
def random_message() -> str:
return random.choice(BREAKUP_MESSAGES)
def notify_once():
msg = random_message()
show_notification(msg)
print(msg)
def notify_loop(interval: int, count: int):
for i in range(count):
notify_once()
if i < count - 1:
time.sleep(interval)
def list_messages():
print("--- OS失恋通知メッセージ一覧 ---")
for i, msg in enumerate(BREAKUP_MESSAGES, 1):
print(f"{i}. {msg}")
def summary():
print(f"登録済み失恋通知数: {len(BREAKUP_MESSAGES)}")
print(f"対応OS: macOS, Linux, Windows")
print(f"通知API: osascript, notify-send, win10toast")
print(f"デフォルト通知間隔: {DEFAULT_INTERVAL}秒")
def parse_args():
parser = argparse.ArgumentParser(description='random-os-breakup-notifier: デジタル失恋通知をランダムに表示')
subparsers = parser.add_subparsers(dest='command')
notify_parser = subparsers.add_parser('notify', help='今すぐ失恋通知を表示')
notify_parser.add_argument('-n', '--number', type=int, default=1, help='通知回数 (デフォルト: 1)')
notify_parser.add_argument('-i', '--interval', type=int, default=DEFAULT_INTERVAL, help='通知間隔(秒) (デフォルト: 600)')
subparsers.add_parser('list', help='登録済み失恋通知メッセージ一覧を表示')
subparsers.add_parser('summary', help='スキルの概要情報を表示')
return parser.parse_args()
def main():
args = parse_args()
if args.command == 'notify':
if args.number <= 1:
notify_once()
else:
notify_loop(args.interval, args.number)
elif args.command == 'list':
list_messages()
elif args.command == 'summary':
summary()
else:
print('コマンドを指定してください: notify, list, summary')
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
random-os-breakup-notifierは、作業中に突発的な“デジタル失恋”通知を表示することで、ユーザーにリフレッシュや笑いを提供するジョーク系スキルです。通知内容は毎回ランダムで、OSごとに最適な通知APIを利用します。
# 公式ドキュメント抜粋
- macOS: [osascript](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- Linux: [notify-send](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
- Windows: [win10toast](https://pypi.org/project/win10toast/)
# 利用例
- チームの朝会で雰囲気を和ませたい時
- 長時間のコーディングや作業中にリフレッシュしたい時
- 雑談や「失恋」「別れ」などのキーワードが出た際のネタとして
# 注意点
- 通知内容はシステムや作業に影響しません。
- 一部の環境では通知が表示されない場合があります。
- 本Skillはジョーク用途専用です。
# 設計方針
- OS判定と通知APIの自動選択
- メッセージのバリエーションとランダム性重視
- シンプルなCLI構成と明示/暗黙両対応
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/random-os-breakup-notifier .claude/skills/random-os-breakup-notifier
.claude/skills/random-os-breakup-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-breakup-notifier
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-breakup-notifier と Skill 名で出てきます。
5. 動作確認
/random-os-breakup-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
- 通知が多すぎる場合: 作業の流れを乱さないよう、頻度調整や mute 機能の設計も検討ポイント
試す前に確かめたいこと
この Skill を実運用に投入する前に確かめたい問いを並べる:
- 実 repo での token 消費は許容範囲か?
- monorepo (packages 多数) で安定して動くか?
- stale context にならず、長時間 workflow でも有効か?
- CLAUDE.md との連携設計はどうあるべきか?
- 通知内容のバリエーションとシュールさは十分か?
- 突発的なタイミングで通知が表示されるか?
- システムや他作業への干渉がないことをどう担保するか?
実際に Claude Code で試した検証ログは Claude Codeで謎のデジタル失恋通知を体験してみた にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
