Antigravityでコミットごとに謎のタロット占いを楽しむ方法

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

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

AI coding workflow を支える Antigravity は、repository understanding や context 記憶の自動化で開発効率を高めてくれますが、毎日の作業の中で「ちょっとした息抜き」や「遊び心」が欲しくなる瞬間も多いものです。特に長時間の session や、monorepo の複雑な path management、directory 増殖に悩まされる中で、真面目な空気が続くと気分転換が難しいという声もよく聞きます。

  • コミット作業がルーチン化し、気分転換やユーモアが不足しがち
  • monorepo で複数 package を跨ぐと、Antigravity の repository understanding は便利だが、開発現場の雰囲気が単調になる
  • session を再開するたびに context や path 指定を繰り返すことで、作業が事務的になりやすい
  • 長時間の AI coding workflow で long context が膨らみ、重要な情報が埋もれるだけでなく、気分のリフレッシュが難しい
  • コミット時、何かしらの演出や小ネタでチームの空気を和らげたいが、自然な導入方法がない

こうした「作業のマンネリ化」や「ちょっとした遊び心の不足」は、ジョーク・パロディ系 Skill で一気に解消できる分野です。

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

一言サマリ: このスキルは、コミット時にタロット風の謎占い通知を自動で表示し、開発現場にユーモアとカオスをもたらすSkill。

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

  • コミットごとに完全ランダムなタロット風メッセージが表示され、気分転換やチームの話題作りに役立つ
  • monorepo での複雑な directory 構造や長時間の workflow の中でも、作業の合間に自然な笑いが生まれる
  • Antigravity の context 記憶や repository understanding の合間に「意味のない占い」が挟まることで、作業フローが一瞬ほぐれる
  • 通知は過度に作業を邪魔せず、真面目な開発現場にちょうどよい“ネタ”として機能
  • Skill の導入・管理も path management に準拠し、簡単にオンオフできる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/commit-fortune-tarot-notifier .agent/skills/commit-fortune-tarot-notifier

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

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

シーン1: session 開始時 (プロジェクト初動で)


> git commit -m "init: プロジェクト初期化"

[commit-fortune-tarot-notifier] あなたの本日の運勢は…「運命の輪」
「変化の時。新たなサイクルが始まる予感。プロジェクトの未来は未知数!」

(ヒント: 

Skill の中身を全部見せる

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

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

各ファイルの役割

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

SKILL.md

---
name: commit-fortune-tarot-notifier
description: Gitのcommit操作が発生した際、commitメッセージや履歴を検知し、毎回異なるタロット風の謎占い通知をランダムに生成・表示します。commit時の演出や開発現場の雰囲気作りに最適です。
---

# 機能概要
このSkillは、Gitでcommitが行われるたびに、完全ランダムな“タロット風占いメッセージ”をデスクトップ通知またはターミナルに表示します。各commitごとに「運命の輪が回る」「愚者が新たな旅路に」など、意味深かつ全く根拠のないメッセージが炸裂。真面目な開発フローに突如として謎のタロット演出が現れ、作業にユーモアとカオスをもたらします。通知内容は毎回異なり、作業の合間にちょっとした楽しみや話題を提供します。

# 使い方
このSkillは、Gitのcommit時に自動的に発動します。明示的な呼び出しは不要です。Skillが有効な状態で`git commit`を実行するだけで、ターミナルまたはデスクトップにランダムなタロットメッセージが表示されます。

**暗黙発動キーワード例:**
- git commit
- コミット履歴操作
- コード変更確定

# 出力例
```
[Tarot Fortune] 愚者が新たな旅路に出る。今日のcommitは冒険の始まり。
[Tarot Fortune] 運命の輪が静かに回転した。流れに身を任せよ。
[Tarot Fortune] 塔が崩れた。大胆な変更に注意。
[Tarot Fortune] 世界のカードが現れた。完璧な仕上がりに近づいている。
[Tarot Fortune] 隠者が静かに微笑む。内省のcommit。
```

# 注意点
- 通知内容は完全にランダムで、実際の運勢やcommit内容とは一切関係ありません。
- デスクトップ通知は`notify-send`(Linux)または`osascript`(macOS)を利用。環境によってはターミナル出力のみとなります。
- Skillの通知が頻繁すぎる場合は、設定で無効化や間引きも検討してください。
- ローカル環境でのみ動作し、外部サーバーへのデータ送信は行いません。

# 参考資料
- [Git公式ドキュメント](https://git-scm.com/doc)
- references/design_notes.md 参照

scripts/commit_fortune_tarot_notifier.py

import sys
import random
import subprocess
import argparse
import os
import platform
from datetime import datetime

TAROT_MESSAGES = [
    "愚者が新たな旅路に出る。今日のcommitは冒険の始まり。",
    "運命の輪が静かに回転した。流れに身を任せよ。",
    "塔が崩れた。大胆な変更に注意。",
    "世界のカードが現れた。完璧な仕上がりに近づいている。",
    "隠者が静かに微笑む。内省のcommit。",
    "死神が通り過ぎた。古いコードに別れを告げよ。",
    "恋人たちが手を取り合う。協力が吉。",
    "太陽が輝く。明るい未来が見える。",
    "月が曇る。見えないバグに注意。",
    "審判の時。レビューを恐れるな。",
    "力のカードが出た。自信を持ってpushせよ。",
    "節制の天使が現れた。冷静な判断を。",
    "正義の天秤が揺れる。コミットメッセージは正直に。",
    "戦車が突き進む。勢いのある開発。",
    "女帝が微笑む。豊かな実装。",
    "魔術師が現れる。新しい技術に挑戦せよ。",
    "吊るされた男。辛抱の時。",
    "悪魔が囁く。誘惑に負けるな。",
    "星が瞬く。希望を持て。",
    "皇帝が命じる。リーダーシップを発揮せよ。"
]

LOG_FILE = os.path.expanduser("~/.commit_fortune_tarot.log")


def select_random_message():
    return random.choice(TAROT_MESSAGES)


def notify_desktop(message):
    system = platform.system()
    title = "Tarot Fortune"
    try:
        if system == "Linux":
            subprocess.run(["notify-send", title, message], check=True)
        elif system == "Darwin":
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(["osascript", "-e", script], check=True)
        else:
            # Windowsやその他はターミナル出力のみ
            print(f"[{title}] {message}")
    except Exception as e:
        print(f"[Tarot Fortune] {message}")
        print(f"[Tarot Notifier Error] 通知送信に失敗: {e}")


def log_message(message):
    try:
        with open(LOG_FILE, "a", encoding="utf-8") as f:
            f.write(f"{datetime.now().isoformat()} {message}\n")
    except Exception as e:
        print(f"[Tarot Notifier Error] ログ保存に失敗: {e}")


def show_fortune():
    message = select_random_message()
    notify_desktop(message)
    log_message(message)


def list_log():
    if not os.path.exists(LOG_FILE):
        print("ログファイルが存在しません。")
        return
    try:
        with open(LOG_FILE, "r", encoding="utf-8") as f:
            lines = f.readlines()
        for line in lines[-20:]:
            print(line.strip())
    except Exception as e:
        print(f"[Tarot Notifier Error] ログ読み込み失敗: {e}")


def summary_log():
    if not os.path.exists(LOG_FILE):
        print("ログファイルが存在しません。")
        return
    try:
        with open(LOG_FILE, "r", encoding="utf-8") as f:
            lines = f.readlines()
        total = len(lines)
        by_card = {}
        for line in lines:
            for card in TAROT_MESSAGES:
                if card[:8] in line:
                    by_card[card[:8]] = by_card.get(card[:8], 0) + 1
        print(f"合計 {total} 回のタロット通知が記録されています。\n")
        for k, v in by_card.items():
            print(f"{k}: {v} 回")
    except Exception as e:
        print(f"[Tarot Notifier Error] サマリ集計失敗: {e}")


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

    subparsers.add_parser("fortune", help="ランダムなタロット通知を表示")
    subparsers.add_parser("list", help="最近のタロット通知ログを表示")
    subparsers.add_parser("summary", help="タロット通知のサマリを集計表示")
    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == "fortune" or args.command is None:
        show_fortune()
    elif args.command == "list":
        list_log()
    elif args.command == "summary":
        summary_log()
    else:
        print("不明なコマンドです。--help を参照してください。")

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、開発現場のコミット作業にユーモアと偶発性をもたらすために設計されました。commit時に毎回異なるタロット風メッセージを表示し、作業の合間にちょっとした話題や気分転換を提供します。

# 公式ドキュメント抜粋
- Git公式: https://git-scm.com/doc
- notify-send (Linux): https://specifications.freedesktop.org/notification-spec/latest/
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/

# 利用例
- チーム開発でcommit時の話題作りに
- 個人開発のモチベーション維持や気分転換に
- コミット履歴に沿った占いログの振り返り

# 注意点
- 通知内容は完全にランダムで、実際の運勢やコード内容には一切関係しません。
- デスクトップ通知はLinux/macOSのみ対応。Windowsではターミナル出力のみ。
- ログはホームディレクトリの .commit_fortune_tarot.log に保存されます。

# 設計方針
- シンプルな設計で、GitフックやCI/CDパイプラインにも容易に組み込める
- ローカル環境で完結し、外部通信や個人情報の送信は行わない
- ユーザーの作業を阻害しないよう、通知は短文・即時性重視

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/commit-fortune-tarot-notifier .agent/skills/commit-fortune-tarot-notifier

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

3. ファイル配置確認

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

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

新しいSkillが自動で認識されます。リスト確認したい場合は Antigravity に「使えるSkill一覧を見せて」と聞く と Skill 名で出てきます。

5. 動作確認

自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Antigravity に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Antigravity に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Antigravity 固有の引っかかり: description のセマンティックマッチ精度が要件次第
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory
  • 通知が多すぎる場合: チーム開発で頻繁に発動し、逆にノイズになる可能性

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • commit時に毎回異なるタロット風通知が表示されるか?
  • 通知内容が完全にランダムで、ネタ感が強いか?
  • 通知の演出が作業を過度に阻害しないか?

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

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

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

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

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