Claude Codeでターミナル演出を自動化する侍気分天気予報Skillの作り方

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

Claude Code ユーザーが日常でぶつかる悩み

Claude Code を日々使っていると、作業のリズムや集中力を保つ難しさを感じることが少なくありません。特に長時間の開発や monorepo での作業では、ちょっとした「間」や気分転換が欲しくなる瞬間があります。真面目な作業フローの中で、思わずクスッとできる演出があれば…と感じる人も多いはずです。

  • 長時間の workflow で気分が単調になりがち、ちょっとした変化や遊び心が欲しい
  • ターミナルを開いた瞬間から「作業モード」に切り替えたいが、きっかけが掴みづらい
  • monorepo で directory を移動した際、気分転換やリフレッシュを挟みたい
  • onboarding 時や session 再開時、毎回同じ雰囲気だと飽きやすい
  • 通知や演出系 Skill の導入事例が少なく、AI coding workflow の“遊び”要素が不足している

特に「通知・演出・OS連携」カテゴリの Skill は、業務効率化だけでなく日常の作業に彩りを加える役割も担っています。作業開始時に一風変わった演出があれば、日々の repository understanding や path management のルーティンも少し楽しくなるかもしれません。

この Skill が一言でいうと何を解決するか

一言サマリ: ターミナルを開くたびSkill。

この Skill を導入すると、ターミナルを開くたびに侍が現れて、その日の作業気分を天気予報風に斬り捨て御免します。現実の天気や API とは無関係に、完全ランダムな天気&侍コメントが毎回降臨。日々の Claude Code セッションを、ちょっと不条理で楽しいものに演出します。

  • ターミナル起動時に必ず侍コメントが表示され、作業開始のきっかけや気分転換になる
  • 毎回ランダムな天気&台詞で、長時間の AI coding workflow でも飽きずにリズムを作れる
  • monorepo での directory 移動や session 再開時にも、面白い“入り”が自動で挿入される
  • repo や repository understanding の流れに遊び心を加え、onboarding の雰囲気も和らぐ
  • Skill の導入・管理も .claude/skills/ 配下に置くだけでシンプルに運用できる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/terminal-samurai-weathercaster .claude/skills/terminal-samurai-weathercaster

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /terminal-samurai-weathercaster
> ターミナルを開く

――――――――――――――――――――――――
侍天気予報
本日快晴、コードも冴え渡るでござる!
repository: ~/projects/awesome-monorepo
directory: packages/core/
――――――――――――――――――――――――
さて、どこから斬り込むか…

シーン2: monorepo / package 跨ぎ作業時


> cd packages/utils

――――――――――――――――――――――――
侍天気予報
雷注意報、バグの嵐到来か?
repository: ~/projects/awesome-monorepo
directory: packages/utils/
――――――――――――――――――――――――
拙者、慎重に進む所存!

シーン3: お遊び的な使い方


> /terminal-samurai-weathercaster

――――――――――――――――――――――――
侍天気予報
曇り空、仕様の霧にご用心。
repository: ~/sandbox/side-project
directory: src/
――――――――――――――――――――――――
迷いあれば、すぐ相談するがよい!

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し 侍コメントで context 切り替え、気分もリセット
monorepo 移動 違う package のコードを参照しがち package 跨ぎのたびに侍が登場、directory を意識できる
長時間 workflow long context で重要箇所が薄まる 侍の一言で workflow の節目ができる

発動方式

明示呼び出し (/terminal-samurai-weathercaster) と暗黙発動 (ターミナル起動や directory 移動時の description マッチ) の両方に対応。

Skill の中身を全部見せる

.claude/skills/terminal-samurai-weathercaster/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/terminal-samurai-weathercaster/
├── SKILL.md
├── scripts/
│   └── samurai_weathercaster.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/samurai_weathercaster.py terminal-samurai-weathercaster: ターミナル侍天気予報スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: terminal-samurai-weathercaster
description: ターミナル起動時や /terminal-samurai-weathercaster コマンド実行時に、毎回異なる“侍天気予報”コメントをランダム生成し表示します。現実の天気やAPI参照は一切せず、作業気分を演出する演出系スキルです。
---

# 機能概要
terminal-samurai-weathercasterは、ターミナルを開くたびに“侍”が現れ、その日の作業気分を天気予報風に斬新なコメントで伝えるスキルです。現実の天気やAPIには一切依存せず、完全にランダムな天気・侍コメントを生成します。作業開始の緊張感やマンネリを打破し、日々のコーディングにユーモアと意外性をもたらします。

# 使い方
- 明示呼び出し: `/terminal-samurai-weathercaster` をターミナルで実行
- 暗黙発動: ターミナル起動時や「天気」「侍」「気分」「始業」などのキーワードを含む文脈で自動発動

# 出力例
```
【侍天気予報】
本日快晴、コードも冴え渡るでござる!
---
【侍天気予報】
曇り空、集中力もやや薄れ申す。
---
【侍天気予報】
雷注意報、バグの嵐到来か?油断召されるな!
---
【侍天気予報】
春の陽気、心穏やかに進軍でござる。
---
【侍天気予報】
嵐の予感、仕様変更に備えよ!
```

# 注意点
- 現実の天気やAPIには一切アクセスしません
- 侍コメント・天気は完全ランダムで、同じ内容が続く場合もあります
- ローカルに履歴等は保存しません
- シェルのプロファイル等に組み込むことで自動発動可能です

# 参考資料
- [references/design_notes.md](references/design_notes.md) に設計方針と利用例を記載
- 公式Python標準ライブラリ (random, argparse) のみ使用

scripts/samurai_weathercaster.py

import random
import argparse
import sys
from datetime import datetime

def get_random_weather():
    weathers = [
        '快晴', '曇り', '雨', '雷', '嵐', '春の陽気', '秋風', '雪', '濃霧', '乾燥注意報',
        '小春日和', '台風接近', '蒸し暑い', '涼風', '冷え込み'
    ]
    return random.choice(weathers)

def get_samurai_comment(weather):
    comments = {
        '快晴': [
            'コードも冴え渡るでござる!',
            '心晴れやかに進軍いたす!',
            '本日も快調、斬り込み準備は万端!'
        ],
        '曇り': [
            '集中力もやや薄れ申す。',
            '心の曇りを払うべく、気合いを入れるでござる。',
            '油断召されるな、曇天のごとくタスクも重かろう。'
        ],
        '雨': [
            'バグの雫が降り注ぐやもしれぬ。',
            '静かなる雨音、思索の時でござる。',
            '本日は慎重に進むが吉。'
        ],
        '雷': [
            'バグの嵐到来か?油断召されるな!',
            'エラーの雷鳴、心して臨むべし!',
            '一閃、バグを斬り捨てる覚悟を。'
        ],
        '嵐': [
            '仕様変更に備えよ!',
            'タスクの波に呑まれぬよう、構えを崩すな。',
            '嵐の中、己を信じて進むのみ。'
        ],
        '春の陽気': [
            '心穏やかに進軍でござる。',
            '新たな挑戦に花咲かせる時。',
            '春風に乗りて、今日も一歩。'
        ],
        '秋風': [
            '実りの時、成果を刈り取るでござる。',
            '静かな集中、秋の夜長に。',
            '秋風薫る、バグもまた落葉の如し。'
        ],
        '雪': [
            '静寂の中、心研ぎ澄ますべし。',
            '寒さに負けず、コードも白き世界へ。',
            '雪解けの如く、バグも消え去ることを願う。'
        ],
        '濃霧': [
            '仕様不明、慎重に進むが吉。',
            '先行き不透明、油断は禁物。',
            '霧の中、道を見失わぬように。'
        ],
        '乾燥注意報': [
            'アイディアの潤いを忘れずに。',
            '乾いた心に新たな発想を。',
            '水分補給も忘れずに作業いたせ。'
        ],
        '小春日和': [
            '穏やかな気持ちで進めるでござる。',
            '本日は平穏、着実にタスクを。',
            '小春日和、ゆるりと集中。'
        ],
        '台風接近': [
            '緊急対応に備えよ!',
            'タスクの渦に巻き込まれぬよう注意!',
            '台風一過、成果を期待するでござる。'
        ],
        '蒸し暑い': [
            '集中力が蒸発せぬよう気をつけよ。',
            '蒸し暑さに負けず、心は涼やかに。',
            '汗と共にバグも流すでござる。'
        ],
        '涼風': [
            '心地よい風、作業も捗るでござる。',
            '涼やかに、冷静沈着に進め。',
            '雑念を吹き飛ばす涼風なり。'
        ],
        '冷え込み': [
            '手先の冷えにご注意を。',
            '温かき飲み物で心身温めよ。',
            '冷えにも負けず、作業を進めるでござる。'
        ]
    }
    if weather in comments:
        return random.choice(comments[weather])
    else:
        return '本日も精進あるのみでござる!'

def print_samurai_weather():
    weather = get_random_weather()
    comment = get_samurai_comment(weather)
    print('【侍天気予報】')
    print(f'{weather}、{comment}')
    print('---')

def log_weather(logfile):
    weather = get_random_weather()
    comment = get_samurai_comment(weather)
    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    entry = f'{now} | {weather} | {comment}\n'
    try:
        with open(logfile, 'a', encoding='utf-8') as f:
            f.write(entry)
        print(f'ログに記録しました: {entry.strip()}')
    except Exception as e:
        print(f'ログ記録に失敗しました: {e}', file=sys.stderr)

def show_log(logfile, limit=10):
    try:
        with open(logfile, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        if not lines:
            print('ログがありません。')
            return
        print('【侍天気予報ログ】')
        for line in lines[-limit:]:
            print(line.strip())
    except FileNotFoundError:
        print('ログファイルが存在しません。')
    except Exception as e:
        print(f'ログの読み込みに失敗しました: {e}', file=sys.stderr)

def main():
    parser = argparse.ArgumentParser(description='terminal-samurai-weathercaster: ターミナル侍天気予報スキル')
    subparsers = parser.add_subparsers(dest='command')

    parser_run = subparsers.add_parser('run', help='侍天気予報を表示')
    parser_log = subparsers.add_parser('log', help='侍天気予報をログに記録')
    parser_log.add_argument('--file', default='samurai_weather.log', help='ログファイル名')
    parser_show = subparsers.add_parser('show', help='侍天気予報ログを表示')
    parser_show.add_argument('--file', default='samurai_weather.log', help='ログファイル名')
    parser_show.add_argument('--limit', type=int, default=10, help='表示する最新ログ行数')

    args = parser.parse_args()

    if args.command == 'run' or args.command is None:
        print_samurai_weather()
    elif args.command == 'log':
        log_weather(args.file)
    elif args.command == 'show':
        show_log(args.file, args.limit)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
terminal-samurai-weathercasterは、作業開始時にユーモアと意外性を提供するための演出系スキルです。実際の天気やAPIには一切依存せず、完全にローカルでランダムな侍コメントを生成します。

# 公式ドキュメント抜粋
- Python標準ライブラリ (random, argparse, datetime) のみ利用
- 外部APIやネットワークアクセスは一切行いません

# 利用例
- ターミナルのプロファイルや.zshrc/.bashrcに `python .claude/skills/terminal-samurai-weathercaster/samurai_weathercaster.py run` を追加することで、毎回自動発動可能
- チームの朝会や始業スクリプトに組み込むことで、雰囲気づくりやアイスブレイクにも活用できます

# 注意点
- 出力内容は完全ランダムで、現実の天気や気象情報とは無関係です
- ログ記録機能は任意で、履歴を残したい場合のみ利用してください

# 設計方針
- シンプルな構成と可搬性を重視し、依存パッケージを極力排除
- コメントや天気のバリエーションは今後も容易に拡張可能な設計

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/terminal-samurai-weathercaster .claude/skills/terminal-samurai-weathercaster

.claude/skills/terminal-samurai-weathercaster の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/terminal-samurai-weathercaster
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /terminal-samurai-weathercaster と Skill 名で出てきます。

5. 動作確認

/terminal-samurai-weathercaster で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • ターミナル起動時に必ず侍コメントが出るか、天気や侍台詞が毎回ランダムで変わるか、現実の天気やAPI参照が一切ないこと

実際に Claude Code で試した検証ログは Claude Codeで侍が毎回違う天気予報を斬り捨て御免してくれるか試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

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

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

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