Claude Codeで仕事中の集中力を高める古風な通知演出の作り方

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

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

Claude Code で日々の開発やリポジトリ管理をしていると、集中力やリズムを維持するのが意外と難しいと感じる瞬間が多い。特に、長時間のAI coding workflowや、複数のrepository・directoryを跨ぐ作業では、気分転換やちょっとした刺激が欲しくなることがある。
また、「AIと一緒に作業しているのに、どこか淡々としすぎている」「もう少し遊び心や驚きが欲しい」と感じることも。そうした日常の中で、ちょっとした“非日常”を取り入れたくなるのはClaude Codeユーザーならではの「あるある」だろう。

  • 集中が切れがちな長時間のAI coding workflowで、気分転換できるきっかけが欲しい
  • sessionを再開したとき、毎回同じ説明やパターンで単調なやり取りになりがち
  • monorepoや複雑なrepository構造で作業していると、頭の中が整理しきれずリフレッシュしたくなる
  • ディレクトリやpath管理の繰り返し作業が続くと、どうしても飽きてしまう
  • AIとのやり取りに遊び心や意外性がほしいが、既存の通知や演出はどれも似たり寄ったり

「通知・演出・OS連携」カテゴリのSkillが、こうした日常の“マンネリ”や“集中力の途切れ”に斬新な刺激を与えてくれることを期待するユーザーは多い。

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

一言サマリ: このスキルは、Claude Codeの作業空間に突如“謎のOS侍”からのランダム通知を届け、集中力と気分転換を斬新に演出するSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • 長時間のAI coding workflowやrepository understanding作業中に、ランダムな侍ネタ通知で集中力をリフレッシュできる
  • sessionやdirectory移動のタイミングで、思わず笑ってしまうような侍的メッセージが届き、作業リズムに変化をもたらす
  • monorepoなど複雑なpath管理の合間に、遊び心を感じる演出でモチベーションを維持
  • Skillが毎回異なる内容を返すため、「また同じパターンか…」という飽きを感じさせない
  • データやrepositoryに一切影響せず、安心して“侍ワールド”を楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-ancient-samurai-alert .claude/skills/random-os-fake-ancient-samurai-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /random-os-fake-ancient-samurai-alert
> セッションを開始します

[謎のOS侍からのお達し]
拙者、/src/components/にてAltキー抜刀訓練の様子を見届けておる。
油断大敵、今宵のバグはマウスの居合切りにて斬るべし。
尚、リポジトリの構造を再点検するがよい。侍の道に抜かりなし。

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


> packages/api/ から packages/web/ へ移動

[謎のOS侍からのお達し]
そなた、monorepoの境界を越えし者よ。
/packages/api/ から /packages/web/ への移動、拙者見逃さず。
repository understanding の極意、パス管理を怠るべからず。
この道、侍と共に進むべし。

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


> ちょっと気分転換したい

[謎のOS侍からのお達し]
拙者、現代の者がAI coding workflowに励む姿、感服いたす。
されど、時に休息もまた侍の修行なり。
Altキーをそっと撫で、心の刀を研ぐがよい。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+侍通知で気分転換
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+侍的警句で意識向上
長時間 workflow long context で重要箇所が薄まる 集中が切れそうなタイミングで侍通知が入り、リズムを取り戻せる

発動方式

明示呼び出し (/random-os-fake-ancient-samurai-alert) と暗黙発動 (説明文や状況マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-ancient-samurai-alert/
├── SKILL.md
├── scripts/
│   └── samurai_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/samurai_alert.py 謎のOS侍からの時代錯誤な通知をランダムで発動するスクリプト。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-ancient-samurai-alert
description: 作業中やコマンド実行時、もしくは「侍」「通知」などのキーワード検出時に、ランダムな“OS侍”風メッセージ通知を発動します。明示的な /random-os-fake-ancient-samurai-alert 呼び出しにも対応し、集中力に刺激を与えます。
---

# 機能概要
このSkillは、あなたの作業環境に突如として“謎のOS侍”からの時代錯誤な通知を送り込みます。通知内容は毎回ランダム生成され、「拙者、Altキーの抜刀訓練状況を監視しておる」や「油断大敵、マウスの居合切りに注意せよ」など、現代人には意味不明な侍語録が炸裂。単調なデジタル作業に斬新な刺激とユーモアをもたらし、集中力をリフレッシュします。通知はデスクトップ(OS通知API)とターミナルの両方で表示され、実害ゼロで安全です。

# 使い方
- 明示呼び出し: `/random-os-fake-ancient-samurai-alert`
- 暗黙発動: 「侍」「通知」「集中力」などのキーワードを含む会話やコマンド実行時に自動発動
- OSに応じてデスクトップ通知(Windows/macOS/Linux)またはターミナル出力

# 出力例
```
[OS侍のお達し]
拙者、Altキーの抜刀訓練状況を監視しておる。

[OS侍のお達し]
油断大敵、マウスの居合切りに注意せよ。

[OS侍のお達し]
今宵もCtrl+Cの奥義を磨くべし。

[OS侍のお達し]
タスク切り替え、まるで手裏剣のごとし。
```

# 注意点
- 実害ゼロ(データ損失・システム設定変更なし)
- 通知内容は毎回ランダム生成で飽きさせません
- ローカルファイルや履歴保存は行いません
- 通知API利用のため、環境によっては追加パッケージ(`plyer`等)が必要です

# 参考資料
- references/design_notes.md 参照
- [plyer公式ドキュメント](https://plyer.readthedocs.io/en/latest/)
- [Python random モジュール](https://docs.python.org/ja/3/library/random.html)

scripts/samurai_alert.py

import sys
import argparse
import random
import platform
import subprocess
from typing import List

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

SAMURAI_MESSAGES = [
    "拙者、Altキーの抜刀訓練状況を監視しておる。",
    "油断大敵、マウスの居合切りに注意せよ。",
    "今宵もCtrl+Cの奥義を磨くべし。",
    "タスク切り替え、まるで手裏剣のごとし。",
    "心静かに、Enterキーの一撃を放つべし。",
    "ファイル保存、まるで巻物の如し。怠るべからず。",
    "スクリーンショットは、現代の写し絵なり。",
    "CapsLockの暴発、油断の証なり。",
    "コピペの術、侮るなかれ。",
    "Alt+Tabの極意、会得せよ。",
    "ウィンドウ整列、刀の如く正確に。",
    "Slackの通知、敵か味方か見極めよ。",
    "マウスカーソルの動き、燕返しの如し。",
    "パスワードは秘伝の巻物、漏らすべからず。",
    "アップデートの催促、黒船来航の如し。",
    "バッテリー残量、命の灯火。油断するな。",
    "プリンタの不調、妖怪の仕業か。",
    "Wi-Fi断絶、孤島に取り残されし侍の心境なり。",
    "ログイン失敗、門前払いの屈辱。",
    "再起動は、心機一転の儀式なり。"
]

NOTIFY_TITLE = "OS侍のお達し"


def pick_random_message(messages: List[str]) -> str:
    return random.choice(messages)


def notify_desktop(message: str):
    system = platform.system()
    if PLYER_AVAILABLE:
        notification.notify(
            title=NOTIFY_TITLE,
            message=message,
            app_name="SamuraiAlert",
            timeout=6
        )
    else:
        # Fallback: Try native notification commands
        try:
            if system == "Darwin":  # macOS
                script = f'display notification "{message}" with title "{NOTIFY_TITLE}"'
                subprocess.run(["osascript", "-e", script], check=True)
            elif system == "Linux":
                subprocess.run([
                    "notify-send", NOTIFY_TITLE, message
                ], check=True)
            elif system == "Windows":
                # Windows fallback: print to terminal
                print(f"[{NOTIFY_TITLE}]\n{message}\n")
            else:
                print(f"[{NOTIFY_TITLE}]\n{message}\n")
        except Exception:
            print(f"[{NOTIFY_TITLE}]\n{message}\n")


def notify_terminal(message: str):
    border = "=" * (len(NOTIFY_TITLE) + 8)
    print(f"\n{border}\n[{NOTIFY_TITLE}]\n{message}\n{border}\n")


def list_messages():
    for i, msg in enumerate(SAMURAI_MESSAGES, 1):
        print(f"{i:2d}: {msg}")


def main():
    parser = argparse.ArgumentParser(
        description="謎のOS侍からの時代錯誤な通知をランダムで発動するスクリプト。"
    )
    subparsers = parser.add_subparsers(dest="command", help="サブコマンド")

    parser_alert = subparsers.add_parser("alert", help="ランダムな侍通知を表示")
    parser_alert.add_argument(
        "--terminal", action="store_true", help="デスクトップ通知ではなくターミナル出力で表示"
    )
    parser_alert.add_argument(
        "--count", type=int, default=1, help="通知回数(デフォルト1回)"
    )

    parser_list = subparsers.add_parser("list", help="全通知メッセージ一覧を表示")

    args = parser.parse_args()

    if args.command == "alert":
        for _ in range(args.count):
            msg = pick_random_message(SAMURAI_MESSAGES)
            if args.terminal:
                notify_terminal(msg)
            else:
                notify_desktop(msg)
    elif args.command == "list":
        list_messages()
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、現代の作業環境に突如“侍”の世界観を持ち込むことで、ユーザーの集中力をリフレッシュし、単調な作業に遊び心と刺激を与えることを目的としています。実害ゼロ、完全ランダムな通知演出が特徴です。

# 公式ドキュメント抜粋
デスクトップ通知にはPythonの`plyer`ライブラリを利用。`plyer`はクロスプラットフォームでOS標準の通知APIをラップしており、Windows/macOS/Linuxで動作します。

# 利用例
- 明示的に`python samurai_alert.py alert`で通知を発動
- `python samurai_alert.py alert --count 3`で3連続通知
- `python samurai_alert.py list`で全メッセージ確認

# 注意点
- plyerが未インストールの場合は、OSごとのネイティブコマンドまたはターミナル出力に自動フォールバック
- 通知内容はローカル保存されません
- システム設定やファイルへの影響はありません

# 設計方針
- ユーザー体験の安全性と遊び心を重視
- メッセージは都度ランダム生成、飽きさせない
- CLI/スクリプト両対応で柔軟な導入が可能

導入手順

この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-ancient-samurai-alert .claude/skills/random-os-fake-ancient-samurai-alert

.claude/skills/random-os-fake-ancient-samurai-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/random-os-fake-ancient-samurai-alert
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/random-os-fake-ancient-samurai-alert で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 との連携設計はどうあるべきか?
  • 侍ネタ通知がランダムで出現し、毎回内容が変化するか?
  • 通知がシステムやデータに実害を与えないか?

実際に Claude Code で試した検証ログは Claude Codeで謎の侍通知を試してみた!ランダムで斬新な集中力ブースト体験 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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