Claude Code ユーザーが日常でぶつかる悩み
Claude Code を日常的に使っていると、通知や演出まわりで「こんな機能あったら面白いのに」と感じる瞬間が少なくありません。特に作業が長引いたり、集中力が途切れがちなタイミングでは、ちょっとした気分転換や遊び要素が欲しくなります。
また、リポジトリの構造や context の管理に集中していると、淡々とした作業画面が続き、場の空気が単調になりがちです。そんなとき、唐突な演出や遊び心のある通知が加わることで、気分がリフレッシュされることもあるでしょう。
- Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
- monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした「作業の空気がマンネリ化」「気分転換が欲しい」「唐突な演出でリセットしたい」といった悩みは、Claude Code の AI coding workflow を長く続けるほど多くのユーザーが共感するポイントです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業画面に“謎の気分天気バー”を出現させ、場の空気を一瞬でカオスに彩るSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Claude Code の作業画面に、完全ランダムな「気分天気バー」が出現し、単調な workflow に遊び心を加えられる
- session 開始や directory 移動など、context 切り替え時に突発的な演出が入り、気分転換やリフレッシュ効果を得られる
- repo や path management の説明に飽きたとき、意味不明な天気ワードで場の空気が和む
- onboarding 時に「今日は仕様雪崩」「バグの嵐」など、会話のきっかけやネタを自然に提供できる
- 長時間の AI coding workflow でも、定期的な“お遊び通知”で集中力をリセットできる
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/os-fake-mood-weather-bar .claude/skills/os-fake-mood-weather-bar実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /os-fake-mood-weather-bar
> 今日から新しいプロジェクトで作業を始めます
[OS風 気分天気バー]
---------------------------------------
本日の気分天気: 絶好調・晴れ
メッセージ: 「このリポジトリ、今日はバグ雲一つなし」
---------------------------------------
現在の directory: /Users/user/my-repo
repository understanding: ON
memory: session start
シーン2: monorepo / package 跨ぎ作業時
> packages/api に移動して context 切り替え
[OS風 気分天気バー]
---------------------------------------
現在の気分天気: やる気霧雨
メッセージ: 「monorepo の境界に霧が立ち込めています」
---------------------------------------
directory: /Users/user/my-repo/packages/api
path management: package boundary detected
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[OS風 気分天気バー]
---------------------------------------
気分天気: 仕様雪崩
メッセージ: 「仕様変更の雪が止まりません」
---------------------------------------
AI coding workflow: mood refresh
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 気分天気バーで強制リセット、空気が一新される |
発動方式
明示呼び出し (/os-fake-mood-weather-bar) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/os-fake-mood-weather-bar/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/os-fake-mood-weather-bar/
├── SKILL.md
├── scripts/
│ └── mood_weather_bar.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/mood_weather_bar.py |
謎の気分天気バーを画面端に表示 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-mood-weather-bar
description: このSkillは、コード実行や作業の合間に「気分天気バー」を画面端へランダム表示します。明示呼び出し(/os-fake-mood-weather-bar)や、'気分','天気','バー','カオス','演出'等のキーワード検知時に自動発動します。
---
# 機能概要
このSkillは、あなたのPC画面端やメニューバーに“OS風・謎の気分天気バー”を突如出現させます。天気バーは「絶好調・晴れ」「やる気霧雨」「集中力台風接近中」「バグの嵐」「仕様雪崩」など、完全ランダムな“気分天気”を表示し、作業空間にカオスな演出を加えます。実用性はほぼありませんが、仕事や開発の合間にシュールな空気を演出することができます。
# 使い方
- 明示呼び出し: `/os-fake-mood-weather-bar` を実行すると即座にバーが表示されます。
- 暗黙発動: 「気分」「天気」「バー」「カオス」「演出」などのキーワードが会話やコマンド内に出現した場合、自動でバーが出現します。
# 出力例
```
[気分天気バー] 2024-06-23 14:33:07
本日の気分天気:やる気霧雨
コメント:やる気が微妙に降り注ぐ午後。コーヒーで回復を!
[気分天気バー] 2024-06-23 15:12:10
本日の気分天気:集中力台風接近中
コメント:集中の嵐が迫る。タスクを片付けるチャンス!
[気分天気バー] 2024-06-23 16:01:55
本日の気分天気:バグの嵐
コメント:バグが吹き荒れる一日。冷静なデバッグを。
```
# 注意点
- 実際の天気や心理状態とは一切関係ありません。
- ローカルPCでのみ動作し、バーの表示はOSの通知API(Windows: Toast, macOS: NSUserNotification, Linux: notify-send)を利用します。
- 他の通知系Skillと同時に発動した場合、通知が重複する可能性があります。
- ログはローカルに保存されますが、個人情報は含みません。
# 参考資料
- [Windows Toast Notifications](https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-notifications)
- [macOS User Notifications](https://developer.apple.com/documentation/usernotifications)
- [Linux notify-send](https://man.archlinux.org/man/notify-send.1)
- references/design_notes.md を参照してください。
scripts/mood_weather_bar.py
import sys
import os
import random
import argparse
import platform
import subprocess
from datetime import datetime
MOODS = [
("絶好調・晴れ", "今日は何をやっても順調!この勢いでタスクを消化しよう。"),
("やる気霧雨", "やる気が微妙に降り注ぐ午後。コーヒーで回復を!"),
("集中力台風接近中", "集中の嵐が迫る。タスクを片付けるチャンス!"),
("バグの嵐", "バグが吹き荒れる一日。冷静なデバッグを。"),
("仕様雪崩", "仕様変更の雪崩に注意。落ち着いて対応しよう。"),
("納期雷雨", "納期の雷が鳴り響く。計画的に進めよう。"),
("無気力曇り", "やる気が曇りがち。気分転換を挟もう。"),
("眠気霧", "眠気の霧が立ち込める。短い休憩を。"),
("インスピレーション虹", "アイデアの虹がかかる瞬間!メモを忘れずに。"),
("レビュー雹", "レビューの雹が降る。指摘も前向きに受け止めよう。")
]
LOG_PATH = os.path.expanduser("~/.claude_fake_mood_weather_bar.log")
def choose_mood():
return random.choice(MOODS)
def format_output(mood, comment, timestamp=None):
if not timestamp:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return f"[気分天気バー] {timestamp}\n本日の気分天気:{mood}\nコメント:{comment}\n"
def show_notification(mood, comment):
system = platform.system()
title = "気分天気バー"
message = f"{mood}\n{comment}"
try:
if system == "Darwin":
# macOS: use osascript
script = f'display notification "{comment}" with title "{mood}" subtitle "気分天気バー"'
subprocess.run(["osascript", "-e", script], check=True)
elif system == "Linux":
# Linux: use notify-send
subprocess.run(["notify-send", title, f"{mood}\n{comment}"], check=True)
elif system == "Windows":
# Windows: use Toast (via powershell)
ps_script = f"[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null; " \
f"$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02); " \
f"$textNodes = $template.GetElementsByTagName('text'); " \
f"$textNodes.Item(0).AppendChild($template.CreateTextNode('{mood}')) > $null; " \
f"$textNodes.Item(1).AppendChild($template.CreateTextNode('{comment}')) > $null; " \
f"$toast = [Windows.UI.Notifications.ToastNotification]::new($template); " \
f"$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('気分天気バー'); " \
f"$notifier.Show($toast);"
subprocess.run(["powershell", "-Command", ps_script], check=True)
else:
print("[WARN] 未対応OSです。通知は標準出力のみ行います。")
print(f"{title}: {mood}\n{comment}")
except Exception as e:
print(f"[ERROR] 通知の表示に失敗しました: {e}")
print(f"{title}: {mood}\n{comment}")
def log_mood(mood, comment, timestamp=None):
out = format_output(mood, comment, timestamp)
try:
with open(LOG_PATH, "a", encoding="utf-8") as f:
f.write(out + "\n")
except Exception as e:
print(f"[ERROR] ログの保存に失敗: {e}")
def list_logs(limit=10):
if not os.path.exists(LOG_PATH):
print("ログファイルがありません。")
return
try:
with open(LOG_PATH, "r", encoding="utf-8") as f:
lines = f.read().split("\n\n")
lines = [l for l in lines if l.strip()]
for entry in lines[-limit:]:
print(entry)
print("")
except Exception as e:
print(f"[ERROR] ログの読み込みに失敗: {e}")
def summary():
if not os.path.exists(LOG_PATH):
print("ログファイルがありません。")
return
counter = {}
try:
with open(LOG_PATH, "r", encoding="utf-8") as f:
for line in f:
if line.startswith("本日の気分天気:"):
mood = line.strip().split(":", 1)[1]
counter[mood] = counter.get(mood, 0) + 1
print("=== 気分天気 出現回数集計 ===")
for mood, cnt in sorted(counter.items(), key=lambda x: -x[1]):
print(f"{mood}: {cnt}回")
except Exception as e:
print(f"[ERROR] 集計に失敗: {e}")
def main():
parser = argparse.ArgumentParser(description="謎の気分天気バーを画面端に表示")
subparsers = parser.add_subparsers(dest="command")
show_parser = subparsers.add_parser("show", help="気分天気バーを表示")
show_parser.add_argument("--log", action="store_true", help="表示内容をログに記録")
list_parser = subparsers.add_parser("list", help="過去の気分天気バー出力を一覧表示")
list_parser.add_argument("--limit", type=int, default=10, help="表示する件数")
summary_parser = subparsers.add_parser("summary", help="気分天気の出現回数を集計")
args = parser.parse_args()
if args.command == "show":
mood, comment = choose_mood()
out = format_output(mood, comment)
print(out)
show_notification(mood, comment)
if args.log:
log_mood(mood, comment)
elif args.command == "list":
list_logs(args.limit)
elif args.command == "summary":
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業中のユーザーに対して完全ランダムな“気分天気”を通知として表示し、場の空気を和らげることを目的としています。実用性よりも演出・遊び心を重視した設計です。
# 公式ドキュメント抜粋
- Windows: [Toast Notifications](https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-notifications)
- macOS: [NSUserNotification](https://developer.apple.com/documentation/usernotifications)
- Linux: [notify-send](https://man.archlinux.org/man/notify-send.1)
# 利用例
- チームの朝会や作業開始時に、/os-fake-mood-weather-bar で気分天気を表示し、会話のきっかけや笑いを誘う。
- 開発の合間にランダム発動させて、集中しすぎた空気を和ませる。
# 注意点
- OSの通知APIを直接呼び出すため、権限やAPIのバージョンによっては通知が表示されない場合があります。
- ログファイルはユーザーのホームディレクトリに保存されますが、個人情報は含まれません。
# 設計方針
- クロスプラットフォーム(Windows/macOS/Linux)対応。
- 実在APIのみ使用し、外部依存を最小限に。
- Skill本体はCLIサブコマンド形式で拡張性を確保しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/os-fake-mood-weather-bar .claude/skills/os-fake-mood-weather-bar
.claude/skills/os-fake-mood-weather-bar の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/os-fake-mood-weather-bar
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /os-fake-mood-weather-bar と Skill 名で出てきます。
5. 動作確認
/os-fake-mood-weather-bar で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
- 謎の気分天気バーが想定どおり画面端やメニューバーに表示されるか?
- 表示内容が毎回ランダムかつカオスなワードになっているか?
- 他の通知・演出系Skillと競合しないか?
実際に Claude Code で試した検証ログは Claude Codeで謎の気分天気バーを画面に出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
