Codexで作業開始を楽しく演出する謎のOS起動音活用ガイド

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

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

AI Coding Workflow を日々回していると、Codex の context 管理や session の切り替えで「またか…」と思う瞬間が多い。特に通知・演出・OS連携系の機能が薄い環境では、作業開始時の「気分転換」や「区切り感」が得られず、単調なリズムに陥りがち。以下のような悩みがよく挙がる:

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

さらに、編集やターミナル起動時に「何かしらの演出」がないと、onboarding や session 切り替えのタイミングが曖昧になり、集中力の切り替えも難しい。地味に「今から作業開始!」というスイッチが欲しいと感じるユーザーも多い。

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

一言サマリ: ターミナルやエディタを起動するたびにSkill。

このSkillを導入すると、ターミナルやエディタを開くたびに“謎のOS起動音”が毎回ランダムで再生され、作業開始のタイミングを明確に演出できる。具体的には以下のようなメリットが得られる:

  • 作業開始時に毎回異なるサウンドで context 切り替えを体感できるため、AI coding workflow のリズムを作りやすい
  • onboarding 時や session 再開時、Codex の repository understanding の「区切り」を自然に演出できる
  • monorepo や directory 構造が複雑な repo でも、起動音で「今どこから始めたか」を意識しやすくなる
  • 長時間の long context 作業でも、音によるリフレッシュ効果で stale context を防ぐ一助になる
  • 音源は wav/mp3 をローカルに追加するだけなので、path management や memory 設計を邪魔しない
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-boot-sound .agents/skills/random-os-fake-boot-sound

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

Skill を有効化した場合の出力イメージを、3つの典型的なシーンで示す。

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


# /skills menu で Skill を選択
> random-os-fake-boot-sound を有効化

[INFO] Skill "random-os-fake-boot-sound" が起動しました。
[BOOT SOUND] 再生中: mysterious_os_98_chime.wav
[CONTEXT] 現在の repository: ./my-monorepo
[CONTEXT] directory: ./packages/core
[NOTICE] 作業開始タイミングを音で演出します。

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


> cd packages/frontend
> code .

[BOOT SOUND] 再生中: spring_bounce.mp3
[CONTEXT] directory: ./packages/frontend
[INFO] monorepo の package 移動を検知しました。
[CONTEXT] repository understanding を更新します。

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


> 新しい session を開始

[BOOT SOUND] 再生中: crow_caw.wav
[NOTICE] どこかのOSが起動したような気分を演出中…
[INFO] context: ./src/utils
[MEMO] サウンドは 

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-boot-sound/
├── SKILL.md
├── scripts/
│   └── random_os_fake_boot_sound.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_boot_sound.py random-os-fake-boot-sound: 起動時に毎回ランダムなサウンドを再生するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-boot-sound
description: ターミナルやエディタの起動時、または /skills menu や random-os-fake-boot-sound への明示呼び出し時に、毎回ランダムなサウンド(wav/mp3)が再生されます。triggerType: semantic-or-explicit。
---

# 機能概要
random-os-fake-boot-soundは、あなたの作業開始時(ターミナルやエディタ起動時など)に、毎回ランダムな“謎のOS起動音”を再生するSkillです。サウンドはローカルのwav/mp3ファイルから選ばれ、懐かしいPCの起動音風から、バネ音・カラスの鳴き声・意味不明な電子音までバリエーション豊か。作業開始の雰囲気を一新し、まるで“どこかの知らないOS”にいるような体験を演出します。

# 使い方
- 明示呼び出し例: `/skills menu` でSkill一覧から選択、または `$ random-os-fake-boot-sound` を直接実行。
- 暗黙発動キーワード例: 「エディタ起動」「ターミナル起動」「新規セッション開始」などのイベント時に自動発動。
- サウンドファイルは `.agents/skills/random-os-fake-boot-sound/sounds/` 配下に任意のwav/mp3を配置してください。

# 出力例
```
[INFO] Boot sound files found: 7
[INFO] Selected: mysterious_beep.mp3
[PLAY] Now playing: mysterious_beep.mp3
[OK] Boot sound playback finished.
```

# 注意点
- サウンドファイルはローカル保存が必要です(著作権に注意)。
- 音源の追加・差し替えは `sounds/` フォルダにファイルを置くだけ。
- OSによって一部音声再生機能が制限される場合があります。
- 実用性はありません。混乱や驚きを演出するためのSkillです。

# 参考資料
- 公式Pythonドキュメント: [playsound](https://pypi.org/project/playsound/), [os](https://docs.python.org/ja/3/library/os.html), [random](https://docs.python.org/ja/3/library/random.html)
- 詳細設計・注意事項は references/design_notes.md を参照してください。

scripts/random_os_fake_boot_sound.py

import os
import sys
import random
import argparse
import time

try:
    from playsound import playsound
except ImportError:
    print('[ERROR] playsound モジュールが見つかりません。\nインストール: pip install playsound')
    sys.exit(1)

SOUNDS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'sounds')
SUPPORTED_EXTENSIONS = ('.wav', '.mp3')


def find_sound_files():
    if not os.path.exists(SOUNDS_DIR):
        print(f'[ERROR] サウンドディレクトリが存在しません: {SOUNDS_DIR}')
        return []
    files = [f for f in os.listdir(SOUNDS_DIR)
             if f.lower().endswith(SUPPORTED_EXTENSIONS) and os.path.isfile(os.path.join(SOUNDS_DIR, f))]
    return files


def select_random_sound(files):
    if not files:
        return None
    return random.choice(files)


def play_sound(filename):
    filepath = os.path.join(SOUNDS_DIR, filename)
    try:
        print(f'[PLAY] Now playing: {filename}')
        playsound(filepath)
        print('[OK] Boot sound playback finished.')
    except Exception as e:
        print(f'[ERROR] サウンド再生に失敗しました: {e}')


def list_sounds(files):
    if not files:
        print('[INFO] サウンドファイルが見つかりません。')
        return
    print('[INFO] 利用可能なサウンドファイル:')
    for f in files:
        print(f'  - {f}')


def summary(files):
    print('--- random-os-fake-boot-sound summary ---')
    print(f'サウンドディレクトリ: {SOUNDS_DIR}')
    print(f'ファイル数: {len(files)}')
    if files:
        print('ファイル一覧:')
        for f in files:
            print(f'  - {f}')
    else:
        print('(サウンドファイルがありません)')


def main():
    parser = argparse.ArgumentParser(description='random-os-fake-boot-sound: 起動時に毎回ランダムなサウンドを再生するスクリプト')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='ランダムなサウンドを再生')
    parser_list = subparsers.add_parser('list', help='利用可能なサウンドファイル一覧を表示')
    parser_summary = subparsers.add_parser('summary', help='サウンドディレクトリの概要を表示')
    parser_test = subparsers.add_parser('test', help='すべてのサウンドを順番に再生(テスト用)')

    args = parser.parse_args()
    files = find_sound_files()

    if args.command == 'log' or args.command is None:
        print(f'[INFO] Boot sound files found: {len(files)}')
        if not files:
            print('[WARN] サウンドファイルがありません。sounds/ フォルダにwav/mp3を追加してください。')
            sys.exit(1)
        selected = select_random_sound(files)
        print(f'[INFO] Selected: {selected}')
        play_sound(selected)
    elif args.command == 'list':
        list_sounds(files)
    elif args.command == 'summary':
        summary(files)
    elif args.command == 'test':
        if not files:
            print('[WARN] サウンドファイルがありません。')
            sys.exit(1)
        for f in files:
            print(f'--- 再生: {f} ---')
            play_sound(f)
            time.sleep(0.5)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
random-os-fake-boot-soundは、作業開始時に“謎OSの起動音”を毎回ランダムで再生することで、日常の開発環境に遊び心や混乱をもたらすSkillです。音源はユーザーが自由に追加・差し替え可能。

# 公式ドキュメント抜粋
- [playsound](https://pypi.org/project/playsound/) : シンプルなPython音声再生ライブラリ。OS標準の再生機能を利用。
- [os](https://docs.python.org/ja/3/library/os.html): ファイル・ディレクトリ操作用標準ライブラリ。
- [random](https://docs.python.org/ja/3/library/random.html): ランダム選択用標準ライブラリ。

# 利用例
- ターミナル起動時に自動でサウンドを鳴らす
- /skills menu から明示的に呼び出して楽しむ

# 注意点
- サウンドファイルは必ずローカル保存し、著作権に注意してください。
- OSや環境によっては音声再生がサポートされない場合があります。

# 設計方針
- シンプルなディレクトリ構成とCLIサブコマンドで、サウンド管理やテストも容易に。
- 音源差し替えは sounds/ フォルダへのファイル追加のみで完結。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-boot-sound .agents/skills/random-os-fake-boot-sound

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-boot-sound
# 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 との連携設計はどうあるべきか?
  • 起動時に毎回ランダムなサウンドが再生されるか
  • wav/mp3音源を簡単に差し替え可能か
  • 起動フックやスクリプト連携のシンプルさは十分か

実際に Codex で試した検証ログは Codexで毎回違う謎のOS起動音を鳴らしてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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