Claude Code ユーザーが日常でぶつかる悩み
Claude Code を日々の開発やリポジトリ管理に活用していると、ちょっとした「間」が生まれる瞬間に気づくことがあります。特に session 開始や長時間作業の合間、ふとしたタイミングで集中が切れてしまったり、気分転換のきっかけがつかめずに workflow が単調になりがちです。そんな時、ちょっとした演出や通知があれば、開発体験がぐっと楽しくなるはずです。
また、通知や演出系の Skill が少ない現状では、Claude Code の session が淡々と進行しがちで、「今日は何か面白いことが起きるかな?」という遊び心の余地が少ないと感じるユーザーも多いでしょう。特に以下のような悩みが日常的に発生しています。
- 長時間の開発 session で気分転換やリフレッシュのきっかけが欲しい
- Claude Code の session 開始時に、ちょっとした演出やモチベーションアップ要素が足りない
- 通知系 Skill が少なく、OS やターミナルに遊び心のあるメッセージが表示されることがない
- 「今日は何か面白いことが起きるかも」というワクワク感が session に持ち込めない
- AI coding workflow が単調になりやすく、開発体験がマンネリ化しがち
通知・演出・OS連携の観点から、こうした「ちょっとした楽しさ」「意外性」を日常 workflow に自然に組み込める仕組みが求められています。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Claude Code の session 開始や特定のタイミングで“謎のOS風星占い通知”を自動表示し、開発 workflow に遊び心とリフレッシュをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- session 開始や monorepo 移動など、重要なタイミングでランダムな“星占い風メッセージ”が OS またはターミナルに通知され、気分転換やモチベーションアップにつながる
- AI coding workflow の進行にちょっとしたユーモアや演出が加わり、単調な作業でも楽しみが生まれる
- 長時間作業や onboarding 時など、context 切り替えのきっかけとしても活用できる
- repository understanding の合間に、リラックスできる“ネタ”要素を自然に挟める
- 毎回異なる内容の通知で、飽きずに使い続けられる
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-fake-horoscope-notifier .claude/skills/random-os-fake-horoscope-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-fake-horoscope-notifier
> Claude Code で新しい session を開始
========================
【謎のOS星占い通知】
今日のラッキーディレクトリは: /src/utils
運勢: バグ回避率が5%上昇中
アドバイス: "ls" コマンドを3回唱えると良いことがあるかも
仕様変更星が逆行中。pull requestは慎重に。
========================
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ へ移動
------------------------
【謎のOS星占い通知】
本日のラッキーパッケージ: packages/web/
運勢: context 切り替えがスムーズに進む予感
注意: "node_modules" 星が活発化、依存管理にご用心
今日の開発ラッキーワード: repository understanding
------------------------
シーン3: お遊び的な使い方
> /random-os-fake-horoscope-notifier
+----------------------------+
| OS HOROSCOPE |
+----------------------------+
| 今日の運勢: コードレビュー運◎ |
| ラッキーコマンド: git diff |
| 謎の助言: README.md を読み返すと吉 |
| 注意: long context の膨張にご注意 |
+----------------------------+
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Claude Code が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 星占い通知で気分転換、リフレッシュして workflow 継続 |
発動方式
明示呼び出し (/random-os-fake-horoscope-notifier) と暗黙発動 (session 開始や directory 移動時など、description マッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-fake-horoscope-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-fake-horoscope-notifier/
├── SKILL.md
├── scripts/
│ └── random_os_fake_horoscope_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_horoscope_notifier.py |
Random OS Fake Horoscope Notifier |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-horoscope-notifier
description: 作業開始や新規ターミナル起動時など、ユーザーの開発セッション開始を検知した際に発動。'占い'や'運勢'、'ラッキーコマンド'などのキーワード出現時にも明示的に呼び出せます。
---
# 機能概要
このSkillは、開発者の作業開始時や新規ターミナル起動時などに、完全ランダムな“OS風の星占い通知”を表示します。通知内容は「今日のラッキーコマンドはls」や「運勢:バグ回避率上昇」「注意:仕様変更星が逆行中」など、開発現場にちなんだユーモラスな占いメッセージ。1日1回だけ通知され、毎回異なるネタが表示されるため、日々のコーディングにちょっとした笑いと新鮮さをもたらします。
# 使い方
- 明示呼び出し: `/random-os-fake-horoscope-notifier` または `/horoscope`
- 暗黙発動: 「作業開始」「新規ターミナル」「占い」「運勢」「ラッキーコマンド」などのキーワードや、セッション開始時に自動で発動します。
# 出力例
```
─────────────────────────────
【OS星占い通知】
運勢:今日はバグ回避率が15%上昇します。
ラッキーコマンド:ls
注意:仕様変更星が逆行中。コミット前にREADMEを確認!
─────────────────────────────
```
# 注意点
- 通知は1日1回のみ。複数回呼び出しても同じ内容が表示されます。
- 通知内容は完全ランダム生成ですが、実際の運勢や開発効率には一切影響しません。
- ローカルに通知履歴を保存します(`~/.random_os_horoscope_history.json`)。
- OSの通知API(macOS: `osascript`、Linux: `notify-send`、Windows: `toast`)とターミナル出力の両方に対応。
# 参考資料
- references/design_notes.md
- [notify-send公式](https://specifications.freedesktop.org/notification-spec/latest/)
- [osascript](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
scripts/random_os_fake_horoscope_notifier.py
import os
import sys
import json
import random
import argparse
import datetime
import subprocess
from pathlib import Path
HISTORY_PATH = Path.home() / '.random_os_horoscope_history.json'
LUCKY_COMMANDS = [
'ls', 'cd', 'git status', 'grep', 'cat', 'vim', 'nano', 'pwd', 'docker ps', 'make',
'curl', 'python', 'tree', 'rm', 'mv', 'cp', 'ssh', 'htop', 'ps aux', 'killall'
]
FORTUNES = [
'今日はバグ回避率が{percent}%上昇します。',
'コードレビュー運が絶好調。積極的に依頼を!',
'依存関係のトラブルに要注意。慎重なアップデートを。',
'新しいIDE拡張機能を試すと吉。',
'コミットメッセージが冴え渡る一日。',
'設計書の読み返しが開運のカギ。',
'ペアプロで思わぬ発見がありそう。',
'デプロイ運が高まっています。',
'今日はレビューコメントが優しくなります。',
'コード整形ツールが幸運を呼びます。',
'CI/CDパイプラインが順調に流れる予感。',
'バグ報告は早めが吉。',
'新規プロジェクト開始に最適な日。',
'技術書を読むとスキルアップ運アップ。',
'リファクタリング運が上昇中。',
'コーヒーブレイクがひらめきを呼ぶでしょう。'
]
WARNINGS = [
'仕様変更星が逆行中。コミット前にREADMEを確認!',
'依存パッケージ流星群接近。アップデートは慎重に。',
'マージコンフリクト座が活発化。こまめなpull推奨。',
'API制限星が低迷。リクエストは控えめに。',
'ネットワーク障害星が微妙に影響中。',
'レビュー待ち渋滞発生。気長に待ちましょう。',
'ドキュメント星が薄め。仕様確認を怠らずに。',
'タイポ星が接近中。スペルチェックを忘れずに。',
'OSアップデート星が逆行。再起動は計画的に。',
'エラー星が不安定。ログをこまめに確認。'
]
BORDER = '─────────────────────────────'
def load_history():
if HISTORY_PATH.exists():
try:
with open(HISTORY_PATH, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception:
return {}
return {}
def save_history(history):
try:
with open(HISTORY_PATH, 'w', encoding='utf-8') as f:
json.dump(history, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"[WARN] 履歴保存に失敗: {e}")
def generate_fortune():
percent = random.randint(5, 30)
fortune = random.choice(FORTUNES)
if '{percent}' in fortune:
fortune = fortune.format(percent=percent)
return fortune
def generate_notification():
fortune = generate_fortune()
lucky = random.choice(LUCKY_COMMANDS)
warning = random.choice(WARNINGS)
lines = [
BORDER,
'【OS星占い通知】',
f'運勢:{fortune}',
f'ラッキーコマンド:{lucky}',
f'注意:{warning}',
BORDER
]
return '\n'.join(lines)
def show_terminal_notification(msg):
print(msg)
def show_os_notification(title, msg):
# macOS
if sys.platform == 'darwin':
script = f'display notification "{msg}" with title "{title}"'
try:
subprocess.run(['osascript', '-e', script], check=True)
except Exception as e:
print(f"[WARN] OS通知失敗: {e}")
# Linux (notify-send)
elif sys.platform.startswith('linux'):
try:
subprocess.run(['notify-send', title, msg], check=True)
except Exception as e:
print(f"[WARN] OS通知失敗: {e}")
# Windows (toast)
elif sys.platform.startswith('win'):
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, msg, duration=5)
except ImportError:
print("[WARN] win10toastが未インストールのため、OS通知をスキップします。pip install win10toast で導入可能です。")
except Exception as e:
print(f"[WARN] OS通知失敗: {e}")
else:
print("[INFO] このOSではOS通知がサポートされていません。")
def already_notified_today(history):
today = datetime.date.today().isoformat()
return history.get('last_notified') == today
def main():
parser = argparse.ArgumentParser(description='Random OS Fake Horoscope Notifier')
subparsers = parser.add_subparsers(dest='command')
subparsers.add_parser('notify', help='今日の星占い通知を表示')
subparsers.add_parser('history', help='過去の通知履歴を表示')
subparsers.add_parser('reset', help='履歴をリセット')
args = parser.parse_args()
history = load_history()
if args.command == 'notify' or args.command is None:
if already_notified_today(history):
msg = history.get('last_message', '(本日の通知は既に表示済みです)')
else:
msg = generate_notification()
history['last_notified'] = datetime.date.today().isoformat()
history['last_message'] = msg
if 'log' not in history:
history['log'] = []
history['log'].append({'date': history['last_notified'], 'message': msg})
save_history(history)
show_terminal_notification(msg)
show_os_notification('OS星占い', msg.replace('\n', ' '))
elif args.command == 'history':
log = history.get('log', [])
if not log:
print('履歴はありません。')
else:
print('=== OS星占い通知履歴 ===')
for entry in log[-10:]:
print(f"{entry['date']}\n{entry['message']}\n")
elif args.command == 'reset':
save_history({})
print('履歴をリセットしました。')
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発者の日常にユーモアをもたらすため、完全にランダムな“OS風星占い通知”を1日1回自動生成・表示するものです。通知はターミナルとOSの両方に現れ、開発セッションの開始時や明示呼び出しで発動します。
# 公式ドキュメント抜粋
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/latest/)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- [win10toast (Windows)](https://pypi.org/project/win10toast/)
# 利用例
- 朝一番のターミナル起動時に自動で通知
- `/random-os-fake-horoscope-notifier` コマンドで明示的に呼び出し
- 過去10日分の通知履歴を`history`サブコマンドで確認
# 注意点
- 1日1回のみ通知。履歴は`~/.random_os_horoscope_history.json`に保存
- OS通知は環境によって失敗する場合がある(Linuxは`notify-send`コマンド、macOSは`osascript`、Windowsは`win10toast`が必要)
# 設計方針
- ユーザーの作業開始を楽しく演出するため、通知内容は完全に架空でネタ要素を重視
- OS横断的な通知APIをサポートし、どの環境でも分かりやすい通知体験を提供
- 履歴管理とエラーハンドリングを重視し、複数回通知や通知失敗時もユーザーに配慮
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/random-os-fake-horoscope-notifier .claude/skills/random-os-fake-horoscope-notifier
.claude/skills/random-os-fake-horoscope-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-fake-horoscope-notifier
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-horoscope-notifier と Skill 名で出てきます。
5. 動作確認
/random-os-fake-horoscope-notifier で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 を取りたい
- 気分転換・遊び心を入れたい時: 開発 session の合間にちょっとした演出を加えたい時
気になるポイント (壊れそうな箇所)
実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:
- 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 との連携設計はどうあるべきか?
- 1日1回だけ通知されるか? (複数 session で重複しないか)
- 通知内容が毎回ランダムでネタ要素を含むか?
- OS/ターミナル両方で分かりやすく通知が現れるか?
実際に Claude Code で試した検証ログは Claude Codeで謎のOS星占い通知を毎日楽しんでみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
