Codex ユーザーが日常でぶつかる悩み
Codex を日々使い込む中で、ちょっとした「間」が生まれる瞬間は誰しも経験がある。ターミナルを開いた直後、作業前の緊張感や、これから始まる長丁場のワークフローに向けて気持ちを切り替えたいタイミング。しかし、現実は淡々としたプロンプトだけが待ち受けているのが常だ。
また、通知や演出系 Skill を使いたいと思っても、実用一辺倒で味気ないものが多く、遊び心やちょっとした“間”を演出するものは意外と見当たらない。特に以下のような悩みが挙げられる:
- ターミナルを開くたびに、毎回同じ無機質なプロンプトで始まり、作業気分の切り替えが難しい
- 長時間作業や monorepo の複雑な repo で、Codex の context が stale になり、集中力が途切れがち
- onboarding 時や session 再開時、気分転換やモチベーションアップにつながる演出が欲しい
- 通知・演出系 Skill を入れても、すぐに飽きてしまい、記憶にも残らない
- 気軽に“遊び”を取り入れつつ、AI coding workflow の流れを壊さない演出を探している
Codex の context や repo 理解をサポートしつつ、日々の開発体験にちょっとした楽しさをプラスしたい──そんな悩みを感じたことがあるユーザーは多いはずだ。
この Skill が一言でいうと何を解決するか
一言サマリ: ターミナルを開くたびSkill。
このSkillを導入すれば、ターミナルを開くたびに“侍”が現れ、その日の作業気分を天気予報風に斬り捨て御免してくれる。現実の天気やAPIには一切依存せず、完全ランダムなコメントで、毎回違った気分転換を提供する。
- 作業開始時に侍の一言で気持ちをリセットし、AI coding workflow の切り替えがスムーズになる
- repo や directory の context 切り替え時にも、遊び心ある演出で集中力を保てる
- onboarding や session 再開時の“間”に、記憶に残る体験を加えることで、Codex の利用が楽しくなる
- monorepo での package 跨ぎや長時間作業の合間に、ちょっとした会話のきっかけやリフレッシュを提供
- Skill の出力が毎回変わるため、飽きずに継続利用できる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/terminal-samurai-weathercaster .agents/skills/terminal-samurai-weathercaster実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or terminal-samurai-weathercaster mention
> ターミナルを開く
侍: 本日快晴、コードも冴え渡るでござる!
侍: この repo の構造、まるっと見通し良好。
侍: 迷いなき path で、いざ開発の道へ進むべし!
シーン2: monorepo / package 跨ぎ作業時
> cd packages/api
侍: 曇りのち晴れ、package 跨ぎの道中にて。
侍: api ディレクトリ、未知の地形現るも恐れることなかれ。
侍: 斬り捨て御免、context の迷いも一刀両断!
シーン3: お遊び的な使い方
> ターミナルを再起動
侍: 雷注意報、バグの嵐到来か?
侍: 本日も平常心を忘れず、冷静にデバッグするでござる。
侍: いざ、リポジトリの闇に挑むべし!
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | 侍の一言で context 切り替えと気分転換が同時にできる |
| monorepo 移動 | 違う package のコードを参照しがち | 侍が directory 跨ぎを演出、注意喚起にもなる |
| 長時間 workflow | long context で重要箇所が薄まる | 合間の侍コメントで集中力をリセットできる |
発動方式
明示呼び出し (/skills menu or terminal-samurai-weathercaster mention) と、ターミナル起動時などの暗黙発動(description マッチ)の両方に対応。
Skill の中身を全部見せる
.agents/skills/terminal-samurai-weathercaster/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/terminal-samurai-weathercaster/
├── SKILL.md
├── scripts/
│ └── samurai_weathercaster.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/samurai_weathercaster.py |
Terminal Samurai Weathercaster: 侍が気分で天気予報を斬り捨てる演出スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: terminal-samurai-weathercaster
description: ターミナル起動時や /skills menu、terminal-samurai-weathercaster の明示呼び出し時に発動。天気APIや現実の天候参照は一切せず、毎回異なる侍風コメントをランダム生成し、作業開始気分を演出する際に利用。
---
# 機能概要
terminal-samurai-weathercasterは、ターミナルを開くたびに“侍”が登場し、その日の作業気分を天気予報風に斬り捨て御免する演出系Skillです。現実の天気やAPI参照は一切行わず、完全にランダムな天気・侍コメントを生成。作業開始の緊張感やマンネリを和らげ、開発現場にユーモアと意外性をもたらします。
# 使い方
- 明示呼び出し: `/skills menu` から本Skillを選択、または `terminal-samurai-weathercaster` を直接呼び出し
- 暗黙発動: ターミナル起動時、または「天気」「侍」「気分」「演出」などのキーワードを含む状況で自動発動
# 出力例
```
【侍の気分天気予報】
本日快晴、コードも冴え渡るでござる!
------------------------------
侍より一言: 「エラーも恐れず、進むがよい!」
【侍の気分天気予報】
雷注意報、バグの嵐到来か?
------------------------------
侍より一言: 「バグ斬り捨て御免!」
```
# 注意点
- 現実の天気やAPI参照は一切行いません
- 出力は毎回完全ランダムです
- ローカル環境での利用を前提とし、外部サーバー等へのデータ送信はありません
- 侍コメントはジョーク要素を含みますが、業務利用時はご注意ください
# 参考資料
- references/design_notes.md を参照
- 公式: [Python random](https://docs.python.org/ja/3/library/random.html), [argparse](https://docs.python.org/ja/3/library/argparse.html)
scripts/samurai_weathercaster.py
import random
import argparse
import sys
from datetime import datetime
# 天気と侍コメントの候補リスト
def get_weather_messages():
return [
"本日快晴、コードも冴え渡るでござる!",
"曇り空、集中力を切らさぬように…",
"雨模様、バグの気配漂うでござる",
"雷注意報、バグの嵐到来か?",
"強風注意、仕様変更が吹き荒れる!",
"小春日和、穏やかな開発日和でござる",
"猛暑日、熱き情熱で乗り切る所存!",
"雪化粧、静かにコードを積み重ねるでござる",
"霧深し、要件が見えぬ…慎重に参ろう",
"台風接近、デプロイは控えるが吉!"
]
def get_samurai_comments():
return [
"エラーも恐れず、進むがよい!",
"バグ斬り捨て御免!",
"仕様書は心の目で読むものなり",
"コミットは一日一善",
"レビューは手加減無用!",
"集中力、切らすなよ",
"今日も一日、よろしく頼む",
"油断大敵、慢心は禁物",
"時には休息も大切でござる",
"デバッグこそ武士の道"
]
# 出力生成
def generate_forecast():
weather = random.choice(get_weather_messages())
comment = random.choice(get_samurai_comments())
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
lines = [
"【侍の気分天気予報】",
f"{weather}",
"------------------------------",
f"侍より一言: 「{comment}」",
f"({now})"
]
return "\n".join(lines)
# ログ保存
def save_log(message, logfile="samurai_weather.log"):
try:
with open(logfile, 'a', encoding='utf-8') as f:
f.write(message + '\n')
except Exception as e:
print(f"[ERROR] ログ保存失敗: {e}", file=sys.stderr)
# ログ一覧
def list_logs(logfile="samurai_weather.log", count=10):
try:
with open(logfile, 'r', encoding='utf-8') as f:
lines = f.readlines()
print(f"=== 直近{count}件の侍天気ログ ===")
for line in lines[-count:]:
print(line.strip())
except FileNotFoundError:
print("ログファイルが見つかりません。まだ一度も発動していない可能性があります。")
except Exception as e:
print(f"[ERROR] ログ読み込み失敗: {e}", file=sys.stderr)
# サマリー表示
def show_summary(logfile="samurai_weather.log"):
try:
with open(logfile, 'r', encoding='utf-8') as f:
logs = f.read().split('【侍の気分天気予報】')
logs = [l for l in logs if l.strip()]
print(f"=== 侍天気予報 発動回数: {len(logs)}回 ===")
weather_count = {}
for l in logs:
for w in get_weather_messages():
if w in l:
weather_count[w] = weather_count.get(w, 0) + 1
for w, c in sorted(weather_count.items(), key=lambda x: -x[1]):
print(f"{w}: {c}回")
except FileNotFoundError:
print("ログファイルが見つかりません。まだ一度も発動していない可能性があります。")
except Exception as e:
print(f"[ERROR] サマリー取得失敗: {e}", file=sys.stderr)
# コマンドライン引数処理
def main():
parser = argparse.ArgumentParser(description="Terminal Samurai Weathercaster: 侍が気分で天気予報を斬り捨てる演出スクリプト")
subparsers = parser.add_subparsers(dest="command")
# log: 新規発動
log_parser = subparsers.add_parser("log", help="侍天気予報を発動し、ログに記録")
# list: ログ表示
list_parser = subparsers.add_parser("list", help="ログ一覧を表示")
list_parser.add_argument("-n", "--count", type=int, default=10, help="表示件数 (デフォルト10件)")
# summary: サマリー
summary_parser = subparsers.add_parser("summary", help="発動回数や天気ごとの集計を表示")
args = parser.parse_args()
logfile = "samurai_weather.log"
if args.command == "log" or args.command is None:
message = generate_forecast()
print(message)
save_log(message, logfile=logfile)
elif args.command == "list":
list_logs(logfile=logfile, count=args.count)
elif args.command == "summary":
show_summary(logfile=logfile)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
terminal-samurai-weathercasterは、ターミナル起動時や明示呼び出しで、現実の天気やAPI参照を一切行わず、完全ランダムな侍風天気コメントを生成・表示するSkillです。作業開始時の演出や気分転換を主目的としています。
# 公式ドキュメント抜粋
- [Python random](https://docs.python.org/ja/3/library/random.html): ランダムな天気・コメント選択に利用
- [argparse](https://docs.python.org/ja/3/library/argparse.html): CLIサブコマンド・引数処理に利用
# 利用例
- ターミナルを開くたびに自動で侍コメントが表示され、開発現場の雰囲気を和ませる
- 明示的に `python samurai_weathercaster.py log` で発動履歴を記録
- `list` サブコマンドで過去の侍コメントを確認
- `summary` で発動傾向を分析
# 注意点
- 現実の天気や位置情報は一切利用しません
- 出力内容は完全にランダムです
- ログはローカルファイル (samurai_weather.log) のみ保存
# 設計方針
- シンプルなPythonスクリプトでOS・環境依存性を最小化
- ユーモアと演出性を重視し、実用性よりも体験価値を優先
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/terminal-samurai-weathercaster .agents/skills/terminal-samurai-weathercaster
.agents/skills/terminal-samurai-weathercaster の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/terminal-samurai-weathercaster
# 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 との連携設計はどうあるべきか?
- ターミナル起動時に必ず侍コメントが出るか?
- 天気や侍台詞が毎回ランダムで変わるか?
- 現実の天気やAPI参照が一切ないことが担保されているか?
実際に Codex で試した検証ログは Codexで侍が毎回ターミナルに現れて斬り捨て御免してくれるか試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
