Claude Codeで謎のパッチノート通知を自動化するSkill構築手順

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

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

Claude Code を日常的に利用していると、開発フローの中で思わず「またか…」と感じる瞬間が多々あります。特に長時間作業や大規模リポジトリを扱う場合、context や directory、repository understanding のズレがボディブローのように効いてきます。そんな中、ふとしたタイミングで「何か面白いこと起きないかな」と思うことも。集中が切れた時や、同じようなパス管理・path management の繰り返しで気分転換したい場面も少なくありません。

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

こうした悩みの合間に、ちょっとした遊び心や「何か現実離れしたことが起きてもいいのに」という気持ちが芽生えるのも、Claude Code ユーザーならではのあるあるです。

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

一言サマリ: このスキルは、作業中に突然“謎のOS公式パッチノート”風の通知を送り、開発現場に不可解な笑いと一瞬の混乱をもたらします。

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

  • 長時間のAI coding workflowや単調な path 管理の合間に、現実と虚構が交錯するユーモアでリフレッシュできる
  • monorepoや複雑な repository 構造でも、思わぬタイミングで謎パッチノートが現れ、オンボーディングや context 復元の合間に気分転換できる
  • 「Altキーで未来が見える」など、ありえない機能追加やバグ修正が context に混ざり、会話や作業の流れにちょうどいい“ノイズ”として作用する
  • Skill の通知が毎回異なり、同じ内容に飽きることがない
  • 通知形式がOS風・CLI風で、repository understanding の合間に自然に溶け込む
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-mysterious-patch-notes .claude/skills/random-os-fake-mysterious-patch-notes

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

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

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


# /random-os-fake-mysterious-patch-notes
> 今日から新しい機能追加タスクに入ります

===== OS Patch Notes v12.8.4 (非公開) =====
新機能: Altキーを2回押すと未来のコミットが見えます
改善: スペースキーの跳躍力が3%向上しました
既知の問題: settings.jsonを編集するとたまに幸運が訪れます
セキュリティ: README.mdに書かれた秘密は自動で保護されます
-------------------------------------------
(この通知は自動生成されました)

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


> packages/api/ から packages/web/ に移動します

===== OS Patch Notes v13.0.1 (限定公開) =====
新機能: /packages/web/src/ でファイルを開くと、時空が歪みます
改善: monorepo横断時のcontext切替がより曖昧になりました
既知の問題: package.jsonのdependenciesに謎の依存が増える場合があります
その他: ディレクトリ移動時、たまに"やる気"が回復します
-------------------------------------------
(この通知は自動生成されました)

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


> ちょっと気分転換したい

===== OS Patch Notes v99.42.0 (極秘) =====
新機能: Enterキー長押しで宇宙と交信できます
改善: context windowの伸縮性が1.5倍に
既知の問題: たまにAIが詩的な返答を返します
修正: /random/unknown/path/ の幽霊ファイルを封印
-------------------------------------------
(この通知は自動生成されました)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 不意打ちの通知で集中がリセット、workflowに変化が生まれる

発動方式

明示呼び出し (/random-os-fake-mysterious-patch-notes) と暗黙発動 (「謎のOSパッチノート」「変な通知」「パッチノートっぽいものが欲しい」など description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-mysterious-patch-notes/
├── SKILL.md
├── scripts/
│   └── mysterious_patch_notes.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/mysterious_patch_notes.py 謎のOSパッチノート生成スクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-mysterious-patch-notes
description: 作業中やコミット時など、"パッチノート"や"OSアップデート"などのキーワードが出現した際や、/random-os-fake-mysterious-patch-notes コマンドが明示的に呼ばれた場合に発動。開発者の集中を一瞬だけ乱すための演出用途に最適。
---

# 機能概要
このSkillは、作業中に突如として「謎のOS公式・怪しすぎるパッチノート通知」を生成・表示します。毎回、実在しない新機能や不可解なバグ修正が混在した内容が自動生成され、現実と虚構の境界を曖昧にします。開発者の作業フローに一瞬の混乱や笑いをもたらし、集中しすぎた頭をリフレッシュする効果を狙っています。

# 使い方
- 明示呼び出し: `/random-os-fake-mysterious-patch-notes`
- 暗黙発動: "パッチノート", "OSアップデート", "バージョンアップ", "新機能", "リリースノート" などのキーワードを含む会話やコミットメッセージ、または定期的なタイミングで自動発動します。

# 出力例
```
[OS Patch Notes 4.2.7]
新機能: Altキーで未来の天気が予測可能になりました
改善: スペースキーの跳躍力を微増
既知の問題: たまに幸運が訪れることがあります
修正: シャットダウン時にまれに哲学的質問が表示されるバグを修正
---
[OS Patch Notes 5.0.1]
新機能: ターミナルが詩を詠むことがあります
改善: CapsLockの押下感を向上
既知の問題: 一部環境で現実逃避が加速する場合があります
```

# 注意点
- 本Skillは実際のシステムやアプリには一切影響しません。
- 通知内容は毎回異なり、完全に架空です。
- ローカルへの自動保存や履歴管理は行いません。
- 業務用途や正式なリリースノートには絶対に使用しないでください。

# 参考資料
- [references/design_notes.md](references/design_notes.md)
- [Python公式: random, argparse, subprocess](https://docs.python.org/3/library/)

scripts/mysterious_patch_notes.py

import random
import argparse
import sys
import os
import datetime
from typing import List

NEW_FEATURES = [
    "Altキーで未来の天気が予測可能になりました",
    "ターミナルが詩を詠むことがあります",
    "Ctrl+Zで時間を少しだけ巻き戻せるようになりました",
    "ファイル名に絵文字が使えるようになりました",
    "デスクトップのアイコンが気分で並び替わります",
    "CapsLockの状態が月齢に影響されます",
    "エクスプローラーが時々哲学的な質問を投げかけます",
    "スペースキーでジャンプ力が微増",
    "タスクバーに隠しミニゲームが追加されました",
    "スクリーンショットが自動でアート化されます"
]

IMPROVEMENTS = [
    "CapsLockの押下感を向上",
    "スペースキーの跳躍力を微増",
    "ファイル検索の速度を気分で向上",
    "通知音のランダム性を強化",
    "バッテリー残量表示がより曖昧に",
    "ウィンドウの角丸率を日替わりで調整",
    "ログイン画面の謎の安心感を改善",
    "システムフォントが時々変わります",
    "マウスポインタの追従性を気まぐれに最適化",
    "シャットダウン時の余韻を微調整"
]

KNOWN_ISSUES = [
    "たまに幸運が訪れることがあります",
    "一部環境で現実逃避が加速する場合があります",
    "ごく稀に画面が深呼吸します",
    "時折、未定義のエラーが自己解決します",
    "アップデート後に謎の既視感が発生することがあります",
    "システム時刻が未来に進みすぎる場合があります",
    "ごく稀にユーザーが賢くなります",
    "一部のキーが詩的に反応することがあります",
    "再起動時に猫の気配を感じることがあります",
    "ログイン時に運勢が左右されることがあります"
]

FIXES = [
    "シャットダウン時にまれに哲学的質問が表示されるバグを修正",
    "一部ユーザーで現実逃避が暴走する問題を修正",
    "スクリーンショットが逆さまになる不具合を修正",
    "ターミナルが突然歌い出す問題を修正",
    "CapsLockが勝手にONになる現象を修正",
    "ファイル名が詩になるバグを修正",
    "通知音が無音になることがある問題を修正",
    "マウスポインタが迷子になる現象を修正",
    "ログイン画面が時々謎の暗号を表示する問題を修正",
    "アップデート後に現実感が薄れるバグを修正"
]

VERSION_MAJOR = [4, 5, 6]
VERSION_MINOR = list(range(0, 10))
VERSION_PATCH = list(range(0, 20))


def generate_patch_note() -> str:
    version = f"{random.choice(VERSION_MAJOR)}.{random.choice(VERSION_MINOR)}.{random.choice(VERSION_PATCH)}"
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    features = random.sample(NEW_FEATURES, k=random.randint(1, 2))
    improvements = random.sample(IMPROVEMENTS, k=random.randint(1, 2))
    issues = random.sample(KNOWN_ISSUES, k=random.randint(1, 2))
    fixes = random.sample(FIXES, k=random.randint(1, 2))
    lines = [f"[OS Patch Notes {version}] ({now})"]
    if features:
        for f in features:
            lines.append(f"新機能: {f}")
    if improvements:
        for i in improvements:
            lines.append(f"改善: {i}")
    if issues:
        for k in issues:
            lines.append(f"既知の問題: {k}")
    if fixes:
        for fx in fixes:
            lines.append(f"修正: {fx}")
    return '\n'.join(lines)


def show_patch_note(note: str, to_terminal: bool = True, to_notify: bool = False):
    if to_terminal:
        print(note)
    if to_notify:
        # Try to use notify-send (Linux), fallback to terminal
        try:
            import subprocess
            subprocess.run([
                'notify-send',
                '謎のOSパッチノート',
                note
            ], check=True)
        except Exception:
            print("[通知失敗] ターミナル出力のみ対応しています。")


def list_past_notes(logfile: str):
    if not os.path.exists(logfile):
        print("ログファイルが存在しません。")
        return
    with open(logfile, 'r', encoding='utf-8') as f:
        print(f.read())


def save_patch_note(note: str, logfile: str):
    with open(logfile, 'a', encoding='utf-8') as f:
        f.write(note + '\n---\n')


def main():
    parser = argparse.ArgumentParser(description='謎のOSパッチノート生成スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    gen_parser = subparsers.add_parser('log', help='新しいパッチノートを生成・表示')
    gen_parser.add_argument('--notify', action='store_true', help='デスクトップ通知も行う (Linux/notify-send)')
    gen_parser.add_argument('--no-terminal', action='store_true', help='ターミナル出力を抑制')
    gen_parser.add_argument('--save', action='store_true', help='生成結果をローカルに保存')
    gen_parser.add_argument('--logfile', type=str, default='patch_note_history.log', help='保存先ファイル名')

    list_parser = subparsers.add_parser('list', help='過去のパッチノート履歴を表示')
    list_parser.add_argument('--logfile', type=str, default='patch_note_history.log', help='履歴ファイル名')

    args = parser.parse_args()

    if args.command == 'log':
        note = generate_patch_note()
        show_patch_note(note, to_terminal=not args.no_terminal, to_notify=args.notify)
        if args.save:
            save_patch_note(note, args.logfile)
    elif args.command == 'list':
        list_past_notes(args.logfile)
    else:
        parser.print_help()

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), [subprocess](https://docs.python.org/3/library/subprocess.html)

# 利用例
- ターミナルで `python mysterious_patch_notes.py log` を実行すると、架空のパッチノートが出力されます。
- `--notify` オプションでLinuxデスクトップ通知にも対応。
- `list` サブコマンドで過去の出力履歴を閲覧可能。

# 注意点
- 本Skillはジョーク用途であり、実際のシステムやアプリには影響しません。
- 履歴保存は任意です。自動保存や外部送信は行いません。

# 設計方針
- シンプルなCLI構造で、明示呼び出し・暗黙発動の両方に対応。
- 出力内容は毎回ランダム生成し、現実と虚構の境界を曖昧にする演出を重視しています。

導入手順

この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-mysterious-patch-notes .claude/skills/random-os-fake-mysterious-patch-notes

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-mysterious-patch-notes で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
  • OSパッチノート風の通知内容が毎回異なることを確認できるか?
  • 実在しない機能・バグ修正が適切に混在しているか?
  • 通知タイミングが自然で、開発フローを邪魔しないか?

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

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

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

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

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