Codexでターミナルに開発者の気分を可視化する新感覚演出ガイド

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

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を跨ぐ作業時にも、気分の変化を天気で表現することで、開発現場にちょっとした話題や余白が生まれる
QUICK INSTALL
このSkillをすぐ試す

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記事を探す

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

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

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