Codex ユーザーが日常でぶつかる悩み
開発現場でCodexを日々使っていると、便利さの裏で「なんだか単調」「ちょっとした癒しが欲しい」と感じる瞬間も多い。特に通知・演出・OS連携系のSkillが少ない現状では、ターミナルやプロンプトが無機質になりがちだ。以下のような「あるある」に心当たりはないだろうか。
- 長時間のAI coding workflowで、ターミナル画面がずっと同じで気分転換がない
- Codexのcontextやrepo情報を何度も再説明する作業が単調で、モチベーションが下がりやすい
- monorepoでdirectoryやpath管理に追われるうちに、作業気分が天気のように変わるのを誰にも共有できない
- session再開時に「また同じ説明か…」と感じ、ちょっとした遊び心や癒しが欲しくなる
- AIが返すフィードバックや通知が事務的すぎて、開発者自身の気分やテンションを反映した「遊び」がない
この Skill が一言でいうと何を解決するか
一言サマリ: 開発者のテンションや気分をSkill。
このSkillを導入すると、以下のような効果が期待できる:
- AI coding workflowの中で、ターミナルのステータスバーに「気分天気予報」が表示され、日々の単調さが和らぐ
- commit頻度や作業内容から、Codexがcontextをもとに気分・テンションを天気や気温で演出し、ちょっとした自己分析や癒しを提供
- onboardingやsession再開時に、repository understandingやpath managementの説明が続く中で、遊び心のある演出で気分転換ができる
- 長時間のlong context作業でも、ふとした瞬間に「今日の気分:曇り」などが表示されて笑いが生まれる
- monorepoやdirectoryを跨ぐ作業時にも、気分の変化を天気で表現することで、開発現場にちょっとした話題や余白が生まれる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/terminal-weather-mood-bar .agents/skills/terminal-weather-mood-bar実行したらこうなる (3つの利用シーン)
Skillを入れると、ターミナルのステータスバーやプロンプトに「気分天気」が自動で表示されます。以下、想定される利用シーンと出力例です。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or terminal-weather-mood-bar mention
Welcome back! 本日の開発者気分予報:
------------------------------------------
気分: 晴れ時々くもり
テンション: 22度 (やや涼しめ)
理由: 前回のcommit間隔がやや長め
------------------------------------------
現在のdirectory: /repo/src/
今日も良い開発日和です。
シーン2: monorepo / package 跨ぎ作業時
> cd packages/api/
> git status
[terminal-weather-mood-bar]
気分: 小雨
テンション: 17度 (やや低め)
理由: packages/ui/から移動、commit数が減少傾向
------------------------------------------
monorepo構造: packages/ui/ → packages/api/
気分転換にストレッチをおすすめします。
シーン3: お遊び的な使い方
> echo "今日も頑張るぞ"
[terminal-weather-mood-bar]
テンション: 真夏日 (気温35度)
気分: 快晴
理由: 本日3回目のpush、勢いあり
------------------------------------------
このまま突き進みましょう!
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 + 気分天気で和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る + 気分の変化も可視化 |
| 長時間 workflow | long context で重要箇所が薄まる | 気分天気でリフレッシュ、集中力維持に貢献 |
発動方式
明示呼び出し (/skills menu or terminal-weather-mood-bar mention) と、説明文や作業文脈からの暗黙発動(semantic-or-explicit)に両対応しています。
Skill の中身を全部見せる
.agents/skills/terminal-weather-mood-bar/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/terminal-weather-mood-bar/
├── SKILL.md
├── scripts/
│ └── weather_mood_bar.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/weather_mood_bar.py |
terminal-weather-mood-bar: 気分やテンションを天気・気温風に表示するツール |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: terminal-weather-mood-bar
description: ターミナルやプロンプト上で開発者の気分やテンションを、気温や天気に見立てて表示したい場合に発動します。commit頻度や作業状況の変化、/skills menuやterminal-weather-mood-barの明示呼び出し時に適用されます。
---
# 機能概要
terminal-weather-mood-barは、開発者のテンションや気分を天気や気温に見立てて、ターミナルのステータスバーやプロンプトに表示するSkillです。Gitのcommit頻度や作業時間、あるいはランダム値をもとに「今日の気分:晴れ、気温26度」「テンション:小雨、15度」などの“気象レポート”を生成。実用性よりも、日々の単調な開発現場に謎の癒しと自己分析を提供します。仕事中にふと目に入ると、じわじわ笑える演出が特徴です。
# 使い方
- 明示呼び出し例: `/skills menu` から terminal-weather-mood-bar を選択、または `$ terminal-weather-mood-bar` を実行。
- 暗黙発動キーワード例: 「気分」「テンション」「天気」「ステータスバー」「自己分析」などが会話やコマンドに含まれる場合、自動で発動します。
# 出力例
```
[terminal-weather-mood-bar]
今日の気分:曇り、気温18度
テンション:春一番
最近のcommit頻度:やや低め
-----------------------------
[terminal-weather-mood-bar]
気分:快晴、気温27度
テンション:真夏日
commit数:12 (本日)
```
# 注意点
- 実際の天気や気温とは無関係です。
- 気分やテンションの算出はcommit頻度や作業時間、またはランダム値を利用します。
- ステータスバーやプロンプトのカスタマイズが必要な場合があります。
- ローカルに履歴や個人情報は保存しません。
# 参考資料
- references/design_notes.md を参照
- [GitPython公式ドキュメント](https://gitpython.readthedocs.io/)
- [Python argparse](https://docs.python.org/ja/3/library/argparse.html)
scripts/weather_mood_bar.py
import argparse
import sys
import os
import random
import datetime
from typing import Tuple, Optional
try:
from git import Repo, InvalidGitRepositoryError
except ImportError:
Repo = None
InvalidGitRepositoryError = Exception
def get_git_commit_count(repo_path: str, since_days: int = 1) -> int:
if not Repo:
return -1
try:
repo = Repo(repo_path, search_parent_directories=True)
since = datetime.datetime.now() - datetime.timedelta(days=since_days)
commits = list(repo.iter_commits(since=since.isoformat()))
return len(commits)
except InvalidGitRepositoryError:
return -1
except Exception:
return -1
def map_commit_to_weather(commit_count: int) -> Tuple[str, int, str]:
# commit_countが-1ならランダム
weather_types = [
("快晴", 27, "真夏日"),
("晴れ", 23, "やる気十分"),
("曇り", 18, "普通"),
("小雨", 15, "やや低め"),
("大雨", 10, "低気圧"),
("雪", 2, "冬眠モード"),
("春一番", 20, "上昇気流"),
("台風", 30, "荒ぶる魂")
]
if commit_count == -1:
idx = random.randint(0, len(weather_types)-1)
w, t, m = weather_types[idx]
temp = t + random.randint(-2, 2)
return w, temp, m
if commit_count >= 15:
return "快晴", 28 + random.randint(-1,2), "真夏日"
elif commit_count >= 10:
return "晴れ", 23 + random.randint(-2,2), "やる気十分"
elif commit_count >= 5:
return "曇り", 18 + random.randint(-2,2), "普通"
elif commit_count >= 2:
return "小雨", 15 + random.randint(-2,2), "やや低め"
elif commit_count > 0:
return "大雨", 10 + random.randint(-2,2), "低気圧"
elif commit_count == 0:
return "雪", 2 + random.randint(-1,1), "冬眠モード"
else:
idx = random.randint(0, len(weather_types)-1)
w, t, m = weather_types[idx]
temp = t + random.randint(-2, 2)
return w, temp, m
def generate_report(repo_path: Optional[str] = None) -> str:
commit_count = get_git_commit_count(repo_path or os.getcwd())
weather, temp, mood = map_commit_to_weather(commit_count)
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
if commit_count == -1:
commit_info = "commit頻度:取得不可 (ランダム)"
else:
commit_info = f"commit数:{commit_count} (本日)"
report = (
f"[terminal-weather-mood-bar] ({now})\n"
f"今日の気分:{weather}、気温{temp}度\n"
f"テンション:{mood}\n"
f"{commit_info}\n"
f"-----------------------------"
)
return report
def print_report(args):
report = generate_report(args.repo)
print(report)
def main():
parser = argparse.ArgumentParser(
description="terminal-weather-mood-bar: 気分やテンションを天気・気温風に表示するツール"
)
subparsers = parser.add_subparsers(dest="command")
show_parser = subparsers.add_parser("show", help="現在の気分天気を表示")
show_parser.add_argument("--repo", type=str, default=None, help="Gitリポジトリのパス (省略時はカレント)")
# サブコマンド: summary (過去7日分)
summary_parser = subparsers.add_parser("summary", help="過去7日分の気分天気を表示")
summary_parser.add_argument("--repo", type=str, default=None, help="Gitリポジトリのパス (省略時はカレント)")
args = parser.parse_args()
if args.command == "show":
print_report(args)
elif args.command == "summary":
repo_path = args.repo or os.getcwd()
print(f"[terminal-weather-mood-bar] 過去7日分の気分天気レポート\n-----------------------------")
for i in range(7, 0, -1):
day = datetime.datetime.now() - datetime.timedelta(days=i)
commit_count = get_git_commit_count(repo_path, since_days=i)
weather, temp, mood = map_commit_to_weather(commit_count)
date_str = day.strftime("%Y-%m-%d")
if commit_count == -1:
commit_info = "commit頻度:取得不可 (ランダム)"
else:
commit_info = f"commit数:{commit_count}"
print(f"{date_str} | 気分:{weather}、{temp}度 | テンション:{mood} | {commit_info}")
print("-----------------------------")
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
terminal-weather-mood-barは、開発者の作業状況やcommit頻度をもとに、気分やテンションを天気・気温として可視化するユーモア系Skillです。ターミナルやプロンプトのカスタマイズを前提とし、日々の開発現場に“謎の気象レポート”を提供します。
# 公式ドキュメント抜粋
- [GitPython公式](https://gitpython.readthedocs.io/en/stable/)
- [argparse (Python公式)](https://docs.python.org/ja/3/library/argparse.html)
# 利用例
- ターミナル起動時や作業開始時に「今日の気分:曇り、気温18度」などを自動表示
- /skills menuや明示コマンドでその場の気分天気を確認
- 過去7日分の“気分天気”推移をsummaryで表示し、自己分析や話のネタに
# 注意点
- commit頻度取得にはGitPythonが必要です。インストールされていない場合はランダム表示となります。
- 実際の天気や気温とは無関係で、あくまで“気分”の演出用です。
- 個人情報や履歴の保存は行いません。
# 設計方針
- 開発者の作業状況をユーモラスに可視化し、日々のモチベーション維持や話題提供を狙っています。
- 現実の天気API等は使わず、あくまで“気分”の疑似気象レポート生成に特化しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/terminal-weather-mood-bar .agents/skills/terminal-weather-mood-bar
.agents/skills/terminal-weather-mood-bar の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/terminal-weather-mood-bar
# 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で開発者気分を天気に例えてターミナルに表示してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
