Codexでエラー通知をユーモア化して開発疲れをリフレッシュする方法

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

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

AIコーディングワークフローの中で、Codex を使っていると地味にストレスが溜まる瞬間が多々あります。特に長時間の開発や大規模リポジトリの作業では、エラーや通知の扱いが単調で、気分転換の余地がほとんどありません。そんなとき、ちょっとした演出や遊び心があれば…と思ったことはありませんか。
Codex の通知やエラーメッセージは、どうしても「作業の中断=ストレス源」になりがちです。しかも、複雑な repo や monorepo を相手にしていると、context や path 管理、directory 移動のたびに説明し直し、重要な情報が context の海に埋もれてしまうことも。毎回同じようなメッセージにうんざりしてしまうのも、「あるある」です。

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

特に「通知・演出・OS連携」系の悩みとしては、エラー通知が機械的で味気なく、作業のモチベーション維持や気分転換のきっかけにならないという点が挙げられます。ちょっとした笑いや“謎のカタカナ専門用語”で現場の空気を変えたい、そんな声に応えるSkillです。

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

一言サマリ: このスキルは、Codexのエラー通知を“謎のカタカナ専門用語”でデスクトップ演出し、バグ疲れをギャグでリフレッシュするSkill。

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

  • エラー発生時にOS風のカタカナ解説が毎回ランダム表示され、作業現場の雰囲気を一気に和らげる
  • 本来のエラー内容は別途確認できるため、冗談通知で混乱せずにAI coding workflowを継続できる
  • 長時間のsessionやmonorepo移動時の“通知疲れ”を、遊び心ある演出でリセットできる
  • onboardingやペアプロ時に、場を和ませるジョークアイスブレイクとして活用できる
  • Skillの導入だけで、Codexの通知体験をrepository understandingやcontext管理の枠を超えてカスタマイズ可能
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-error-kaiseki .agents/skills/random-os-error-kaiseki

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

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

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


# /skills menu で random-os-error-kaiseki を有効化

> npm run dev

[通知] パケット・シンフォニーがバッファ・カタストロフを検出しました。
詳細: /src/server/handler.ts 内で未定義エラーが発生

[Codex] 実際のエラー: TypeError: Cannot read property 'foo' of undefined

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


> cd packages/api && yarn test

[通知] デジタル・アンビエントがオーバーフローしました。
詳細: packages/api/tests/user.test.ts 実行中

[Codex] 実際のエラー: ReferenceError: user is not defined

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


> git commit -am "fix: typo"

[通知] メタ・アグリゲータがシグナル・パラドックスに遭遇しました。
詳細: .git/hooks/pre-commit でエラー

[Codex] 実際のエラー: Pre-commit hook failed: ESLint errors detected

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる エラー通知が毎回違うカタカナギャグで、リフレッシュ効果と記憶の切り替えがしやすい

発動方式

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

Skill の中身を全部見せる

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

.agents/skills/random-os-error-kaiseki/
├── SKILL.md
├── scripts/
│   └── random_os_error_kaiseki.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_error_kaiseki.py コマンド実行時のエラーをカタカナ謎解説で通知するSkill
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-error-kaiseki
description: コマンド実行時にエラーが発生した場合、CodexはこのSkillを発動し、エラー内容を“OS風カタカナ謎解説”としてデスクトップ通知します。trigger: error, exception, fail, crash, notify。
---

# 機能概要
random-os-error-kaisekiは、コマンドやスクリプト実行時に発生したエラーを、技術者風の意味不明なカタカナ造語で“解説”し、デスクトップ通知として演出するジョーク系Skillです。通常のエラーメッセージでは味わえない、開発現場に混乱と笑いをもたらすことを目的としています。バグやクラッシュ時に、システム管理者やエンジニアの疲れた心を強制リフレッシュします。

# 使い方
- 明示呼び出し: `/skills random-os-error-kaiseki` またはスキルメニューから選択
- 暗黙発動: コマンド実行時に `error`, `exception`, `fail`, `crash`, `notify` などのキーワードが含まれるエラーが発生した場合、自動で発動します。

# 出力例
```
$ python broken_script.py
Traceback (most recent call last):
  File "broken_script.py", line 1, in <module>
    raise ValueError("バグ発生!")
ValueError: バグ発生!

[通知] パケット・シンフォニーがバッファ・カタストロフを検出しました
[通知] デジタル・アンビエントがオーバーフローしました
[通知] システム・パラダイムのカーネル・リゾナンスが不正です
[通知] メモリ・エクリプスがプロトコル・フラクタルを阻害しました
```

# 注意点
- 通知はローカル環境のデスクトップ通知APIを利用します。SSHやヘッドレス環境では表示されません。
- 実際のエラー内容は標準出力にそのまま表示され、通知とは別に確認可能です。
- 通知文は毎回ランダム生成されますが、内容に技術的な意味はありません。
- Windows/macOS/Linuxの主要デスクトップ環境で動作確認済み。

# 参考資料
- [Python公式: notifications](https://docs.python.org/ja/3/library/subprocess.html)
- references/design_notes.md も参照

scripts/random_os_error_kaiseki.py

import sys
import subprocess
import argparse
import random
import os
import platform
import traceback
from typing import List

KATAKANA_TERMS_1 = [
    "パケット・シンフォニー",
    "デジタル・アンビエント",
    "メモリ・エクリプス",
    "カーネル・リゾナンス",
    "プロトコル・フラクタル",
    "バッファ・カタストロフ",
    "システム・パラダイム",
    "データ・スペクトラム",
    "ストリーム・コンダクター",
    "ロジック・オペランド",
    "アーキテクチャ・クロニクル",
    "ノード・オーケストラ",
    "プロセス・インシデント",
    "セグメント・エクリプス",
    "スレッド・コンフリクト"
]
KATAKANA_TERMS_2 = [
    "バッファ・カタストロフを検出しました",
    "オーバーフローしました",
    "カーネル・リゾナンスが不正です",
    "プロトコル・フラクタルを阻害しました",
    "パラダイム・シフトが発生しました",
    "メモリ・リークを観測しました",
    "データ・コリジョンが発生しました",
    "ノード・フェーズが崩壊しました",
    "ストリーム・インシデントを検出しました",
    "ロジック・パルスが消失しました",
    "アーキテクチャ・エラーが発生しました",
    "オペランド・アノマリーを記録しました",
    "プロセス・カスケードが停止しました",
    "セグメント・デグレードを検出しました",
    "スレッド・パニックが発生しました"
]


def generate_katakana_error() -> str:
    part1 = random.choice(KATAKANA_TERMS_1)
    part2 = random.choice(KATAKANA_TERMS_2)
    return f"{part1}{part2 if part2.startswith('が') or part2.startswith('を') else 'が' + part2}"


def notify_desktop(message: str):
    system = platform.system()
    if system == "Darwin":  # macOS
        script = f'display notification "{message}" with title "random-os-error-kaiseki"'
        subprocess.run(["osascript", "-e", script], check=False)
    elif system == "Linux":
        subprocess.run(["notify-send", "random-os-error-kaiseki", message], check=False)
    elif system == "Windows":
        try:
            from win10toast import ToastNotifier
            toaster = ToastNotifier()
            toaster.show_toast("random-os-error-kaiseki", message, duration=5)
        except ImportError:
            print("[通知失敗] win10toastが必要です: pip install win10toast", file=sys.stderr)
    else:
        print(f"[通知未対応OS] {system}", file=sys.stderr)


def run_and_kaiseki(cmd: List[str]):
    try:
        proc = subprocess.run(cmd, capture_output=True, text=True, check=True)
        print(proc.stdout, end='')
        print(proc.stderr, end='')
    except subprocess.CalledProcessError as e:
        print(e.stdout, end='')
        print(e.stderr, end='')
        print(f"[error] コマンド実行に失敗しました: {e}", file=sys.stderr)
        # エラー時に謎カタカナ通知
        for _ in range(random.randint(1, 2)):
            msg = generate_katakana_error()
            notify_desktop(msg)
    except Exception as ex:
        print(traceback.format_exc(), file=sys.stderr)
        msg = generate_katakana_error()
        notify_desktop(msg)


def list_examples():
    print("--- random-os-error-kaiseki 出力例 ---")
    for _ in range(5):
        print(f"[通知] {generate_katakana_error()}")


def main():
    parser = argparse.ArgumentParser(description="コマンド実行時のエラーをカタカナ謎解説で通知するSkill")
    subparsers = parser.add_subparsers(dest="command")

    parser_run = subparsers.add_parser("run", help="コマンドを実行し、エラー時に謎カタカナ通知")
    parser_run.add_argument("cmd", nargs=argparse.REMAINDER, help="実行するコマンド")

    parser_list = subparsers.add_parser("list", help="ランダムなカタカナエラー例を表示")

    args = parser.parse_args()

    if args.command == "run":
        if not args.cmd:
            print("コマンドを指定してください", file=sys.stderr)
            sys.exit(1)
        run_and_kaiseki(args.cmd)
    elif args.command == "list":
        list_examples()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
random-os-error-kaisekiは、コマンド実行時のエラー発生時に、実際のエラー内容とは無関係な“OS風カタカナ造語”による謎解説をデスクトップ通知として表示するジョークSkillです。開発現場でのストレス解消や、エラー時の雰囲気緩和を目的としています。

# 公式ドキュメント抜粋
- [Python subprocess](https://docs.python.org/ja/3/library/subprocess.html)
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/latest/)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)

# 利用例
- バッチ処理やCI/CDパイプラインでエラー発生時に自動通知
- チームのペアプロやデバッグセッションでのリフレッシュ用

# 注意点
- 通知はローカルデスクトップでのみ表示され、SSHやヘッドレス環境では無効です。
- Windowsはwin10toastライブラリが必要です。

# 設計方針
- 技術的な意味を持たないカタカナ造語を毎回ランダム生成
- 本来のエラー内容は標準出力・標準エラーにそのまま出力
- 拡張性を考慮し、カタカナ語リストは編集可能

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-error-kaiseki .agents/skills/random-os-error-kaiseki

.agents/skills/random-os-error-kaiseki の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/random-os-error-kaiseki
# 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 との連携設計はどうあるべきか?
  • 実際にエラーが出た際、通知が必ずランダムなカタカナ解説になるか?
  • 本来のエラー内容が通知とは別に確認できるか?
  • 通知文面が毎回違うパターンで生成されること

実際に Codex で試した検証ログは Codexで謎カタカナエラー通知を試してみた!バグ疲れに笑いを届ける演出 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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