Claude Codeでデスクトップ通知に遊び心を演出するSkillの作り方

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

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

Claude Code を使っていると、日々の開発体験が効率化される一方で、どうしても単調なルーチンや、集中しすぎて息抜きができない瞬間が生まれがちです。特に「通知・演出・OS連携」系の機能が少ないため、作業中のアクセントや遊び心が不足しがちという声もよく聞かれます。以下のような「あるある」に心当たりがある方も多いのではないでしょうか。

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

こうした課題に加えて、「たまには息抜きが欲しい」「デスクトップが無機質で退屈」「AI coding workflow の合間にちょっとした演出が欲しい」と感じる瞬間も多いはずです。特に repository understanding や path management に集中していると、ふとした拍子に気分転換が欲しくなります。

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

一言サマリ: このスキルは、作業中のデスクトップに突如“謎のOSメモ”をランダム通知し、シュールな混乱と遊び心を呼び込む演出系 Skill。

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

  • AI coding workflow の合間に、完全ランダムな「意味不明OSメモ」が不意打ちでデスクトップに現れ、作業にユーモラスなアクセントが加わる
  • 長時間の repository understanding や path management に没頭している時でも、気分転換やリフレッシュのきっかけを自然に得られる
  • monorepo や複雑な directory 構造の作業中も、シュールな通知で堅苦しさが和らぎ、オンボーディング時の緊張感もほぐれる
  • 通知内容が毎回完全ランダムで、実用性ゼロの怪文書が届くため、毎回「次は何が来るのか」とちょっとした楽しみになる
  • Skill の組み込みが簡単で、Claude Code の context や memory を圧迫せず、気軽に導入できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-desktop-fake-os-memo .claude/skills/random-desktop-fake-os-memo

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

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

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


# /random-desktop-fake-os-memo
> 開発作業を始めます

[通知] OSメモ: 「冷蔵庫にプリンあり」
[通知] OSメモ: 「バグは空から降ってくる」
(Claude Code: context 構築中...)

> 

Skill の中身を全部見せる

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

.claude/skills/random-desktop-fake-os-memo/
├── SKILL.md
├── scripts/
│   └── random_desktop_fake_os_memo.py
└── references/
    └── reference.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_desktop_fake_os_memo.py random-desktop-fake-os-memo: 謎のOSメモをランダム通知
references/reference.md 概要 をまとめた参考資料

SKILL.md

---
name: random-desktop-fake-os-memo
description: 作業中やコーディング時に、完全ランダムな“謎のOSメモ”をデスクトップ通知として発動。通知・演出・OS連携のキーワードが含まれる状況や、/random-desktop-fake-os-memo コマンド実行時に自動で発動します。
---

# 機能概要
このSkillは、作業中のデスクトップに突然“謎のOSメモ”を通知として表示します。内容は完全にランダムで、例えば「冷蔵庫にプリンあり」「上司が見ている」「謎の引き出しを開けるな」など、実用性ゼロの怪文書が炸裂。集中している時ほど思わず二度見してしまう、シュールで遊び心あふれる演出を提供します。退屈なデスクトップにちょっとした混乱と笑いを呼び込み、気分転換や話題作りにも最適です。

# 使い方
- 明示的な呼び出し: `/random-desktop-fake-os-memo` コマンドを実行すると即座に通知が表示されます。
- 暗黙発動: 「通知」「演出」「OS連携」「デスクトップ」「遊び心」などのキーワードを含む会話やトリガー条件下で自動発動します。

# 出力例
```
[デスクトップ通知]
謎のOSメモ: 冷蔵庫にプリンあり

[デスクトップ通知]
謎のOSメモ: 上司が見ている

[デスクトップ通知]
謎のOSメモ: バグは空から降ってくる

[デスクトップ通知]
謎のOSメモ: 謎の引き出しを開けるな

[デスクトップ通知]
謎のOSメモ: システムはあなたを見ている
```

# 注意点
- 通知内容は毎回完全ランダムで再現性がありません。
- 実用性は一切なく、意味不明な内容が多く含まれます。
- 通知はローカル端末でのみ表示され、履歴やファイル保存は行いません。
- Linux/macOSでは`notify-send`/`osascript`、Windowsでは`win10toast`などの標準的な通知APIを利用します。

# 参考資料
- [Linux notify-send](https://specifications.freedesktop.org/notification-spec/latest/)
- [macOS AppleScript通知](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- [win10toast (PyPI)](https://pypi.org/project/win10toast/)

scripts/random_desktop_fake_os_memo.py

import sys
import os
import random
import platform
import subprocess
import argparse
try:
    from win10toast import ToastNotifier
except ImportError:
    ToastNotifier = None

MEMO_LIST = [
    "冷蔵庫にプリンあり",
    "上司が見ている",
    "バグは空から降ってくる",
    "謎の引き出しを開けるな",
    "システムはあなたを見ている",
    "今日の運勢: ファイルが消えるかも",
    "この通知は意味がありません",
    "未確認のプロセスが起動しました",
    "あなたの席に誰かが座った",
    "OSがあなたに微笑んでいます",
    "エラー: エラーがありません",
    "次の会議は10分前に終了しました",
    "USBポートに謎の力を感じる",
    "メモ: コーヒーを飲みすぎないで",
    "警告: 何も警告しません",
    "デバッグ: ここはデバッグしないで",
    "秘密: この通知は自動で消えます",
    "ファイルシステムが踊っています",
    "メモリがあなたを覚えています",
    "新しいバグが生まれました",
    "このメモは消せません",
    "謎のプロセスが終了しました",
    "あなたのマウスが迷子です",
    "今日のラッキーカラー: #404040",
    "タスクバーが息をしています",
    "この通知はランダムです",
    "OSからの挑戦状",
    "あなたの机の下に秘密があります",
    "意味不明なエラーが発生しました",
    "このメモは読まないでください"
]

TITLE = "謎のOSメモ"

def pick_random_memo():
    return random.choice(MEMO_LIST)

def notify_linux(summary, body):
    try:
        subprocess.run([
            'notify-send', summary, body
        ], check=True)
    except Exception as e:
        print(f"[ERROR] Linux通知失敗: {e}")

def notify_macos(summary, body):
    try:
        script = f'display notification "{body}" with title "{summary}"'
        subprocess.run([
            'osascript', '-e', script
        ], check=True)
    except Exception as e:
        print(f"[ERROR] macOS通知失敗: {e}")

def notify_windows(summary, body):
    if ToastNotifier is None:
        print("[ERROR] win10toastがインストールされていません。pip install win10toast を実行してください。")
        return
    try:
        toaster = ToastNotifier()
        toaster.show_toast(summary, body, duration=5, threaded=True)
    except Exception as e:
        print(f"[ERROR] Windows通知失敗: {e}")

def notify(summary, body):
    sys_platform = platform.system()
    if sys_platform == 'Linux':
        notify_linux(summary, body)
    elif sys_platform == 'Darwin':
        notify_macos(summary, body)
    elif sys_platform == 'Windows':
        notify_windows(summary, body)
    else:
        print(f"[WARN] 未対応OS: {sys_platform}. 通知内容: {summary}: {body}")

def list_memos():
    print("--- 謎のOSメモ候補一覧 ---")
    for idx, memo in enumerate(MEMO_LIST, 1):
        print(f"{idx:2d}. {memo}")

def summary():
    print("このスキルは、完全ランダムな謎のメモをデスクトップ通知として表示します。\n通知内容は実用性ゼロの怪文書です。\n対応OS: Linux, macOS, Windows")

def parse_args():
    parser = argparse.ArgumentParser(description='random-desktop-fake-os-memo: 謎のOSメモをランダム通知')
    subparsers = parser.add_subparsers(dest='command', required=False)

    subparsers.add_parser('log', help='謎のメモを1件ランダム通知')
    subparsers.add_parser('list', help='メモ候補一覧を表示')
    subparsers.add_parser('summary', help='スキル概要を表示')
    return parser.parse_args()

def main():
    args = parse_args()
    if args.command is None or args.command == 'log':
        memo = pick_random_memo()
        print(f"[デスクトップ通知]\n{TITLE}: {memo}")
        notify(TITLE, memo)
    elif args.command == 'list':
        list_memos()
    elif args.command == 'summary':
        summary()
    else:
        print("[ERROR] 未知のコマンドです。--help を参照してください。")

if __name__ == '__main__':
    main()

references/reference.md

# 概要
このSkillは、クロスプラットフォームで動作するデスクトップ通知APIを活用し、完全ランダムな“謎のOSメモ”を投下します。実用性は一切なく、ユーザー体験や遊び心を重視した設計です。

# 公式ドキュメント抜粋
- Linux: `notify-send` コマンドはFreedesktop.orgの通知仕様に準拠
- macOS: `osascript` によるAppleScript通知
- Windows: Python `win10toast`ライブラリ

# 利用例
- `/random-desktop-fake-os-memo` コマンドで即座に通知
- 会話中に「通知」「演出」などのキーワードで自動発動

# 注意点
- 通知内容は毎回異なり、再現性はありません
- ローカル通知のみで、履歴や保存機能はありません
- Windows利用時は`pip install win10toast`が必要

# 設計方針
通知APIのみを利用し、OSごとに最も標準的な方法で通知を実現。怪文書リストは拡張可能で、今後のバリエーション追加も容易です。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/random-desktop-fake-os-memo .claude/skills/random-desktop-fake-os-memo

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-desktop-fake-os-memo で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
  • 通知内容が本当に毎回完全ランダムか?
  • 通知APIの動作がOS環境ごとに安定するか?
  • 実用性ゼロの怪文書感が十分か?

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

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

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

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

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