Claude Code ユーザーが日常でぶつかる悩み
Claude Code を使った開発ワークフローでは、効率的な repository understanding や path management が重要ですが、日々の作業の中で思わず「またか…」と感じる瞬間が多々あります。特に monorepo や大規模 repository での directory 移動や context 復元にまつわる煩雑さは、誰しもが一度は経験する「あるある」でしょう。
- Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
- monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、集中作業が続くと現実感が薄れたり、同じ directory 構造の説明を繰り返すことで気分転換の余地も失われがちです。通知・演出・OS連携系の Skill が加われば、こうした日常の「単調さ」や「説明コスト」をユーモラスに和らげる余地も出てきます。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中にランダムな“OS公式・緊急カンファレンスコール通知”を炸裂させることで、Claude Code の単調な開発フローに遊び心とリフレッシュをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 長時間の AI coding workflow やオンボーディング中に、突発的なフェイク通知で気分転換できる
- repository understanding や path management の繰り返し説明に飽きた時、ユーモアで現実感をリセットできる
- monorepo や大規模 directory での作業時、突然の“あり得ない会議”でチーム内の話題づくりや集中力の切り替えに役立つ
- 通知内容が毎回異なり、同じパターンに飽きることがない
- 実作業やデータに一切影響を与えず、完全にフェイクな演出として安全に楽しめる
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-fake-conference-call-alert .claude/skills/random-os-fake-conference-call-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-fake-conference-call-alert
[OS公式通知] 緊急カンファレンスコールのお知らせ
-------------------------------------------------
議題: 「今すぐ全員集合:超重要案件について」
詳細: 本日の議題は“README.mdの改行コード統一問題”です。
出欠判定はOSが自動で行います。参加者は全員黙ってください。
会議開始まで:00:00:07
[通知終了] 実際の会議は行われません。
シーン2: monorepo / package 跨ぎ作業時
> パッケージAからパッケージBのコードを読みに行ったタイミング
[OS緊急会議通知]
---------------------------------------------
議題: 「monorepo内パッケージ間のコーヒー豆粒度再検討」
対象: /packages/core/ と /packages/ui/
備考: 重要度S(出席必須)、出欠はAIが自動判定します。
会議資料: /docs/coffee-grind-spec-v3.pdf
会議は開始されません。安心して作業を続けてください。
シーン3: お遊び的な使い方
> /random-os-fake-conference-call-alert
[OS公式緊急会議]
--------------------------------------
議題: 「今日のランチは何を食べるべきか」
参加条件: /src/utils/ディレクトリに1回でも入ったことがある人
出欠判定: OSが勝手に決めます
会議開始時間: 未定(開始しません)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突発通知で集中力をリセット、workflowのマンネリを防ぐ |
発動方式
明示呼び出し (/random-os-fake-conference-call-alert) と暗黙発動 (「緊急会議」「謎のOS通知」などの記述にマッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-fake-conference-call-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-fake-conference-call-alert/
├── SKILL.md
├── scripts/
│ └── random_os_fake_conference_call_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_conference_call_alert.py |
OS公式フェイク会議通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-conference-call-alert
description: 作業中や長時間の無操作時、または"会議"や"緊急"などのキーワードを含むプロンプトが観測された場合に発動。/random-os-fake-conference-call-alert で明示呼び出しも可能。
---
# 機能概要
このSkillは、作業中のユーザーに対し、架空のOS公式カンファレンスコール通知をランダムなタイミングで表示します。通知内容は完全にネタで、実在しない会議や意味不明な議題が毎回異なり、現実感を一瞬揺さぶります。集中しすぎている時や、長時間の単調作業の合間に“謎の緊急会議”が突然現れ、遊び心とリフレッシュを提供します。会議自体は始まらず、実作業やデータには一切影響を与えません。
# 使い方
- 明示呼び出し: `/random-os-fake-conference-call-alert` をターミナルやチャットで入力
- 暗黙発動: 「会議」「緊急」「公式」「コール」などのキーワードを含むプロンプトや、一定時間の無操作時に自動発動
# 出力例
```
[OS公式 緊急カンファレンスコール通知]
本日の議題: USBポートの向きを哲学的に再考する
出席者: 全ユーザー (出欠はOSが自動判定します)
開始時刻: 今すぐ
備考: 重要案件につき全員集合
---
[OS公式 緊急カンファレンスコール通知]
議題: コーヒー豆の粒度再検討
出席者: コーヒーを愛する全プロセス
開始時刻: ただちに
備考: 参加しない場合は自動で参加扱いとなります
```
# 注意点
- 通知は完全なジョークであり、実際の会議やシステム操作は発生しません。
- 通知の頻度やタイミングは適度に制御され、作業の妨げやデータ損失はありません。
- 通知内容は毎回ランダム生成され、ローカル保存や外部送信は一切行いません。
- システムの通知API(macOS: `osascript`, Windows: `toast`, Linux: `notify-send`)を利用します。
# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- OS通知API: https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-notifications
- Linux notify-send: https://specifications.freedesktop.org/notification-spec/latest/
- macOS osascript: https://ss64.com/osx/osascript.html
scripts/random_os_fake_conference_call_alert.py
import sys
import os
import random
import platform
import argparse
import subprocess
import time
from datetime import datetime, timedelta
FAKE_TOPICS = [
"USBポートの向きを哲学的に再考する",
"コーヒー豆の粒度再検討",
"全プロセスの出欠自動判定について",
"メモリの空き容量を詩的に表現する方法",
"今後のOSアップデートで追加予定の謎機能について",
"システム時刻のズレを宇宙時間で補正する議論",
"デスクトップ背景の毎時自動変更是非",
"CPU温度と室温の相関に関する緊急討論",
"全ユーザーのパスワードを一斉にリセットするか否か",
"OSの自己紹介文を考えるワークショップ"
]
FAKE_ATTENDEES = [
"全ユーザー (出欠はOSが自動判定します)",
"コーヒーを愛する全プロセス",
"管理者権限を持つ者全員",
"現在稼働中の全サービス",
"一時停止中の全アプリケーション",
"システムカーネルとその友人たち",
"本日ログインした全ユーザー",
"仮想マシン内の全プロセス",
"全てのデバイスドライバ",
"OSアップデート担当者"
]
FAKE_NOTES = [
"重要案件につき全員集合",
"参加しない場合は自動で参加扱いとなります",
"議事録は自動生成されません",
"途中参加・途中退出はOSの気分次第",
"会議の録音は禁止されています (理由: 未定)",
"出席確認はランダムで行われます",
"議題は途中で追加される場合があります",
"本会議は実在しません",
"参加者には特典はありません",
"会議後のアンケートはありません"
]
LAST_ALERT_FILE = os.path.expanduser("~/.random_os_fake_conference_call_last")
MIN_INTERVAL_MINUTES = 15
def generate_fake_alert():
topic = random.choice(FAKE_TOPICS)
attendee = random.choice(FAKE_ATTENDEES)
note = random.choice(FAKE_NOTES)
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
alert = (
"[OS公式 緊急カンファレンスコール通知]\n"
f"本日の議題: {topic}\n"
f"出席者: {attendee}\n"
f"開始時刻: 今すぐ\n"
f"備考: {note}\n"
f"(通知時刻: {now})"
)
return alert
def show_notification(alert_text):
system = platform.system()
try:
if system == "Darwin":
script = f'display notification "{alert_text}" with title "OS公式 緊急会議"'
subprocess.run(["osascript", "-e", script], check=True)
elif system == "Linux":
subprocess.run(["notify-send", "OS公式 緊急会議", alert_text], check=True)
elif system == "Windows":
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("OS公式 緊急会議", alert_text, duration=10)
else:
print(alert_text)
except Exception as e:
print(f"[通知失敗] {e}\n{alert_text}")
def can_trigger_alert():
if not os.path.exists(LAST_ALERT_FILE):
return True
try:
with open(LAST_ALERT_FILE, "r") as f:
last = f.read().strip()
last_dt = datetime.strptime(last, "%Y-%m-%d %H:%M:%S")
if datetime.now() - last_dt > timedelta(minutes=MIN_INTERVAL_MINUTES):
return True
else:
return False
except Exception:
return True
def update_last_alert_time():
try:
with open(LAST_ALERT_FILE, "w") as f:
f.write(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
except Exception:
pass
def trigger_alert():
if not can_trigger_alert():
print("[INFO] 直近で通知済みのため、今回はスキップします。")
return
alert = generate_fake_alert()
show_notification(alert)
update_last_alert_time()
print(alert)
def list_last_alert():
if not os.path.exists(LAST_ALERT_FILE):
print("まだ通知履歴がありません。")
return
with open(LAST_ALERT_FILE, "r") as f:
last = f.read().strip()
print(f"最後の通知時刻: {last}")
def main():
parser = argparse.ArgumentParser(description="OS公式フェイク会議通知スクリプト")
subparsers = parser.add_subparsers(dest="command")
parser_alert = subparsers.add_parser("alert", help="今すぐフェイク会議通知を出す")
parser_list = subparsers.add_parser("list", help="最後の通知時刻を表示")
parser_demo = subparsers.add_parser("demo", help="5回デモ通知を連続表示 (間隔3秒)")
args = parser.parse_args()
if args.command == "alert" or args.command is None:
trigger_alert()
elif args.command == "list":
list_last_alert()
elif args.command == "demo":
for _ in range(5):
alert = generate_fake_alert()
show_notification(alert)
print(alert)
time.sleep(3)
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、作業中のユーザー体験に遊び心を加えるためのフェイク通知演出ツールです。実際の会議やOS操作は一切伴わず、通知内容も完全なジョークです。
# 公式ドキュメント抜粋
- Windows: [Toast Notifications](https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-notifications)
- Linux: [freedesktop.org Notification Spec](https://specifications.freedesktop.org/notification-spec/latest/)
- macOS: [osascript](https://ss64.com/osx/osascript.html)
# 利用例
- 長時間の集中作業中にリフレッシュを促す
- チーム内での小ネタやアイスブレイク
- ターミナルやチャットで明示的に呼び出して楽しむ
# 注意点
- 実際の会議や通知と誤認しないよう、内容は極端にネタ要素を強調
- 通知頻度は15分以上の間隔を設け、連続発動を抑制
- ログや個人情報の外部送信は一切なし
# 設計方針
- 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-fake-conference-call-alert .claude/skills/random-os-fake-conference-call-alert
.claude/skills/random-os-fake-conference-call-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-fake-conference-call-alert
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-conference-call-alert と Skill 名で出てきます。
5. 動作確認
/random-os-fake-conference-call-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
- 通知内容が完全にネタであること: 本物のOS通知と誤認しないよう明示が必要
- 通知タイミングや頻度: 頻度が高すぎると逆に workflow の邪魔になる
試す前に確かめたいこと
この Skill を実運用に投入する前に確かめたい問いを並べる:
- 実 repo での token 消費は許容範囲か?
- monorepo (packages 多数) で安定して動くか?
- stale context にならず、長時間 workflow でも有効か?
- CLAUDE.md との連携設計はどうあるべきか?
- 通知内容が完全にネタであることがユーザーに明示されるか?
- 通知タイミングや頻度が適度で、実作業やデータ損失を一切阻害しないか?
実際に Claude Code で試した検証ログは Claude Codeで謎の緊急会議通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
