Claude Code ユーザーが日常でぶつかる悩み
Claude Code を日々使っていると、プロジェクトの規模や構造が複雑になるほど「思いがけない混乱」や「ちょっとしたストレス」に出会うことも増えてきます。特に monorepo や複数 directory を横断しながら作業していると、AI の context や path 管理のクセに振り回されがちです。集中して作業していると、ふとしたタイミングで「何か気分転換したい」「この単調さをどうにかしたい」と感じる瞬間もあるのではないでしょうか。
- Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
- monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、真面目な作業空間が続くと、ちょっとした遊び心やリフレッシュ要素が欲しくなることも。通知・演出・OS連携系の Skill による「非日常の差し込み」が、意外と良い気分転換になる場面も多いはずです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Claude Code の作業中に完全ランダムで“謎の祝福”をOS通知領域に送り、単調なAI coding workflowに笑いやリズムを生み出すSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、脈絡なく祝われることで気分転換ができる
- 長時間の repository understanding や path management の最中でも、ふとした瞬間にユーモアが差し込まれる
- onboarding や session 再開時など、緊張しがちなタイミングで場が和む
- monorepo で directory を跨ぐ際も、作業のリズムが崩れにくい
- 「また祝われるかも?」というちょっとした楽しみで、AIとのやりとりが続けやすくなる
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-notification-confetti .claude/skills/random-os-notification-confetti実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-notification-confetti
> セッション開始
[OS通知] 🎉 本日も出社おめでとうございます!
[Claude Code] CLAUDE.md の context を読み込みました。
[OS通知] 🎉 意味なく祝福します。素晴らしいディレクトリ選択です。
[Claude Code] repository understanding を開始します。
シーン2: monorepo / package 跨ぎ作業時
> cd packages/api && ls
[Claude Code] directory: packages/api に移動しました。
[OS通知] 🎉 さっきの ls、最高でした!
[Claude Code] repo structure を再取得します。
[OS通知] 🎉 祝:APIディレクトリにようこそ。理由は特にありません。
シーン3: お遊び的な使い方
> git status
[Claude Code] repository の状態を確認しました。
[OS通知] 🎉 意味もなく祝福します。git status のタイミングが秀逸です。
[Claude Code] context を更新しました。
[OS通知] 🎉 祝:今この瞬間に通知を受け取ったあなたに幸運を。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開。唐突な祝福通知で空気が和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る+祝福通知でリズムが生まれる |
| 長時間 workflow | long context で重要箇所が薄まる | 祝福通知が合間に入ることで集中力がリセットされやすい |
発動方式
明示呼び出し (/random-os-notification-confetti) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-notification-confetti/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-notification-confetti/
├── SKILL.md
├── scripts/
│ └── random_os_notification_confetti.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_notification_confetti.py |
謎のコンフェッティ祝福通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-notification-confetti
description: コマンド実行や作業の合間に、ランダムなタイミング・内容でOS標準通知領域に“ネタ系お祝いメッセージ”を表示します。通知・祝福・ランダム・気分転換・演出などのキーワードや、明示的な /random-os-notification-confetti 呼び出し時に発動します。
---
# 機能概要
このSkillは、普段の作業やコマンド実行の合間に、完全ランダムなタイミングでOSの通知領域へ“謎のコンフェッティ祝福メッセージ”を表示します。内容は「今日も出社おめでとう」「意味なく祝福します」「さっきのls、最高でした」など、全く脈絡のないネタ系お祝いばかり。作業に没頭しがちな開発現場に、唐突な非日常と笑いを提供し、気分転換やチームの雰囲気向上に役立ちます。
# 使い方
- 明示呼び出し例:
`/random-os-notification-confetti`
- 暗黙発動キーワード例:
- 「通知」「祝福」「ランダム」「気分転換」「演出」などの単語を含む会話やコマンド実行時
- 何らかのCLIコマンド(例: ls, git commit, make など)実行直後に自動発動する場合もあり
# 出力例
```
[通知] 本日も出社おめでとうございます!
[通知] さっきのls、最高でした。
[通知] 何もしてないけど祝っておきます。
[通知] 意味なく祝福します。紙吹雪!
[通知] あなたのタイピング、見事でした。
[通知] 今日の作業、すでに伝説です。
[通知] コーヒー休憩も祝福タイム!
```
# 注意点
- 通知はOSの標準通知APIを利用します(Linux: notify-send, macOS: osascript, Windows: win10toast)。
- 通知内容は完全ランダムで、意味や文脈は考慮しません。
- 通知頻度は内部で自動調整され、過剰なスパムを防ぎます。
- ローカル環境でのみ動作し、通知内容は保存されません。
- 一部の環境では通知が表示されない場合があります。
# 参考資料
- references/design_notes.md(設計方針・利用例・注意点など)
- 公式: https://specifications.freedesktop.org/notification-spec/latest/
- Python notify2, osascript, win10toast の各ドキュメント
scripts/random_os_notification_confetti.py
import sys
import os
import platform
import time
import random
import argparse
from threading import Thread
# OSごとの通知関数
def notify_linux(title, message):
try:
from subprocess import run
run(['notify-send', title, message])
except Exception as e:
print(f"[通知失敗(Linux)]: {e}")
def notify_macos(title, message):
try:
from subprocess import run
script = f'display notification "{message}" with title "{title}"'
run(['osascript', '-e', script])
except Exception as e:
print(f"[通知失敗(macOS)]: {e}")
def notify_windows(title, message):
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, message, duration=5, threaded=True)
except ImportError:
print("win10toast がインストールされていません: pip install win10toast")
except Exception as e:
print(f"[通知失敗(Windows)]: {e}")
def notify(title, message):
system = platform.system()
if system == 'Linux':
notify_linux(title, message)
elif system == 'Darwin':
notify_macos(title, message)
elif system == 'Windows':
notify_windows(title, message)
else:
print(f"[通知未対応OS]: {title} {message}")
# 祝福メッセージリスト
CONFETTI_MESSAGES = [
"本日も出社おめでとうございます!",
"さっきのls、最高でした。",
"何もしてないけど祝っておきます。",
"意味なく祝福します。紙吹雪!",
"あなたのタイピング、見事でした。",
"今日の作業、すでに伝説です。",
"コーヒー休憩も祝福タイム!",
"git commit、お疲れ様です。",
"全く脈絡なく祝います。",
"この通知に意味はありません。",
"気分転換にどうぞ!",
"謎の紙吹雪、発射!",
"あなたの努力に祝福を。",
"この瞬間を祝います。",
"ls -la、素晴らしい選択です。",
"make build、成功を祈ります。",
"今日も一日頑張りましょう!",
"何もしてなくても祝います。",
"突然の祝福に戸惑わないでください。",
"意味不明な通知ですが気にしないでください。"
]
# 通知頻度制御
MIN_INTERVAL = 120 # 秒 (2分)
MAX_INTERVAL = 900 # 秒 (15分)
# 通知スレッド
class ConfettiNotifier(Thread):
def __init__(self, once=False):
super().__init__()
self.once = once
self.running = True
def run(self):
if self.once:
send_random_notification()
return
while self.running:
wait = random.randint(MIN_INTERVAL, MAX_INTERVAL)
time.sleep(wait)
send_random_notification()
def stop(self):
self.running = False
def send_random_notification():
msg = random.choice(CONFETTI_MESSAGES)
notify("祝福の紙吹雪", msg)
print(f"[通知] {msg}")
# CLIサブコマンド
def main():
parser = argparse.ArgumentParser(description="謎のコンフェッティ祝福通知スクリプト")
subparsers = parser.add_subparsers(dest='command')
parser_once = subparsers.add_parser('once', help='1回だけ祝福通知')
parser_start = subparsers.add_parser('start', help='定期的に祝福通知')
parser_stop = subparsers.add_parser('stop', help='(ダミー)スレッド停止')
parser_list = subparsers.add_parser('list', help='祝福メッセージ一覧表示')
parser_summary = subparsers.add_parser('summary', help='祝福通知の概要表示')
args = parser.parse_args()
if args.command == 'once':
send_random_notification()
elif args.command == 'start':
print("[INFO] ランダム祝福通知を開始します (Ctrl+Cで停止)")
notifier = ConfettiNotifier()
try:
notifier.start()
while notifier.is_alive():
notifier.join(1)
except KeyboardInterrupt:
notifier.stop()
print("[INFO] 通知スレッドを停止しました")
elif args.command == 'stop':
print("[INFO] stopコマンドはダミーです。Ctrl+Cで停止してください。")
elif args.command == 'list':
print("== 祝福メッセージ一覧 ==")
for i, msg in enumerate(CONFETTI_MESSAGES, 1):
print(f"{i:2d}: {msg}")
elif args.command == 'summary':
print("== random-os-notification-confetti 概要 ==")
print(f"登録祝福数: {len(CONFETTI_MESSAGES)}")
print(f"通知間隔: {MIN_INTERVAL//60}-{MAX_INTERVAL//60}分")
print("OS: Linux, macOS, Windows 対応")
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、作業中にユーザーを唐突に祝福することで気分転換やユーモアを提供することを目的としています。通知内容は完全にランダムなネタ系メッセージで、作業効率や生産性への直接的な影響はありませんが、開発現場の空気を和らげる効果が期待できます。
# 公式ドキュメント抜粋
- Linux: notify-send (freedesktop.org)
- macOS: osascript (AppleScript)
- Windows: win10toast (PyPI)
# 利用例
- 長時間のコーディングやビルド作業の合間に、突如祝福されて笑いが生まれる
- チームで使うことで、通知をネタにしたコミュニケーションが活発化
# 注意点
- 通知APIはOSごとに異なり、Linuxではnotify-sendコマンド、macOSではosascript、Windowsではwin10toastを利用します。
- 一部の環境やリモートセッションでは通知が表示されない場合があります。
- 通知頻度は2分~15分のランダム間隔で自動調整され、スパム化を防ぎます。
# 設計方針
- 冗長な通知や過剰な演出を避け、適度な頻度で“忘れた頃に祝福”される体験を重視しました。
- メッセージは今後カスタマイズや追加も容易な設計です。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/random-os-notification-confetti .claude/skills/random-os-notification-confetti
.claude/skills/random-os-notification-confetti の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-notification-confetti
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-notification-confetti と Skill 名で出てきます。
5. 動作確認
/random-os-notification-confetti で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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で謎のコンフェッティ通知を楽しんでみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
