Codex ユーザーが日常でぶつかる悩み
Codex を日常的に使っていると、真面目な AI coding workflow の中にも、時には「何か遊び心が欲しい」「ちょっとした息抜きがあれば…」と感じる瞬間がある。特に monorepo での長時間作業や、repository understanding を繰り返す onboarding 時、単調な commit の連続に飽きてしまうことも。「コミットのたびに何か面白いことが起きたら」と思ったことはないだろうか。以下のような「あるある」も多い:
- 長時間の session で、commit のリズムが単調になり、開発現場の空気が重くなりがち
- monorepo の大規模 repository で作業していると、commit のたびに「また同じ通知か」と感じてしまう
- Codex の context 管理に集中しすぎて、ちょっとした遊びやリフレッシュの余裕がなくなる
- onboarding で新しいメンバーに「このリポジトリは真面目一辺倒」と思わせてしまい、場が固くなる
- コミット時の通知やメッセージが無機質で、記憶にも残らない
こうした悩みは、AI coding workflow の効率化だけでなく、チームの空気やモチベーションにも影響する。Codex の context や path management の最適化だけでなく、「遊び心」も repository に持ち込みたいと感じるユーザーは少なくない。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Git commit のたびにタロット風の謎占い通知を自動で発動し、開発現場に遊び心とカオスをもたらす Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- コミットのたびに「運命の輪が回る」など完全ランダムなタロットメッセージが表示され、単調な作業フローに刺激と笑いが生まれる
- repository understanding や onboarding の場で、堅苦しさを和らげる潤滑油として機能する
- monorepo など大規模な directory 構成でも、Skill の通知が context の切り替えタイミングを彩る
- 長時間の AI coding workflow でも、commit ごとに気分転換でき、stale context への倦怠感を和らげる
- 「今日は大吉か?」といった話題でチームのコミュニケーションが活性化する
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/commit-fortune-tarot-notifier .agents/skills/commit-fortune-tarot-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or commit-fortune-tarot-notifier mention
> プロジェクト開始。初回 commit。
[Tarot Fortune Notifier]
あなたのcommitは「愚者」のカード。
新たな旅路の始まり。大胆に進め!
(コミットログ: feat: 初期セットアップ)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ ディレクトリで commit
[Tarot Fortune Notifier]
「運命の輪」が回転中。
思いがけない展開が訪れる予感。
(コミットログ: fix(api): 認証フロー修正)
シーン3: お遊び的な使い方
> 今日もコミット。なんとなく気分転換したい。
[Tarot Fortune Notifier]
「死神」のカードが現れた。
古いコードとの決別、新しい始まりを告げる。
(コミットログ: chore: 不要ファイル削除)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | commit のたびにタロット通知でリフレッシュ、集中力維持 |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/commit-fortune-tarot-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/commit-fortune-tarot-notifier/
├── SKILL.md
├── scripts/
│ └── commit_fortune_tarot_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/commit_fortune_tarot_notifier.py |
デスクトップ通知を送信(macOS, Linux, Windows対応) |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: commit-fortune-tarot-notifier
description: Gitのcommit時や/skills menu、commit-fortune-tarot-notifierの明示呼び出し時に発動。コミットごとに完全ランダムなタロット風ジョーク通知を表示し、開発現場にカオスな演出を加えます。
---
# 機能概要
このSkillは、Gitでコミットするたびに“タロットカード風の謎占い通知”をデスクトップまたはターミナルに表示します。通知内容は「運命の輪が回る」「愚者が新たな旅路に」など、完全ランダムなタロット風メッセージ。日々の開発作業に突如現れる謎の演出で、真面目な作業フローにユーモアとカオスをもたらします。コミット作業のたびに一喜一憂でき、チームの雰囲気を和ませるジョークSkillです。
# 使い方
- 明示呼び出し: `/skills menu` から選択、または `$commit-fortune-tarot-notifier` をターミナルで実行
- 暗黙発動: Gitのcommitコマンド実行時(例: `git commit -m "fix bug"`)
# 出力例
```
$ git commit -m "add new feature"
[タロット占い] 愚者が新たな旅路に出た。今日のコミットは冒険の始まり。
$ git commit -m "refactor code"
[タロット占い] 運命の輪が回る。変化の兆し、コードに吉兆あり。
$ git commit -m "fix typo"
[タロット占い] 塔が崩れる。油断大敵、慎重に進め。
$ commit-fortune-tarot-notifier
[タロット占い] 恋人たちが微笑む。協力が成功の鍵。
```
# 注意点
- 通知内容は完全にランダムで実用性はありません
- 作業を過度に阻害しないよう、通知は1行表示のみ
- 除外パスや特定ファイルには影響しません
- 通知履歴はローカル保存されません
# 参考資料
- references/design_notes.md
- https://docs.python.org/ja/3/library/subprocess.html
- https://git-scm.com/docs/githooks
scripts/commit_fortune_tarot_notifier.py
import sys
import os
import random
import subprocess
import argparse
from typing import List
tarot_cards = [
("愚者", "愚者が新たな旅路に出た。今日のコミットは冒険の始まり。"),
("魔術師", "魔術師が知恵を授ける。創造力が高まる予感。"),
("女教皇", "女教皇が静かに見守る。冷静な判断を。"),
("女帝", "女帝が豊かさをもたらす。成果が実る兆し。"),
("皇帝", "皇帝が統率する。秩序が保たれるだろう。"),
("法王", "法王が導く。伝統に従うと吉。"),
("恋人たち", "恋人たちが微笑む。協力が成功の鍵。"),
("戦車", "戦車が突き進む。勢いに乗って進もう。"),
("力", "力がみなぎる。困難も乗り越えられる。"),
("隠者", "隠者が静かに歩む。内省の時。"),
("運命の輪", "運命の輪が回る。変化の兆し、コードに吉兆あり。"),
("正義", "正義が裁く。フェアな判断を心がけて。"),
("吊るされた男", "吊るされた男が耐える。辛抱強く待つべし。"),
("死神", "死神が通り過ぎる。終わりは新たな始まり。"),
("節制", "節制が調和をもたらす。バランス重視で。"),
("悪魔", "悪魔が囁く。誘惑に注意。"),
("塔", "塔が崩れる。油断大敵、慎重に進め。"),
("星", "星が輝く。希望を持って進もう。"),
("月", "月が照らす。迷いが生じやすい時期。"),
("太陽", "太陽が照りつける。大成功の予感。"),
("審判", "審判が下る。過去の努力が報われる。"),
("世界", "世界が完成する。プロジェクトの完遂が近い。")
]
def get_random_tarot_message() -> str:
card, message = random.choice(tarot_cards)
return f"[タロット占い] {message}"
def print_tarot_message():
print(get_random_tarot_message())
def notify_desktop(message: str):
"""
デスクトップ通知を送信(macOS, Linux, Windows対応)
"""
try:
if sys.platform == "darwin":
subprocess.run(["osascript", "-e", f'display notification "{message}" with title "Tarot Commit Fortune"'], check=True)
elif sys.platform.startswith("linux"):
subprocess.run(["notify-send", "Tarot Commit Fortune", message], check=True)
elif sys.platform.startswith("win"):
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("Tarot Commit Fortune", message, duration=5)
else:
print(message)
except Exception:
print(message)
def is_git_commit_context() -> bool:
# 環境変数GIT_COMMITTER_NAMEなどで判定
return os.environ.get('GIT_COMMITTER_NAME') is not None
def cli():
parser = argparse.ArgumentParser(description="commit-fortune-tarot-notifier: Gitコミット時にタロット風通知を表示")
subparsers = parser.add_subparsers(dest="command")
parser_log = subparsers.add_parser('log', help='直近10回のGitコミットでタロット通知を表示')
parser_notify = subparsers.add_parser('notify', help='タロット通知を1回だけ表示')
parser_list = subparsers.add_parser('list', help='全タロットカード一覧を表示')
parser_summary = subparsers.add_parser('summary', help='タロット通知の使い方まとめ')
args = parser.parse_args()
if args.command == 'log':
show_tarot_log()
elif args.command == 'notify' or args.command is None:
message = get_random_tarot_message()
print(message)
notify_desktop(message)
elif args.command == 'list':
for card, message in tarot_cards:
print(f"{card}: {message}")
elif args.command == 'summary':
print_summary()
else:
parser.print_help()
def show_tarot_log():
# git log --pretty=oneline -n 10 を取得
try:
result = subprocess.run(["git", "log", "--pretty=oneline", "-n", "10"], capture_output=True, text=True, check=True)
lines = result.stdout.strip().split("\n")
for line in lines:
message = get_random_tarot_message()
print(f"{line[:40]}... {message}")
except Exception as e:
print("git logの取得に失敗しました", e)
def print_summary():
print("""
commit-fortune-tarot-notifier は、Gitコミット時にタロットカード風の謎占い通知を表示するジョークSkillです。
- git commit時に自動で発動、または `python commit_fortune_tarot_notifier.py notify` で明示呼び出し可能
- /skills menu からも利用できます
- 通知は完全ランダムで、実用性はありません
""")
def main():
# Gitフックから呼ばれた場合は即座に通知
if is_git_commit_context():
message = get_random_tarot_message()
print(message)
notify_desktop(message)
else:
cli()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
commit-fortune-tarot-notifierは、Gitのコミット時に完全ランダムなタロットカード風メッセージを通知するジョークSkillです。開発現場の雰囲気を和ませるため、実用性よりも演出とネタ性を重視しています。
# 公式ドキュメント抜粋
- [subprocess — サブプロセス管理 — Python公式](https://docs.python.org/ja/3/library/subprocess.html)
- [Git Hooks — git-scm.com](https://git-scm.com/docs/githooks)
# 利用例
- チーム開発でコミットごとにタロット通知が流れることで、会話のきっかけやリラックス効果を期待
- 個人開発でも「今日はどんな運勢?」と気分転換に活用可能
# 注意点
- 通知内容は完全にランダムで、実際のコード品質や進捗とは無関係です
- デスクトップ通知はOS依存(Linux: notify-send, macOS: osascript, Windows: win10toast)
- 通知履歴は保存されません
# 設計方針
- Git commit時のフックや明示呼び出しの両方に対応
- 過度な作業阻害を避けるため、通知は1行・即時のみ
- 拡張性を考慮し、タロットメッセージは配列で管理
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/commit-fortune-tarot-notifier .agents/skills/commit-fortune-tarot-notifier
.agents/skills/commit-fortune-tarot-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/commit-fortune-tarot-notifier
# 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 との連携設計はどうあるべきか?
- commit 時に毎回異なるタロット風通知が表示されるか?
- 通知内容が完全にランダムで、ネタ感が強いか?
- 通知の演出が過度に作業を阻害しないか?
実際に Codex で試した検証ログは CodexでGitコミットごとに謎のタロット占い通知を楽しんでみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
