Claude Code ユーザーが日常でぶつかる悩み
日々Claude Codeを使っていると、集中したいタイミングで思わず「息抜きがほしい」と感じる瞬間が誰しもあるものです。特にリポジトリの構造把握や context の管理に追われていると、単調な作業に没頭しすぎてリフレッシュの機会を逃しがちです。そんな時、ふとした演出や通知で気分転換できたら…という思いは多くの開発者に共通しています。
- 長時間の作業で workflow がマンネリ化し、集中力が途切れがち
- Claude Code の context 管理や path 指定に追われて、気づけば数時間経過している
- repository 理解や directory 構造の再説明など、頭を使うタスクが続きリラックスできない
- monorepo で package を跨いだ瞬間に context が切り替わり、気持ちの切り替えが追いつかない
- OSやツールからの通知がすべて「仕事」関連で、遊び心や余白がない
こうした「通知・演出・OS連携」にまつわる小さなストレスは、積み重なると作業効率やモチベーションにも影響します。Claude Code のAI coding workflowを快適に保つには、時に“何も起きない”日常にちょっとしたスパイスが必要です。
この Skill が一言でいうと何を解決するか
一言サマリ: 作業中に突如“謎のOS公式休日発表”がデスクトップ通知で現れますSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- マンネリ化したAI coding workflowに、突発的な“休日宣言”通知でリフレッシュ効果をもたらす
- repository understandingや長時間 session の合間に、ユーモラスな演出で集中力をリセットできる
- monorepoや複雑な directory 構造に没頭しすぎた時、強制的に“休憩”を促してくれる
- 通知内容が毎回 context に依存せず完全ランダムなので、予測できないサプライズを楽しめる
- OSやClaude Codeの通常通知と違い、業務に影響を与えず遊び心だけを提供する
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/os-fake-holiday-announcer .claude/skills/os-fake-holiday-announcer実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /os-fake-holiday-announcer
> 今日から新しいタスクを始めたい
[OS通知] 公式発表: 本日は「バグ記念日」につき全業務停止となります。
全エンジニアは速やかにコーヒータイムへ移行してください。
(この通知に従う義務はありません)
Claude Code: repository context の読み込みを一時停止...しません。
シーン2: monorepo / package 跨ぎ作業時
> packages/core-utils/ から packages/frontend/ に移動
[OS通知] 緊急速報: システム都合により午後は強制昼寝タイムとなりました。
対象: /packages/frontend/ ディレクトリ配下の全ファイル
理由: monorepo の境界を越えたため
Claude Code: directory 構造の再スキャンを続行中...
シーン3: お遊び的な使い方
> 今日はやる気が出ません。何か面白いことない?
[OS通知] お知らせ: OSが自主休暇を宣言しました。
理由: 開発者のやる気レベル低下を検知
推奨: 画面を閉じて好きなだけ現実逃避してください
Claude Code: repository understanding を一時的にお休み中...(嘘です)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突発的な“休日通知”で作業の区切り・リフレッシュのきっかけが生まれる |
発動方式
明示呼び出し (/os-fake-holiday-announcer) と暗黙発動 (自然言語で「今日は休みたい」「集中力が切れた」など) の両方に対応。
Skill の中身を全部見せる
.claude/skills/os-fake-holiday-announcer/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/os-fake-holiday-announcer/
├── SKILL.md
├── scripts/
│ └── os_fake_holiday_announcer.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_fake_holiday_announcer.py |
OS Fake Holiday Announcer |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-holiday-announcer
description: 長時間のコーディングや単調作業、集中力が切れがちなタイミングで突如“OS公式の架空休日”をデスクトップ通知で演出します。trigger: always/semantic。明示呼び出しは /os-fake-holiday-announcer。
---
# 機能概要
このSkillは、日々の開発や作業に追われるエンジニアのために、架空の“OS公式休日”をデスクトップ通知で突然お知らせします。通知内容は「本日はバグ記念日につき全業務停止」「緊急:OSが自主休暇を宣言しました」など、現実には存在しないユーモラスな休暇宣言。作業の合間に一瞬の現実逃避や笑いを提供し、マンネリ化したルーチン作業に意外性と遊び心を加えます。
# 使い方
- 明示呼び出し: `/os-fake-holiday-announcer` を実行すると即座に通知が表示されます。
- 暗黙発動: 「疲れた」「休みたい」「集中力が切れた」などのキーワードが会話やログに現れると自動発動します。
- 通知は1時間に1回以下の頻度で表示され、過剰な割り込みを防ぎます。
# 出力例
```
[通知] 本日は「バグ記念日」につき、全業務停止となります。ご理解のほどお願いいたします。
[通知] 緊急:OSが自主休暇を宣言しました。全プロセスはしばらくお休みします。
[通知] システム都合により午後は強制昼寝タイムです。
[通知] 本日は「メモリ解放記念日」。作業は後回しにしましょう。
[通知] OS公式:今日は再起動推奨日。全員で休憩しましょう。
```
# 注意点
- 通知はデスクトップ上に表示されるのみで、実際の作業やファイルには一切影響しません。
- ログや履歴はローカルに保存されますが、個人情報や機密データは扱いません。
- 通知頻度は設定可能ですが、過剰な連続通知は自動的に制限されます。
# 参考資料
- [notify2公式ドキュメント](https://pypi.org/project/notify2/)
- references/design_notes.md も参照してください。
scripts/os_fake_holiday_announcer.py
import sys
import os
import json
import random
import argparse
import time
from datetime import datetime, timedelta
try:
import notify2
except ImportError:
print('notify2がインストールされていません。\nインストール: pip install notify2')
sys.exit(1)
HOLIDAY_MESSAGES = [
'本日は「バグ記念日」につき、全業務停止となります。ご理解のほどお願いいたします。',
'緊急:OSが自主休暇を宣言しました。全プロセスはしばらくお休みします。',
'システム都合により午後は強制昼寝タイムです。',
'本日は「メモリ解放記念日」。作業は後回しにしましょう。',
'OS公式:今日は再起動推奨日。全員で休憩しましょう。',
'本日限定:カーネルアップデート記念休暇。',
'今日は「プロセス停止感謝の日」。業務は一時中断です。',
'緊急速報:OSが勝手に祝日を制定しました。',
'本日は「ファイルシステム点検日」につき、作業はお休みです。',
'OS公式:午後は強制コーヒーブレイクタイムとなります。',
'今日は「バッファ解放感謝祭」。何もせずに過ごしましょう。',
'システム都合:本日は全ユーザー休暇です。',
'本日は「クラッシュ防止祈願日」です。作業は控えめに。',
'OS公式:本日は「仮想メモリ記念日」。全プロセスはお休みです。',
'今日は「シグナル無視デー」。通知以外は気にしないでください。'
]
LOG_FILE = os.path.expanduser('~/.os_fake_holiday_announcer_log.json')
MAX_NOTIFY_PER_HOUR = 1
def load_log():
if not os.path.exists(LOG_FILE):
return []
try:
with open(LOG_FILE, 'r') as f:
return json.load(f)
except Exception:
return []
def save_log(log):
try:
with open(LOG_FILE, 'w') as f:
json.dump(log, f, ensure_ascii=False, indent=2)
except Exception as e:
print('ログ保存に失敗:', e)
def can_notify(log):
now = datetime.now()
one_hour_ago = now - timedelta(hours=1)
recent = [l for l in log if datetime.fromisoformat(l['timestamp']) > one_hour_ago]
return len(recent) < MAX_NOTIFY_PER_HOUR
def send_notification(message):
notify2.init('OS Fake Holiday Announcer')
n = notify2.Notification('OS公式 休暇宣言', message)
n.set_urgency(notify2.URGENCY_NORMAL)
n.set_timeout(10000)
n.show()
def log_event(message):
log = load_log()
entry = {
'timestamp': datetime.now().isoformat(),
'message': message
}
log.append(entry)
save_log(log)
def random_message():
return random.choice(HOLIDAY_MESSAGES)
def list_log():
log = load_log()
if not log:
print('ログはありません。')
return
for entry in log[-20:]:
print(f"{entry['timestamp']} : {entry['message']}")
def summary_log():
log = load_log()
print(f'通知回数: {len(log)}')
if log:
print('最新通知:')
print(f"{log[-1]['timestamp']} : {log[-1]['message']}")
def main():
parser = argparse.ArgumentParser(description='OS Fake Holiday Announcer')
subparsers = parser.add_subparsers(dest='command', required=False)
parser_log = subparsers.add_parser('log', help='通知履歴を表示')
parser_summary = subparsers.add_parser('summary', help='通知履歴のサマリー')
parser_notify = subparsers.add_parser('notify', help='即座に通知を表示')
args = parser.parse_args()
if args.command == 'log':
list_log()
elif args.command == 'summary':
summary_log()
else:
log = load_log()
if can_notify(log):
msg = random_message()
send_notification(msg)
log_event(msg)
print(f'[通知] {msg}')
else:
print('1時間以内に既に通知済みです。')
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発者の作業環境に突如“OS公式の架空休日”を通知することで、作業の合間に遊び心とリフレッシュを提供します。現実の業務やファイルには一切影響しない安全設計です。
# 公式ドキュメント抜粋
通知表示にはPythonのnotify2ライブラリ([公式PyPI](https://pypi.org/project/notify2/))を利用しています。Linux系デスクトップ環境で標準的に動作します。
# 利用例
- 明示的に `python os_fake_holiday_announcer.py notify` で即時通知
- `python os_fake_holiday_announcer.py log` で過去の通知履歴を確認
- 1時間ごとに最大1回の自動通知(暗黙トリガー)
# 注意点
- 通知内容は完全に架空で、業務やシステムには何も影響を与えません。
- 履歴は ~/.os_fake_holiday_announcer_log.json に保存されます。
- Windows/Macではnotify2が動作しない場合があります。
# 設計方針
過剰な通知による作業妨害を避けるため、頻度制限と履歴管理を重視しています。メッセージはランダム生成で毎回異なるユーモアを提供します。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/os-fake-holiday-announcer .claude/skills/os-fake-holiday-announcer
.claude/skills/os-fake-holiday-announcer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/os-fake-holiday-announcer
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /os-fake-holiday-announcer と Skill 名で出てきます。
5. 動作確認
/os-fake-holiday-announcer で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
