Claude Codeで作業中の異次元演出を実現する通知スキル構築入門

  • URLをコピーしました!
目次

Claude Code ユーザーが日常でぶつかる悩み

Claude Code を使っていると、長時間の作業や複雑な monorepo を扱う場面で、どうしても「集中力が途切れる」「作業が単調になって頭が固まる」といった瞬間が訪れます。AI coding workflow を高速化するために context や path management に気を配る一方、気づけば repository understanding に疲れ、思考がマンネリ化しがちです。特に通知や演出が少ない環境では、ちょっとした気分転換や非日常の刺激が欲しくなることも多いのではないでしょうか。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

このような悩みの裏には、「作業環境が単調」「リセットや気分転換のきっかけがない」「集中力が切れても再起動の合図がない」といった、通知・演出・OS連携の不足が潜んでいます。ちょっとした非日常体験が、workflow のリズムや repository understanding の鮮度を保つカギになることもあります。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、作業空間に突如“低重力モード突入通知”をランダム演出し、日常の単調さや集中力の停滞を一瞬でリセットします。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • AI coding workflow の合間に、完全ランダムな“低重力”通知が炸裂し、思考や集中力を非日常にリセットできる
  • session 開始や monorepo 移動など、repository understanding の切り替えタイミングで意図的な演出を加えられる
  • 長時間の作業や stale context に陥ったとき、気分転換として“宇宙船状態”を疑似体験できる
  • 通知内容が毎回異なり、飽きずに使い続けられる
  • 本物のシステム挙動やデータには一切影響せず、安心して導入できる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/random-os-fake-low-gravity-alert .claude/skills/random-os-fake-low-gravity-alert

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /random-os-fake-low-gravity-alert

[警告] 本日このPCは低重力環境に切り替わりました。
すべてのファイル操作がふわふわと浮遊します。
・ディレクトリ: /src/components
・repository: ai-note/claude-code
ドラッグ操作は普段の3倍遠く飛びますのでご注意ください。
- Claude Code context: リセット済み

シーン2: monorepo / package 跨ぎ作業時


> packages/api/ の context に切り替えて

[OS通知] 低重力モード発動!
コードのバグがふわふわ浮遊中です。
・現在のdirectory: packages/api/
・monorepo構成: packages/api, packages/web, packages/shared
リポジトリの重力が弱まっています。Claude Code の repository understanding を再確認してください。

シーン3: お遊び的な使い方


> なんか飽きてきたから刺激が欲しい

[ALERT] システム低重力モード突入!
すべてのパス指定がランダム方向にスリップします。
・path management: フワフワ状態
・memory: 一時的に軽くなっています
一息ついて宇宙遊泳気分で作業を続けましょう。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+低重力通知でリセット演出
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+演出通知で切り替え感UP
長時間 workflow long context で重要箇所が薄まる 低重力通知で気分転換、context の鮮度をリフレッシュ

発動方式

明示呼び出し (/random-os-fake-low-gravity-alert) と暗黙発動 (「低重力」「宇宙」「ふわふわ」などの自然言語記述) の両方に対応。

Skill の中身を全部見せる

.claude/skills/random-os-fake-low-gravity-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/random-os-fake-low-gravity-alert/
├── SKILL.md
├── scripts/
│   └── low_gravity_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/low_gravity_alert.py ランダム低重力OSアラート通知スクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-low-gravity-alert
description: このSkillは、集中作業中やコーディングセッションの合間に“低重力モード突入”などの架空OS通知をランダムに発動し、非日常感を演出します。発動条件は「通知」「演出」「リセット」「リフレッシュ」などのキーワードや明示コマンドです。
---

# 機能概要
このSkillは、作業中の緊張や単調さを一瞬でリセットするために、完全ランダムな“低重力モード突入”通知をデスクトップやターミナルに表示します。通知内容は毎回異なり、「本日このPCは低重力環境に切り替わりました」「コードのバグがふわふわ浮遊中」など、知的作業空間を一瞬で宇宙船状態に変えるユーモラスなものです。実際のシステム挙動やファイルには一切影響せず、集中力の切り替えや気分転換に最適です。

# 使い方
- 明示呼び出し: `/random-os-fake-low-gravity-alert` または `/skill random-os-fake-low-gravity-alert`
- 暗黙発動: 「通知」「演出」「リセット」「リフレッシュ」「宇宙」「低重力」などのキーワードを含む会話やコマンドで自動発動

# 出力例
```
[Low Gravity Alert]
警告:本日このPCは低重力環境に切り替わりました。
ファイルのドラッグ操作が普段の3倍遠く飛びます。
コードのバグがふわふわ浮遊中です。

[Low Gravity Alert]
注意:重力制御装置がオフラインになりました。
キーボード入力が軽やかに跳ね返ります。
```

# 注意点
- 本Skillは通知演出のみを行い、OSやファイル、アプリケーションの実挙動には一切影響を与えません。
- 通知頻度は過剰にならないよう内部で制御されています。
- ローカルに通知履歴を保存する場合は、明示的なオプションが必要です。
- 除外パス: システム設定・ファイル操作・ネットワーク通信には関与しません。

# 参考資料
- references/design_notes.md を参照
- 公式: https://docs.python.org/3/library/random.html
- 通知API: https://pypi.org/project/plyer/ (クロスプラットフォーム通知)

scripts/low_gravity_alert.py

import sys
import argparse
import random
import time
import os

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

ALERT_MESSAGES = [
    [
        '警告:本日このPCは低重力環境に切り替わりました。',
        'ファイルのドラッグ操作が普段の3倍遠く飛びます。',
        'コードのバグがふわふわ浮遊中です。'
    ],
    [
        '注意:重力制御装置がオフラインになりました。',
        'キーボード入力が軽やかに跳ね返ります。',
        '保存したファイルが一時的に浮遊しています。'
    ],
    [
        '低重力モード発動!',
        '思考もアイデアもふわふわ上昇中。',
        '本日は宇宙遊泳気分で作業をお楽しみください。'
    ],
    [
        'OS低重力アラート:',
        'カーソル移動が通常の2倍速くなります(気のせいです)。',
        'コードレビューが無重力状態で進行中。'
    ],
    [
        '重力異常:',
        'エディタ内の文字が浮遊し始めました。',
        'バグ修正もふんわり軽やかに。'
    ],
    [
        '宇宙船モードON:',
        'デバッグ中の変数が軌道を外れました。',
        '本日は低重力での作業となります。'
    ],
    [
        '低重力警報:',
        'ターミナルの出力が上昇傾向です。',
        '集中力も一緒に浮かび上がります。'
    ],
    [
        '重力フィールド低下:',
        'ドラッグ&ドロップの飛距離にご注意ください。',
        '本日は宇宙規格でお送りします。'
    ]
]

HISTORY_FILE = os.path.expanduser('~/.low_gravity_alert_history.log')


def random_alert_message():
    lines = random.choice(ALERT_MESSAGES)
    return '[Low Gravity Alert]\n' + '\n'.join(lines)


def send_notification(title, message):
    if PLYER_AVAILABLE:
        try:
            notification.notify(
                title=title,
                message=message,
                timeout=8
            )
        except Exception as e:
            print(f"[通知エラー] {e}")
    else:
        # Fallback: print to terminal
        print(f"{title}\n{message}")


def log_history(message):
    try:
        with open(HISTORY_FILE, 'a', encoding='utf-8') as f:
            f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')}\n{message}\n---\n")
    except Exception as e:
        print(f"[履歴保存エラー] {e}")


def show_alert(save_history=False):
    msg = random_alert_message()
    send_notification('Low Gravity Alert', '\n'.join(msg.split('\n')[1:]))
    print(msg)
    if save_history:
        log_history(msg)


def list_history(limit=5):
    if not os.path.exists(HISTORY_FILE):
        print("履歴ファイルが存在しません。")
        return
    with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
        entries = f.read().strip().split('---\n')
        entries = [e.strip() for e in entries if e.strip()]
        for entry in entries[-limit:]:
            print(entry)
            print('---')


def clear_history():
    if os.path.exists(HISTORY_FILE):
        os.remove(HISTORY_FILE)
        print("履歴を削除しました。")
    else:
        print("履歴ファイルが存在しません。")


def main():
    parser = argparse.ArgumentParser(description='ランダム低重力OSアラート通知スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    parser_alert = subparsers.add_parser('alert', help='低重力アラートを表示')
    parser_alert.add_argument('--save', action='store_true', help='通知履歴を保存する')

    parser_list = subparsers.add_parser('list', help='通知履歴を表示')
    parser_list.add_argument('--limit', type=int, default=5, help='表示件数')

    parser_clear = subparsers.add_parser('clear', help='通知履歴を削除')

    args = parser.parse_args()
    if args.command == 'alert' or args.command is None:
        show_alert(save_history=getattr(args, 'save', False))
    elif args.command == 'list':
        list_history(limit=args.limit)
    elif args.command == 'clear':
        clear_history()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、知的作業空間に“非日常”を演出するための通知スキルです。システムやファイルに一切影響を与えず、完全に演出専用のランダム通知を生成します。

# 公式ドキュメント抜粋
通知実装には plyer ライブラリ (https://pypi.org/project/plyer/) を利用し、クロスプラットフォームなデスクトップ通知を実現しています。plyerが未導入の場合はターミナル出力に自動フォールバックします。

# 利用例
- 長時間作業のリフレッシュ
- チーム内の雑談やアイスブレイク演出
- コーディングセッションの合間の気分転換

# 注意点
本Skillは、通知内容が完全に架空であり、実際のOSやファイル操作には影響しません。履歴保存はユーザー明示オプションのみで行われます。

# 設計方針
- 毎回異なる通知内容
- 過剰通知防止
- システム安全性・副作用ゼロ
- ログ保存は opt-in 方式

導入手順

この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-low-gravity-alert .claude/skills/random-os-fake-low-gravity-alert

.claude/skills/random-os-fake-low-gravity-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/random-os-fake-low-gravity-alert
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-low-gravity-alert と Skill 名で出てきます。

5. 動作確認

/random-os-fake-low-gravity-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
  • 通知が作業の邪魔になる: 頻度や演出が過剰だと workflow を逆に阻害する可能性
  • 本物のOS挙動と誤認されるリスク: 演出がリアルすぎると混乱を招く場合あり

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 通知内容が毎回ランダムで変わることを確認できるか?
  • 本物のシステム挙動やデータに一切影響しない設計になっているか?
  • 作業の邪魔にならない頻度・演出であるか?

実際に Claude Code で試した検証ログは Claude Codeで謎の低重力モード通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次