Claude Code ユーザーが日常でぶつかる悩み
Claude Code を使っていると、日々のコーディングやリポジトリ管理の中で「ちょっとした非日常」や「息抜き」がほしくなる瞬間が意外と多いものです。特に集中して作業していると、緊張感や単調さが続き、職場やチームの空気が硬直しがちです。通知・演出系のSkillがあれば、そんな場面にちょっとした変化や笑いをもたらせるのでは、という声も聞こえてきます。
- Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
- monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした真面目な悩みに加え、たまには「謎のOSロックダウン通知」など、作業現場に意図的なカオスや笑いを投入して場を和ませたい、というニーズも見逃せません。通知・演出・OS連携系のSkillは、単なる便利機能だけでなく、チームの雰囲気を一変させるユーモアの起爆剤にもなり得ます。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Claude Code の作業現場に「謎のOSロックダウン通知」を炸裂させ、非日常の演出と笑いをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 長時間の AI coding workflow に突如カオスな通知が走り、場の空気がリフレッシュされる
- onboarding や session 再開時に「謎のロックダウン」通知で会話が盛り上がる
- monorepo や複雑な repository 構造で作業中でも、予期せぬタイミングで通知が現れ、意図的な interruption を演出できる
- Skill の context や path management とは別軸で、職場コミュニケーションのきっかけになる
- 通知は完全ランダム生成で、毎回異なるメッセージが飛ぶため飽きずに使える
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-fake-lockdown-alert .claude/skills/random-os-fake-lockdown-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-fake-lockdown-alert
[ALERT] 緊急: 本日より全ファイル凍結モード発動
理由: カフェイン過剰摂取検知 (user@dev-machine)
影響範囲: ./src/ から ./tests/ まで全 directory
解除方法: デスクから立ち上がり、深呼吸を5回
備考: Claude Code の repository understanding 機能は一時停止します
シーン2: monorepo / package 跨ぎ作業時
> 作業ディレクトリを packages/api/ から packages/web/ に移動
[OS LOCKDOWN NOTICE]
モジュール "web" で異常なファイルアクセスを検知しました
理由: repository context が急激に変化
対策: 10秒間、全 directory の編集を制限します
解除コマンド: /unlock-now
ヒント: monorepo 構造を Claude Code に再説明してください
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[FAKE SYSTEM ALERT]
全ユーザーに告ぐ: 本日 16:00 より「作業ファイル凍結祭り」開催
原因: AI coding workflow の過剰最適化を検出
解除方法: 隣の席の人に「お疲れ様」と声をかける
備考: この通知はランダムに発生します
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突如ロックダウン通知が入り、集中力をリセットできる |
発動方式
明示呼び出し (/random-os-fake-lockdown-alert) と暗黙発動 (「OSロックダウン」「ファイル凍結」などのdescriptionマッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-fake-lockdown-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-fake-lockdown-alert/
├── SKILL.md
├── scripts/
│ └── random_os_fake_lockdown_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_lockdown_alert.py |
謎のOSロックダウン通知を発令します |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-lockdown-alert
description: 作業中・コマンド実行時・集中状態などに、ランダムかつ非現実的な『OSロックダウン通知』を発動。通知・演出・ジョーク系Skillとして、明示呼び出しや特定キーワード検知時に適用。
---
# 機能概要
このSkillは、作業中に突如として「謎のOSロックダウン発令通知」をデスクトップやターミナルに表示します。通知内容は完全ランダムで、例えば「全ファイル凍結」「理由:カフェイン過剰摂取検知」「解除方法:深呼吸5回」など、現実にはあり得ない非日常的なメッセージが炸裂。真面目な作業現場に突如カオスと笑いをもたらし、チームの雰囲気を一瞬だけ和ませます。実ファイルや環境への影響は一切なく、演出専用です。
# 使い方
- 明示呼び出し例:`/random-os-fake-lockdown-alert` または `/skill random-os-fake-lockdown-alert`
- 暗黙発動例:会話やコード内に「集中」「眠い」「退屈」「生産性」などのキーワードが含まれる場合、自動で通知が発動します。
# 出力例
```
=== 緊急OSロックダウン発令 ===
発令時刻: 2024-06-01 14:23:11
理由: カフェイン過剰摂取検知
影響範囲: 全ユーザーディレクトリ
解除方法: 深呼吸5回 + 机の上を片付ける
=============================
```
```
=== 謎のシステム凍結警告 ===
発令時刻: 2024-06-01 15:02:44
理由: キーボード連打による過熱
影響範囲: /tmp, /home, /dev/null
解除方法: 画面を3秒間見つめる
=============================
```
# 注意点
- 実際のファイルやシステムには一切影響を与えません。
- 通知は標準出力またはデスクトップ通知APIでのみ表示されます。
- ローカルに履歴や記録は残しません。
- 業務環境での使用はジョーク目的に限定し、誤解を招かないよう注意してください。
# 参考資料
- [Python公式: notifications, random, argparse](https://docs.python.org/3/library/)
- references/design_notes.md 参照
scripts/random_os_fake_lockdown_alert.py
import random
import argparse
import sys
import time
import datetime
import platform
import subprocess
# メッセージテンプレート
REASONS = [
'カフェイン過剰摂取検知',
'キーボード連打による過熱',
'AI過剰利用',
'生産性が高すぎるため',
'集中力の急激な低下',
'謎の宇宙線干渉',
'OSの気分が乗らない',
'ファイルシステムからの悲鳴',
'ネットワークのやる気低下',
'ユーザーの退屈度が閾値超過'
]
AFFECTED = [
'全ユーザーディレクトリ',
'/tmp, /home, /dev/null',
'デスクトップと書類フォルダ',
'カレントディレクトリ',
'全プロセス',
'ランダムな3ファイル',
'ネットワーク全域',
'仮想メモリ',
'USBデバイス',
'隣の席のPC'
]
UNLOCKS = [
'深呼吸5回 + 机の上を片付ける',
'画面を3秒間見つめる',
'コーヒーを1杯減らす',
'手を振る',
'目を閉じて「解除」と唱える',
'椅子から立ち上がる',
'好きな曲を1フレーズ歌う',
'タイマーを1分セット',
'ターミナルを再起動',
'同僚に「ロックダウン発令」と伝える'
]
BANNERS = [
'=== 緊急OSロックダウン発令 ===',
'=== 謎のシステム凍結警告 ===',
'=== OSストライキ通知 ===',
'=== セキュリティ異常アラート ===',
'=== 仮想環境パニック発令 ==='
]
FOOTER = '============================='
HISTORY = []
def random_alert():
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
banner = random.choice(BANNERS)
reason = random.choice(REASONS)
affected = random.choice(AFFECTED)
unlock = random.choice(UNLOCKS)
alert = f"{banner}\n発令時刻: {now}\n理由: {reason}\n影響範囲: {affected}\n解除方法: {unlock}\n{FOOTER}"
HISTORY.append({
'timestamp': now,
'banner': banner,
'reason': reason,
'affected': affected,
'unlock': unlock,
'alert': alert
})
return alert
def show_alert(alert, notify=False):
print(alert)
if notify:
send_desktop_notification(alert)
def send_desktop_notification(message):
system = platform.system()
title = 'OSロックダウン通知'
if system == 'Darwin': # macOS
try:
subprocess.run([
'osascript', '-e',
f'display notification "{message}" with title "{title}"'
], check=True)
except Exception:
pass
elif system == 'Linux':
try:
subprocess.run([
'notify-send', title, message], check=True)
except Exception:
pass
# Windowsは標準で通知API非対応(拡張可)
def list_history():
if not HISTORY:
print('まだロックダウン通知は発令されていません。')
return
for i, h in enumerate(HISTORY, 1):
print(f"[{i}] {h['timestamp']} - {h['reason']} -> {h['affected']}")
def summary():
print(f"累計発令回数: {len(HISTORY)}")
if HISTORY:
last = HISTORY[-1]
print(f"直近: {last['timestamp']} / {last['reason']}")
def parse_args():
parser = argparse.ArgumentParser(description='謎のOSロックダウン通知を発令します')
parser.add_argument('command', nargs='?', default='alert', choices=['alert', 'list', 'summary'], help='サブコマンド: alert/list/summary')
parser.add_argument('--notify', action='store_true', help='デスクトップ通知も同時に表示')
parser.add_argument('--repeat', type=int, default=1, help='繰り返し回数')
parser.add_argument('--interval', type=float, default=0, help='繰り返し間隔(秒)')
return parser.parse_args()
def main():
args = parse_args()
if args.command == 'alert':
for i in range(args.repeat):
alert = random_alert()
show_alert(alert, notify=args.notify)
if i < args.repeat - 1 and args.interval > 0:
time.sleep(args.interval)
elif args.command == 'list':
list_history()
elif args.command == 'summary':
summary()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、現実には発生し得ない『OSロックダウン通知』を完全ランダムな内容で生成し、チームや個人作業の場に一瞬の非日常を演出します。実際のファイルや環境には一切影響を与えません。
# 公式ドキュメント抜粋
- [Python random](https://docs.python.org/3/library/random.html)
- [argparse](https://docs.python.org/3/library/argparse.html)
- [notify-send (Linux)](https://man7.org/linux/man-pages/man1/notify-send.1.html)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
# 利用例
- `/random-os-fake-lockdown-alert --notify` でデスクトップ通知
- `/random-os-fake-lockdown-alert alert --repeat 3 --interval 10` で10秒ごとに3回発令
- `/random-os-fake-lockdown-alert list` で過去発令履歴を表示
# 注意点
- 実際のシステムやファイルには何も影響を与えません。
- 通知内容は完全に架空で、演出目的です。
- 履歴はメモリ上のみで永続化されません。
# 設計方針
- シンプルかつ安全な構成
- 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-lockdown-alert .claude/skills/random-os-fake-lockdown-alert
.claude/skills/random-os-fake-lockdown-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-fake-lockdown-alert
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-lockdown-alert と Skill 名で出てきます。
5. 動作確認
/random-os-fake-lockdown-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 との連携設計はどうあるべきか?
- 通知が確実にランダムかつ非現実的な内容になっているか?
- 実ファイルや環境への影響ゼロであること
- 通知タイミングが作業中に適度な頻度で発動するか?
実際に Claude Code で試した検証ログは Claude Codeで謎のOSロックダウン通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
