Claude Codeでコミット運勢を表示するユニークなSkillの作り方

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

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

Claude Code を使っていると、シリアスな開発現場でも思わず「もうちょっと肩の力を抜きたい」と感じる瞬間が少なくありません。特に、コミットやデプロイ前の緊張感が高まるタイミングや、長時間の session で集中力が切れてくる場面では、何かちょっとした息抜きが欲しくなるものです。
ジョーク・パロディ系の Skill を入れたくなる「あるある」な状況を挙げてみます。

  • コミット前、なぜか手が止まってしまい、気分転換したくなる
  • monorepo の大規模 repository で作業していると、どこかで緊張感が途切れる瞬間がある
  • 長時間の AI coding workflow で、context が膨らみすぎて頭がぼーっとしてくる
  • session を再開したとき、前回の重苦しい雰囲気を引きずりたくない
  • 同僚やチームメンバーと repository understanding の話をしていると、つい遊び心を挟みたくなる

Claude Code の context や path management には真面目な工夫が求められますが、たまには「運命」に身を委ねて、コミットごとにタロット風の運勢を楽しみたい――そんな気分を叶える Skill の登場です。

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

一言サマリ: コミットするたびにSkill。

この Skill を導入すると、Claude Code でコミット操作をするたびに、ターミナルにタロット占い風のランダムな運勢メッセージが表示されます。以下のような効果が期待できます。

  • コミットや push のたびに、緊張感をほぐすユーモラスなメッセージが流れ、AI coding workflow の雰囲気が一変
  • 長時間の session や大規模 monorepo での作業でも、適度な息抜きで集中力をリセットできる
  • onboarding やチーム内の repository understanding の場面で、会話のきっかけやアイスブレイクとして活躍
  • 毎回異なる fortune メッセージで、directory や path 管理の単調さを笑いに変える
  • Skill の効果で、コミット操作がちょっとしたイベントになり、作業のモチベーションが上がる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

この Skill を使うと、コミットや明示呼び出しのたびに、ターミナルにタロット風の占い結果が表示されます。以下は、利用シーンごとの出力例です。

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


# /commit-fortune-teller
> 新しい session を始めます

─────────────
今日の運勢: 大吉
「新たな directory での挑戦が、repository に幸運をもたらすでしょう。」
Lucky Path: src/utils/
Advice: context を信じて進めば、思わぬ発見があるかも。
─────────────

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


> git commit -am "fix: update packages/foo-bar logic"

─────────────
コミット運勢: 凶
「monorepo の闇が深まる予感。packages/core/ を見落とさないよう注意!」
Lucky Path: packages/foo-bar/
Advice: repository understanding を深めると吉。
─────────────

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


> /commit-fortune-teller

─────────────
今日のタロット: 運命の輪(逆位置)
「path management に波乱あり。README.md を見直すと運気回復!」
Lucky Path: docs/
Advice: onboarding で新たな風が吹くかも。
─────────────

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる コミットごとに fortune メッセージでリフレッシュ

発動方式

明示呼び出し (/commit-fortune-teller) と暗黙発動 (コミット操作時や fortune, 占い などの description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/commit-fortune-teller/
├── SKILL.md
├── scripts/
│   └── commit_fortune_teller.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/commit_fortune_teller.py コミット占い師: commit/push/merge時にランダムな占い結果を表示します。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: commit-fortune-teller
description: コミットやpush時など、git関連の操作や"commit" "push" "merge"といったキーワードを含むイベントで発動。/commit-fortune-teller の明示呼び出しにも対応。作業の合間にランダムな占い結果を表示します。
---

# 機能概要
このSkillは、Gitコミットやpushなどの操作時、または「commit」「push」「merge」といったキーワードが含まれるイベントで自動発動し、ターミナルにタロット風の占い結果を表示します。今日の運勢や「このコミットは大吉・凶」など、完全にランダムなメッセージでエンジニアの運命を占います。作業の緊張を和らげたり、チームの雰囲気を和ませるジョーク用途に最適です。

# 使い方
- 明示呼び出し例: `/commit-fortune-teller`
- 暗黙発動: commit/push/merge などのgitイベント、または「コミット」「push」などのキーワードを含む操作で自動発動

# 出力例
```
───────────── Fortune Teller ─────────────
本日の運勢:小吉
このコミットは「運命の輪」…変化の兆しあり。
アドバイス:大胆な変更も恐れず進みましょう。
ラッキーコマンド:git stash
──────────────────────────────
```
```
───────────── Fortune Teller ─────────────
本日の運勢:凶
このコミットは「死神」…一度立ち止まって見直すべき。
アドバイス:テストを忘れずに。
ラッキーコマンド:git revert
──────────────────────────────
```

# 注意点
- 実用性はありません。完全なジョーク用途です。
- 出力はランダム生成で、実際のコミット内容や運勢とは無関係です。
- ローカル環境でのみ動作し、ファイルや履歴には何も保存しません。
- 除外パス:.git/、.claude/skills/ などSkill自身やGit管理ディレクトリには干渉しません。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 公式Gitドキュメント: https://git-scm.com/doc

scripts/commit_fortune_teller.py

import sys
import random
import argparse
import datetime

TAROT_CARDS = [
    {"name": "愚者", "meaning": "新しい旅立ち。自由な発想を大切に。"},
    {"name": "魔術師", "meaning": "創造力が高まる。新しいアイデアに挑戦を。"},
    {"name": "女教皇", "meaning": "直感が冴える。冷静な判断を。"},
    {"name": "女帝", "meaning": "豊かさと成長。周囲と協力を。"},
    {"name": "皇帝", "meaning": "リーダーシップ発揮の時。自信を持ちましょう。"},
    {"name": "法王", "meaning": "伝統やルールを尊重。基本に立ち返ると吉。"},
    {"name": "恋人", "meaning": "選択の時。迷ったら信頼できる人に相談を。"},
    {"name": "戦車", "meaning": "勢いが大事。迷わず突き進め。"},
    {"name": "力", "meaning": "忍耐と努力が報われる。焦らず着実に。"},
    {"name": "隠者", "meaning": "一人で考える時間が必要。内省を大切に。"},
    {"name": "運命の輪", "meaning": "変化の兆し。流れに身を任せて吉。"},
    {"name": "正義", "meaning": "バランスと公正。冷静な判断が吉。"},
    {"name": "吊るされた男", "meaning": "一時停止。視点を変えると突破口が。"},
    {"name": "死神", "meaning": "終わりと始まり。不要なものを手放そう。"},
    {"name": "節制", "meaning": "調和とバランス。無理せず進め。"},
    {"name": "悪魔", "meaning": "誘惑に注意。短絡的な決断は凶。"},
    {"name": "塔", "meaning": "予期せぬトラブル。バックアップ必須。"},
    {"name": "星", "meaning": "希望が見える。夢を持って進もう。"},
    {"name": "月", "meaning": "不安や迷い。焦らず見極めを。"},
    {"name": "太陽", "meaning": "成功と祝福。全てがうまくいく日。"},
    {"name": "審判", "meaning": "再出発の時。過去の経験を活かそう。"},
    {"name": "世界", "meaning": "完成と達成。努力が報われる。"}
]

FORTUNES = [
    ("大吉", "今日は絶好調!思い切った挑戦も吉。"),
    ("中吉", "順調な一日。着実に進めましょう。"),
    ("小吉", "まずまずの運勢。油断せずに。"),
    ("吉", "安定した運気。普段通りでOK。"),
    ("末吉", "少し注意が必要。慎重に。"),
    ("凶", "トラブルに注意。焦らず対処を。"),
    ("大凶", "今日は慎重に。無理は禁物。")
]

LUCKY_COMMANDS = [
    "git stash",
    "git rebase",
    "git cherry-pick",
    "git revert",
    "git log",
    "git bisect",
    "git blame",
    "git diff",
    "git reset",
    "git clean",
    "git reflog"
]

BORDER = "───────────── Fortune Teller ─────────────"

ADVICE_LIST = [
    "大胆な変更も恐れず進みましょう。",
    "テストを忘れずに。",
    "レビューを依頼してみては?",
    "コミットメッセージに愛を込めて。",
    "今日は細かい修正が吉。",
    "一旦休憩してコーヒーを。",
    "リファクタリングのチャンス。",
    "CIのログをよく確認しましょう。",
    "push前に差分を見直すと吉。",
    "仲間に助けを求めると運気UP。"
]

def generate_fortune():
    fortune, fortune_msg = random.choice(FORTUNES)
    tarot = random.choice(TAROT_CARDS)
    lucky_cmd = random.choice(LUCKY_COMMANDS)
    advice = random.choice(ADVICE_LIST)
    today = datetime.datetime.now().strftime("%Y-%m-%d")
    lines = [
        BORDER,
        f"本日の運勢:{fortune}",
        f"このコミットは「{tarot['name']}」…{tarot['meaning']}",
        f"アドバイス:{advice}",
        f"ラッキーコマンド:{lucky_cmd}",
        BORDER
    ]
    return "\n".join(lines)

def print_fortune():
    print(generate_fortune())

def main():
    parser = argparse.ArgumentParser(
        description='コミット占い師: commit/push/merge時にランダムな占い結果を表示します。')
    parser.add_argument('--log', action='store_true', help='今日の占い結果を表示(同じ内容)')
    parser.add_argument('--list', action='store_true', help='全タロットカード一覧を表示')
    parser.add_argument('--summary', action='store_true', help='運勢の種類一覧を表示')
    args = parser.parse_args()

    if args.list:
        print(BORDER)
        for card in TAROT_CARDS:
            print(f"{card['name']}: {card['meaning']}")
        print(BORDER)
        return
    if args.summary:
        print(BORDER)
        for f, msg in FORTUNES:
            print(f"{f}: {msg}")
        print(BORDER)
        return
    if args.log:
        # 今日の日付固定の乱数シードで同じ結果を出す
        seed = int(datetime.datetime.now().strftime('%Y%m%d'))
        random.seed(seed)
        print(generate_fortune())
        return
    # 通常発動:完全ランダム
    print_fortune()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、Gitコミットやpushなどのイベントをきっかけに、完全にランダムな占い結果をターミナルに表示するジョーク系スキルです。実用性よりも、エンジニアの作業中に笑いや緊張緩和をもたらすことを目的としています。

# 公式ドキュメント抜粋
Git公式: https://git-scm.com/doc
タロットカードの意味: https://www.angelfire.com/space/tarot/

# 利用例
- デプロイ前の緊張を和らげたい時
- チームでのペアプロやモブプロのアイスブレイク
- 毎日のコミットにちょっとした遊び心を加えたい時

# 注意点
- 実際のコミット内容や運勢とは無関係です。
- ローカル環境でのみ動作し、履歴やファイルには何も保存しません。
- Skill自身や.gitディレクトリには干渉しません。

# 設計方針
- 軽量な動作でコミットフックの邪魔にならないこと
- メッセージ内容は毎回完全ランダム、または--logで日付固定
- タロットカードや運勢の文面は遊び心を重視
- サブコマンドでカードや運勢一覧も確認可能

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

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

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

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

5. 動作確認

/commit-fortune-teller で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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をコピーしました!
目次