Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日々使っていると、どうしても作業が単調になりがちです。session を再開したり、monorepo の中で directory を移動したりと、同じような操作や説明を繰り返すうちに、開発体験がマンネリ化してしまうことも少なくありません。
また、Codex の context や repository understanding が時折ズレてしまい、「またか…」と感じる瞬間も多いものです。そんな時に、ちょっとした遊び心やリフレッシュが欲しくなるのは開発者あるあると言えるでしょう。
- コミットや作業の区切りで、淡々としたターミナル出力しかなく、開発現場が無機質になりがち
- 長時間の作業や session 再開時、Codex の memory や context が stale になり、気分転換のきっかけがない
- monorepo で複数 package を跨ぐたび、repository の構造や path management の説明に追われて単調なやり取りが続く
- onboarding や directory 構造の説明時、毎回同じやり取りで飽きてしまう
- 真面目な開発 workflow の中に、ちょっとした「カオス」や笑いが差し込まれる余地がない
「もう少し遊び心が欲しい」「毎回同じ説明や操作ばかりで気分転換がない」と感じたことがあるなら、この Skill の出番です。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、コミット時に“神話的カオス”をターミナルに召喚し、開発現場に笑いとリフレッシュをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- コミットのたびに架空の神獣・幻獣が現れ、意味不明かつ理不尽な開発運勢コメントをランダム表示してくれる
- 単調な AI coding workflow や repository management の合間に、予測不能なジョークが挟まり、気分転換になる
- Codex の context や memory の切り替えタイミングで、ちょっとした「遊び」が入ることで、長時間作業のマンネリを防ぐ
- onboarding や directory 構造の説明時も、神獣コメントで場が和む
- Skill の発動は always なので、意識せずとも自然に“神話的カオス”が日常に溶け込む
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/commit-mythical-creature-announcer .agents/skills/commit-mythical-creature-announcer実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or commit-mythical-creature-announcer
> プロジェクト初期化完了。最初のコミットします。
[MYTHICAL CREATURE ANNOUNCER]
フェニックスが炎の中から蘇る…
本日は「バグ退散」の吉日。新しい directory での開発は運気上昇。
src/ 配下のファイルには幸運が宿る予感。
(開発運勢:大吉)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ へ移動してコミット
[MYTHICAL CREATURE ANNOUNCER]
ドラゴンが静かに眠りにつく…
今日は「進捗は静かに」。monorepo の package 跨ぎは慎重に。
repository understanding を見失わないように。
(開発運勢:中吉)
シーン3: お遊び的な使い方
> なんとなくコミットしてみる
[MYTHICAL CREATURE ANNOUNCER]
ユニコーンが首をかしげている…
「今日は無理せず、README.md だけ直そう。」
context が迷子になりがちなので、path management を意識して。
(開発運勢:凶)
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/commit-mythical-creature-announcer/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/commit-mythical-creature-announcer/
├── SKILL.md
├── scripts/
│ └── mythical_announcer.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/mythical_announcer.py |
コミット神獣アナウンサー |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: commit-mythical-creature-announcer
description: このSkillは、Gitコミット時や /skills menu などの明示的呼び出し時に発動します。コミットメッセージ入力や履歴確認など、"commit"、"コミット"、"push"などのキーワードを含む操作で自動的に動作します。
---
# 機能概要
commit-mythical-creature-announcerは、Gitコミットのたびにターミナルへ“架空の神獣・幻獣”と、その日の開発運勢をランダムに表示するSkillです。フェニックスやドラゴン、ユニコーンなどの神話生物が日替わりで現れ、理不尽かつ笑える運勢コメントを添えて、開発現場に謎の神話的カオスをもたらします。真面目な作業にちょっとした息抜きや会話のきっかけを提供し、チームの雰囲気を柔らかくします。
# 使い方
- 明示呼び出し例: `/skills menu` または `commit-mythical-creature-announcer` のメンションで発動。
- 暗黙発動: `commit`、`コミット`、`push` などの操作やキーワードを含むイベントで自動的に発動します。
# 出力例
```
🐉 ドラゴンが眠りから目覚めた…今日は進捗が静かに進む予感。
🦄 ユニコーンが首をかしげている…バグは慎重に扱いましょう。
🦅 フェニックスが炎とともに蘇る…本日はリファクタリング吉日!
🦖 ケルベロスが吠えている…コミットコメントは短めに。
🦋 グリフォンが空を舞う…今日はレビュー運が上昇中!
```
# 注意点
- 出力内容は完全にランダムで、実際の運勢や進捗には一切影響しません。
- ローカル環境でのみ動作し、外部サーバーへのデータ送信はありません。
- 長時間の連続コミット時は同じ神獣が出る場合もあります。
# 参考資料
- references/design_notes.md に設計方針や運勢コメント例を記載
- 公式Gitドキュメント: https://git-scm.com/doc
scripts/mythical_announcer.py
import sys
import argparse
import random
import datetime
import json
MYTHICAL_CREATURES = [
{
"name": "ドラゴン",
"ascii": r"""
/\_/\
( o.o )
> ^ <
""",
"comments": [
"ドラゴンが眠りから目覚めた…今日は進捗が静かに進む予感。",
"ドラゴンが炎を吐いた…コードレビューは熱くなりすぎ注意。",
"ドラゴンが空を舞う…新機能実装の吉日。"
]
},
{
"name": "ユニコーン",
"ascii": r"""
//\\
( oo )
\\//
||
""",
"comments": [
"ユニコーンが首をかしげている…バグは慎重に扱いましょう。",
"ユニコーンが虹をかける…今日はテストが通りやすい。",
"ユニコーンが静かに歩く…コミットメッセージは丁寧に。"
]
},
{
"name": "フェニックス",
"ascii": r"""
_ _
( \/ )
/ \
/_/\_\
""",
"comments": [
"フェニックスが炎とともに蘇る…本日はリファクタリング吉日!",
"フェニックスが羽ばたく…バグ退散の兆し。",
"フェニックスが灰から生まれる…古いコードに新たな命を。"
]
},
{
"name": "ケルベロス",
"ascii": r"""
(o_o)(o_o)(o_o)
/ \
/_/|\_\
""",
"comments": [
"ケルベロスが吠えている…コミットコメントは短めに。",
"ケルベロスが鎖を引きちぎる…今日は大胆な変更に注意。",
"ケルベロスが三つの頭で見守る…細かいバグに気をつけて。"
]
},
{
"name": "グリフォン",
"ascii": r"""
,_ _
|\\_,-~/
/ _ _ | ,--.
( @ @ ) / ,-'
\ _T_/-._( (
/ `. \
| _ \\
\ \ , / |
|| |-_\__ /
((_/`(____,-'
""",
"comments": [
"グリフォンが空を舞う…今日はレビュー運が上昇中!",
"グリフォンが羽を広げる…ドキュメント更新の好機。",
"グリフォンが地を駆ける…進捗が加速するかも。"
]
}
]
HISTORY_FILE = ".mythical_announcer_history.json"
def choose_creature():
creature = random.choice(MYTHICAL_CREATURES)
comment = random.choice(creature["comments"])
return creature, comment
def print_announcement(creature, comment):
print(f"[{creature['name']}]\n{creature['ascii']}\n{comment}")
def save_history(creature_name, comment):
entry = {
"timestamp": datetime.datetime.now().isoformat(),
"creature": creature_name,
"comment": comment
}
try:
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
history = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
history = []
history.append(entry)
with open(HISTORY_FILE, "w", encoding="utf-8") as f:
json.dump(history, f, ensure_ascii=False, indent=2)
def list_history(limit=10):
try:
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
history = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
print("履歴がありません。コミットしてみましょう!")
return
for entry in history[-limit:]:
ts = entry["timestamp"]
cr = entry["creature"]
cm = entry["comment"]
print(f"{ts}: {cr} - {cm}")
def summary():
try:
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
history = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
print("履歴がありません。")
return
count = {}
for entry in history:
cr = entry["creature"]
count[cr] = count.get(cr, 0) + 1
print("== 神獣出現回数 ==")
for cr, c in sorted(count.items(), key=lambda x: -x[1]):
print(f"{cr}: {c}回")
print(f"合計: {len(history)}回")
def main():
parser = argparse.ArgumentParser(description="コミット神獣アナウンサー")
subparsers = parser.add_subparsers(dest="command")
parser_log = subparsers.add_parser("log", help="新しい神獣アナウンスを表示し履歴に記録")
parser_list = subparsers.add_parser("list", help="過去のアナウンス履歴を表示")
parser_list.add_argument("--limit", type=int, default=10, help="表示件数")
parser_summary = subparsers.add_parser("summary", help="神獣ごとの出現回数まとめ")
args = parser.parse_args()
if args.command == "log" or args.command is None:
creature, comment = choose_creature()
print_announcement(creature, comment)
save_history(creature["name"], comment)
elif args.command == "list":
list_history(args.limit)
elif args.command == "summary":
summary()
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、Gitコミット時の“儀式”に神話的な遊び心を加えることを目的としています。毎回異なる神獣と運勢コメントを表示することで、飽きずに楽しめる設計です。
# 公式ドキュメント抜粋
- Git公式: https://git-scm.com/doc
- Python argparse: https://docs.python.org/ja/3/library/argparse.html
# 利用例
- チーム開発のコミット時に自動実行し、ターミナルに神獣が登場
- `/skills menu`や明示コマンドで履歴や出現回数を確認
# 注意点
- 運勢や神獣は完全にランダムで、実際の作業結果や運には影響しません。
- 履歴はローカルJSONファイルに保存され、他のユーザーとは共有されません。
# 設計方針
- 神獣・コメントの組み合わせは容易に拡張可能
- コマンドラインから `log`(通常発動)、`list`(履歴表示)、`summary`(統計)の3サブコマンドを提供
- 外部APIやネットワーク通信は一切行わず、ローカルで完結
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/commit-mythical-creature-announcer .agents/skills/commit-mythical-creature-announcer
.agents/skills/commit-mythical-creature-announcer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/commit-mythical-creature-announcer
# 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で神獣が現れて開発運勢を告げてくれるSkillを触ってみた にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
