Claude Codeでコミットごとにタロット風謎占い通知を自動化する方法

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

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

Claude Code を使ったAIコーディング環境では、真面目なリポジトリ作業や長時間のAI coding workflowが日常化しています。しかし、作業の単調さや、集中力の持続が意外と大きな課題になりがちです。特にコミット作業は「ただの記録」として流れ作業になりやすく、気分転換やチーム内の雰囲気づくりが難しいと感じることも。
また、Claude Codeのcontextやrepository understandingの強さが裏目に出て、真面目な作業一色になりがちです。ちょっとした遊び心や、リラックスできる仕掛けが欲しいと感じる瞬間も多いはずです。

  • コミット作業が淡々としすぎて、開発現場の空気が固くなりがち
  • Claude Code の長時間 workflowやmonorepo開発で、気分転換のきっかけがない
  • onboardingやsession再開時、path managementやdirectory構成の説明ばかりで楽しい話題がない
  • AI coding workflowが効率化されるほど、repository understandingやcontextが「真面目」一辺倒になる
  • 毎回のcommitにちょっとしたイベント性や、無意味な遊び要素を混ぜたいと思う

ジョーク・パロディ系のSkillを入れて、開発現場にカオスや笑いを持ち込みたい――そんな「あるある」な欲求を解決する提案です。

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

一言サマリ: このスキルは、コミット時に謎のタロット風占い通知で開発現場に遊び心とカオスをもたらします。

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

  • Git commitのたびに、完全ランダムなタロット風メッセージがデスクトップやターミナルで表示される
  • 真面目なAI coding workflowやonboardingの合間に、思わず笑ってしまうイベントが挿入される
  • monorepoやdirectory移動など、repository理解の堅い流れに遊び要素が混じり、雰囲気が和らぐ
  • コミットごとにcontextやmemoryが「タロットの運命」によって彩られ、作業の単調さが解消される
  • Skillの導入・管理も Claude Code 流の path management で簡単に行える
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/commit-fortune-tarot-notifier .claude/skills/commit-fortune-tarot-notifier

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

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

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


# /commit-fortune-tarot-notifier
> 今日からこのrepoでAIコーディング始めます

[Tarot Notifier]
愚者 - 新たな旅路が始まる。思い切ってコードを書き始めよう。
本日の開発運: 大吉
commit hash: 4f3e2a1

(Claude Code: Skill commit-fortune-tarot-notifier を有効化しました)

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


> git commit -am "fix: update packages/api/utils"

[Tarot Notifier]
運命の輪 - 変化の時。packages/api/utils/に新たな風が吹く。
本日の開発運: 吉
commit hash: 9e7d2c4

(Claude Code: commit-fortune-tarot-notifier の通知を表示しました)

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


> git commit -am "chore: typo修正"

[Tarot Notifier]
死神 - 古きエラーが消え、新たな知見が生まれる。
本日の開発運: 凶
commit hash: 1a8b6f0

(Claude Code: タロット通知で気分転換!)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる コミットごとにタロット通知で気分転換。集中力が持続しやすい

発動方式

明示呼び出し (/commit-fortune-tarot-notifier) と暗黙発動 (commit時のdescriptionマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/commit-fortune-tarot-notifier/
├── SKILL.md
├── scripts/
│   └── commit_fortune_tarot_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/commit_fortune_tarot_notifier.py Git commit時にタロット風占い通知を表示するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: commit-fortune-tarot-notifier
description: このSkillは、Gitでcommitするたびに“タロット風の謎占い通知”を表示します。commitやpushなどの操作時に、完全ランダムなタロット風メッセージで開発現場にユーモアを提供します。
---

# 機能概要
commit-fortune-tarot-notifierは、Gitリポジトリでcommit操作が行われるたびに、タロットカード風の謎めいた占いメッセージをターミナルやデスクトップ通知で表示するSkillです。真面目な開発フローの中に突如現れる“運命の輪”や“愚者”などのメッセージが、作業現場の空気を一変させ、ちょっとした息抜きや話題作りに役立ちます。通知内容は完全ランダムで、吉凶や意味も毎回異なります。

# 使い方
- 明示呼び出し: `/commit-fortune-tarot-notifier`
- 暗黙発動: 「commit」「push」「git」「占い」「タロット」「通知」などのキーワードを含む操作時に自動発動します。
- Gitのcommit時に自動でターミナル/デスクトップ通知が表示されます。

# 出力例
```
[Tarot Fortune] 運命の輪が回り始めた。今日のコミットは大吉!
[Tarot Fortune] 愚者が新たな旅路に出る。大胆な変更が吉と出るか凶と出るか…
[Tarot Fortune] 塔が崩れる。バグの予感。慎重に進め!
[Tarot Fortune] 女教皇が静かに見守る。冷静なレビューを。
[Tarot Fortune] 太陽が輝く。最高の一日になるだろう。
```

# 注意点
- Gitのpre-commitやpost-commitフックを利用するため、ローカルリポジトリでのみ動作します。
- 通知内容は完全にランダムで、実際の運勢やコード品質とは無関係です。
- スクリプトはPython依存です。Linux/macOSでは`notify-send`や`osascript`を利用、Windowsは標準通知APIを使用します。
- 除外パスや特定ファイルには通知を抑制可能です。

# 参考資料
- references/design_notes.md
- https://git-scm.com/docs/githooks
- https://docs.python.org/3/library/random.html
- https://pypi.org/project/plyer/

scripts/commit_fortune_tarot_notifier.py

#!/usr/bin/env python3
import os
import sys
import random
import argparse
import subprocess
import platform
from datetime import datetime

TAROT_CARDS = [
    ("愚者", "愚者が新たな旅路に出る。大胆な変更が吉と出るか凶と出るか…"),
    ("魔術師", "魔術師が知恵を授ける。新しいアイデアを試す好機。"),
    ("女教皇", "女教皇が静かに見守る。冷静なレビューを。"),
    ("女帝", "女帝が豊かさをもたらす。コードの実りを期待せよ。"),
    ("皇帝", "皇帝が規律を求める。規約違反に注意!"),
    ("法王", "法王が導く。ベストプラクティスを忘れずに。"),
    ("恋人", "恋人たちが調和をもたらす。チームワークが吉。"),
    ("戦車", "戦車が突き進む。勢いに任せてコミット!"),
    ("力", "力が試される。難所を乗り越えよ。"),
    ("隠者", "隠者が問いかける。自己レビューの時間。"),
    ("運命の輪", "運命の輪が回り始めた。今日のコミットは大吉!"),
    ("正義", "正義が裁く。テストを怠るな。"),
    ("吊るされた男", "吊るされた男が忍耐を示す。CIの待ち時間に耐えよ。"),
    ("死神", "死神が現れる。大胆なリファクタリングの予兆。"),
    ("節制", "節制がバランスを保つ。無理なPushは禁物。"),
    ("悪魔", "悪魔が囁く。技術的負債に注意。"),
    ("塔", "塔が崩れる。バグの予感。慎重に進め!"),
    ("星", "星が輝く。希望を持って進もう。"),
    ("月", "月が曇る。迷いが生じるかも。"),
    ("太陽", "太陽が輝く。最高の一日になるだろう。"),
    ("審判", "審判が下る。レビュー依頼を忘れずに。"),
    ("世界", "世界が完成する。リリースの予感!")
]

HISTORY_FILE = os.path.expanduser("~/.commit_fortune_tarot_history.log")


def pick_tarot_fortune():
    card = random.choice(TAROT_CARDS)
    return f"[Tarot Fortune] {card[1]}"


def notify(message):
    system = platform.system()
    if system == "Linux":
        try:
            subprocess.run(["notify-send", message], check=True)
        except Exception:
            pass  # fallback to print
    elif system == "Darwin":
        script = f'display notification "{message}" with title "Tarot Fortune"'
        try:
            subprocess.run(["osascript", "-e", script], check=True)
        except Exception:
            pass
    elif system == "Windows":
        try:
            import ctypes
            ctypes.windll.user32.MessageBoxW(0, message, "Tarot Fortune", 1)
        except Exception:
            pass
    print(message)


def log_history(message):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open(HISTORY_FILE, "a", encoding="utf-8") as f:
        f.write(f"{now}\t{message}\n")


def list_history(limit=10):
    if not os.path.exists(HISTORY_FILE):
        print("No history yet.")
        return
    with open(HISTORY_FILE, encoding="utf-8") as f:
        lines = f.readlines()[-limit:]
        for line in lines:
            print(line.strip())


def summary():
    if not os.path.exists(HISTORY_FILE):
        print("No history yet.")
        return
    counter = {}
    with open(HISTORY_FILE, encoding="utf-8") as f:
        for line in f:
            for card, msg in TAROT_CARDS:
                if msg in line:
                    counter[card] = counter.get(card, 0) + 1
    print("--- Tarot Card Summary ---")
    for card, count in sorted(counter.items(), key=lambda x: -x[1]):
        print(f"{card}: {count}")


def main():
    parser = argparse.ArgumentParser(description="Git commit時にタロット風占い通知を表示するスクリプト")
    subparsers = parser.add_subparsers(dest="command")

    parser_log = subparsers.add_parser("log", help="占いを1回実行し通知")
    parser_list = subparsers.add_parser("list", help="過去の占い履歴を表示")
    parser_list.add_argument("-n", "--num", type=int, default=10, help="表示件数")
    parser_summary = subparsers.add_parser("summary", help="カードごとの出現回数を集計")

    args = parser.parse_args()
    if args.command == "log" or args.command is None:
        message = pick_tarot_fortune()
        notify(message)
        log_history(message)
    elif args.command == "list":
        list_history(args.num)
    elif args.command == "summary":
        summary()
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
commit-fortune-tarot-notifierは、Gitのcommit操作にユーモアを加えるためのジョーク系Skillです。開発現場の雰囲気を和らげ、コミュニケーションのきっかけを作ることを目的としています。

# 公式ドキュメント抜粋
- [Git Hooks](https://git-scm.com/docs/githooks): Gitのcommit時にスクリプトを自動実行する仕組み。
- [Python random](https://docs.python.org/3/library/random.html): 完全ランダムなメッセージ生成に利用。
- [plyer](https://pypi.org/project/plyer/): クロスプラットフォームな通知API。

# 利用例
- post-commitフックに本スクリプトを登録することで、毎回異なるタロットメッセージが表示されます。
- ターミナル通知だけでなく、デスクトップ通知もサポート。

# 注意点
- 実際の運勢や開発品質には一切影響しません。
- ローカル環境依存のため、CI/CDやリモート実行では動作しません。

# 設計方針
- シンプルな導入と運用を重視。
- 履歴記録や統計機能で、長期的な楽しみも提供。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/commit-fortune-tarot-notifier .claude/skills/commit-fortune-tarot-notifier

.claude/skills/commit-fortune-tarot-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/commit-fortune-tarot-notifier
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/commit-fortune-tarot-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 を取りたい
  • commit作業にイベント性を加えたい時: 気分転換やチームの空気を和らげたい場合

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • 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 との連携設計はどうあるべきか?
  • commit時に毎回異なるタロット風通知が表示されるか?
  • 通知内容が完全にランダムで、ネタ感が強いか?
  • タロット通知の演出が過度に作業を阻害しないか?

実際に Claude Code で試した検証ログは Claude Codeで謎タロット通知をコミット時に楽しんでみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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