Codexで業務中の通知演出を活用して開発現場を盛り上げる方法

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

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

Codex を日常的に使っていると、真面目な開発現場にも独特の「緊張感」や「マンネリ感」が漂う瞬間が訪れます。特に通知や演出系の機能は、単調になりがちな AI coding workflow をリフレッシュするきっかけになりえますが、現状の Codex にはそうした遊び心がなかなか組み込まれていません。集中している時ほど、ふとしたタイミングで「何か一発ネタがほしい」と感じることも多いはずです。

  • Codex が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした context 管理や path management の悩みは開発者なら誰もが経験しますが、たまには「突拍子もない」「意味不明な」演出で場の空気を変えたいと感じることも。通知・演出・OS連携 Skill の需要は、単なる workflow 効率化だけでなく、オンボーディングやチームの雰囲気作りにも広がっています。

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

一言サマリ: 突然Skill。

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

  • 開発 workflow の合間に、RPG風の「OSソフトウェアアップデート vs バグ魔王バトル」演出が突如発動し、真面目な session や repo 操作が一瞬だけカオスな世界観に変わる
  • 進捗バーや通知が「勇者」「魔王」など context に即した実況に変わり、長時間の作業や onboarding の空気をリフレッシュできる
  • 毎回バトル展開やセリフがランダム生成されるため、同じ repository でも飽きずに楽しめる
  • 通知・演出が directory や path management のタイミングで発動するため、repo 理解や context 切り替え時にもアクセントになる
  • 「Skill を入れるだけ」で、面倒な設定や追加コマンド不要。Codex の AI coding workflow に自然に組み込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-software-update-boss-fight .agents/skills/random-os-fake-software-update-boss-fight

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

シーン1: session 開始時 (プロジェクト初動で)


# /skills menu or random-os-fake-software-update-boss-fight mention
> プロジェクトを新規で開始します

[OS通知] 『謎のソフトウェアアップデート』が始まります…
[バトル実況] 勇者アップデート、伝説のバグ魔王に挑む!
[進捗バー] 進行中: 0%... 17%... 42%...
[バトル実況] バグ魔王の逆襲!勇者、パッチの剣を抜く!
[進捗バー] 68%... 89%...
[バトル実況] 勇者、最終パッチを適用!バグ魔王、バグ爆発!
[結果] 勇者アップデートの勝利!システムが正常に保たれました。

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


> packages/api/ から packages/frontend/ に移動

[OS通知] 『OSアップデートバトル』が発生!
[バトル実況] 勇者アップデート、フロントエンドのバグ魔王と遭遇!
[進捗バー] 10%... 33%... 66%...
[バトル実況] バグ魔王「エラーの嵐を食らえ!」 勇者「Lintの盾で防御!」
[進捗バー] 95%...
[バトル実況] 勇者、バグ魔王をデバッグの炎で撃破!
[結果] 勝利!packages/frontend/ の context がクリアになりました。

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


> なんか面白いことして

[OS通知] 『伝説のアップデートバトル』が突発発生!
[バトル実況] 勇者アップデート、未知のバグ魔王とバトル開始!
[進捗バー] 5%... 50%... 75%...
[バトル実況] バグ魔王「stack overflow の呪い!」 勇者「パッチの剣で一刀両断!」
[進捗バー] 100%...
[バトル実況] 勇者…全滅。バグ魔王の勝利!次回のアップデートをお待ちください。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 進捗や context 切り替え時に演出が入り、集中力リセット・重要情報の再認識につながる

発動方式

明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-software-update-boss-fight/
├── SKILL.md
├── scripts/
│   └── os_update_boss_fight.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/os_update_boss_fight.py OSソフトウェアアップデート vs バグ魔王 RPGバトル実況スクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-software-update-boss-fight
description: このSkillは「アップデート」「バグ」「ソフトウェア更新」などの通知・進捗バー・OS演出に関する文脈や、/skills コマンドや random-os-fake-software-update-boss-fight の明示呼び出し時に発動します。開発現場での息抜きや、会話にRPG風の茶番を挟みたい場合に最適です。
---

# 機能概要
このSkillは、OSのソフトウェアアップデート風の通知や進捗バーをRPGバトル実況に変換します。突然画面端やメニューバーで「アップデート勇者」と「伝説のバグ魔王」の熱い戦いが始まり、進捗バーや通知でバトル実況が展開されます。バトルの展開やセリフは毎回ランダムに変化し、最後は「勝利」か「全滅」で締めるカオスな演出を提供。開発現場の緊張感を一瞬だけRPGの世界に変え、業務中のリフレッシュやチームの雰囲気作りに役立ちます。

# 使い方
- 明示呼び出し: `/skills random-os-fake-software-update-boss-fight` または `/skills menu` から選択
- 暗黙発動: 「アップデート」「バグ」「ソフトウェア更新」「パッチ」などのキーワードが会話や通知に含まれる場合、自動で発動

# 出力例
```
[ソフトウェアアップデート開始]
勇者アップデートが伝説のバグ魔王に挑む!
進捗: 12% - バグ魔王の逆襲!勇者、パッチの剣を抜く!
進捗: 47% - 勇者、デバッグの呪文を唱えた!バグ魔王が混乱した!
進捗: 89% - 勇者、最終パッチを投入!バグ魔王が動揺している!
進捗: 100% - 勇者の勝利!伝説のバグ魔王を討伐!
[アップデート完了]
```

# 注意点
- 本Skillは演出目的で実際のOSアップデートは行いません。
- 出力は一時的で、ローカル保存や履歴管理は行いません。
- 一部環境では通知が表示されない場合があります。
- 業務の進行を妨げない範囲でご利用ください。

# 参考資料
- references/design_notes.md 参照
- 公式: https://docs.python.org/ja/3/library/random.html, https://docs.python.org/ja/3/library/time.html

scripts/os_update_boss_fight.py

import argparse
import random
import sys
import time
from typing import List

# バトル実況のテンプレート
BATTLE_EVENTS = [
    "バグ魔王の逆襲!勇者、パッチの剣を抜く!",
    "勇者、デバッグの呪文を唱えた!バグ魔王が混乱した!",
    "バグ魔王、クラッシュの闇を放つ!勇者が耐えた!",
    "勇者、リファクタリングの光でバグ魔王を照らす!",
    "バグ魔王が無限ループ攻撃!勇者、冷静にbreak!",
    "勇者、最終パッチを投入!バグ魔王が動揺している!",
    "バグ魔王、レガシーコードの罠を仕掛ける!",
    "勇者、テストケースの嵐!バグ魔王がひるんだ!",
    "バグ魔王、未定義動作で反撃!勇者が回避!",
    "勇者、CI/CDの力で連続攻撃!"
]

VICTORY_MESSAGES = [
    "勇者の勝利!伝説のバグ魔王を討伐!",
    "アップデート勇者がバグ魔王を完全修正!",
    "バグ魔王、ついにバグトラッカーに封印される!"
]

DEFEAT_MESSAGES = [
    "バグ魔王の勝利!アップデート勇者は全滅した…",
    "勇者、バグの嵐に飲まれ力尽きた…",
    "伝説のバグ魔王、システムを支配!全滅…"
]

INTRO_MESSAGES = [
    "[ソフトウェアアップデート開始]",
    "勇者アップデートが伝説のバグ魔王に挑む!"
]

END_MESSAGES = [
    "[アップデート完了]",
    "[アップデート失敗]"
]

PROGRESS_STEPS = [12, 23, 35, 47, 58, 66, 78, 89, 100]


def print_battle_sequence(verbose: bool = False):
    print(random.choice(INTRO_MESSAGES))
    print(random.choice(INTRO_MESSAGES[1:]))
    last_event = None
    for idx, progress in enumerate(PROGRESS_STEPS):
        # ランダムな実況イベント
        if progress < 100:
            event = random.choice(BATTLE_EVENTS)
            # 直前と同じ実況を避ける
            while event == last_event:
                event = random.choice(BATTLE_EVENTS)
            last_event = event
            print(f"進捗: {progress}% - {event}")
            if verbose:
                time.sleep(0.5 + random.uniform(0, 0.7))
        else:
            # 勝敗を決定
            win = random.choice([True, False])
            if win:
                print(f"進捗: 100% - {random.choice(VICTORY_MESSAGES)}")
                print(END_MESSAGES[0])
            else:
                print(f"進捗: 100% - {random.choice(DEFEAT_MESSAGES)}")
                print(END_MESSAGES[1])
            if verbose:
                time.sleep(0.8)


def list_events():
    print("--- バトル実況イベント一覧 ---")
    for e in BATTLE_EVENTS:
        print(f"- {e}")
    print("\n--- 勝利メッセージ ---")
    for v in VICTORY_MESSAGES:
        print(f"- {v}")
    print("\n--- 敗北メッセージ ---")
    for d in DEFEAT_MESSAGES:
        print(f"- {d}")


def summary():
    print("random-os-fake-software-update-boss-fight Skill 概要:")
    print("- OSアップデート風の進捗バーをRPGバトル実況に変換")
    print("- バトル展開やセリフは毎回ランダム")
    print("- 勝敗もランダムで決定")
    print("- 明示/暗黙トリガー両対応")
    print("- 実際のアップデートは行われません")


def main():
    parser = argparse.ArgumentParser(
        description="OSソフトウェアアップデート vs バグ魔王 RPGバトル実況スクリプト"
    )
    subparsers = parser.add_subparsers(dest='command')

    # battleコマンド
    parser_battle = subparsers.add_parser('battle', help='RPGバトル実況を開始')
    parser_battle.add_argument('--verbose', action='store_true', help='進行をゆっくり表示')

    # listコマンド
    parser_list = subparsers.add_parser('list', help='実況/勝敗メッセージ一覧を表示')

    # summaryコマンド
    parser_summary = subparsers.add_parser('summary', help='Skillの概要を表示')

    args = parser.parse_args()

    if args.command == 'battle':
        print_battle_sequence(verbose=args.verbose)
    elif args.command == 'list':
        list_events()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()


if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、OSアップデートの進捗バーや通知演出をRPGバトル実況に変換することで、日常の開発現場に遊び心とリフレッシュ効果をもたらします。バトルの進行やセリフは毎回ランダムで生成され、最後に勝敗もランダム決定されます。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/ja/3/library/random.html
- Python argparse: https://docs.python.org/ja/3/library/argparse.html
- time.sleep: https://docs.python.org/ja/3/library/time.html

# 利用例
- Slackやチャットで「アップデート」や「バグ」などの話題が出た際、/skillsコマンドで明示的に呼び出し
- チームの朝会やリリース前後の息抜きイベントとして利用

# 注意点
- 実際のアップデートやファイル操作は行いません。
- 出力は一時的で、ローカル保存や履歴管理はありません。
- 業務の妨げにならない範囲でご利用ください。

# 設計方針
- シンプルなCLI構成で、明示/暗黙両トリガーに対応
- バトル実況や勝敗演出は毎回ランダム生成
- 拡張性を考慮し、イベントやメッセージはリストで管理

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-software-update-boss-fight .agents/skills/random-os-fake-software-update-boss-fight

.agents/skills/random-os-fake-software-update-boss-fight の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/random-os-fake-software-update-boss-fight
# SKILL.md, scripts/, references/, README.md があればOK

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

新しいSkillが自動で認識されます。リスト確認したい場合は /skills menu or $skill-name mention と Skill 名で出てきます。

5. 動作確認

/skills menu or $skill-name mention で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Codex に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Codex に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Codex 固有の引っかかり: description のセマンティックマッチ精度が要件次第
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • AGENTS.md との連携設計はどうあるべきか?
  • 進捗バーや通知がRPG風バトル実況になっているか
  • バトルの展開やセリフが毎回ランダムで変化するか
  • 最後に勝敗がランダムで決定し、きちんと通知されるか

実際に Codex で試した検証ログは Codexで通知・演出・OS連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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