Antigravityでコミット運勢を可視化!作業の緊張を和らげる方法

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

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

Antigravity を使った AI coding workflow では、真面目な開発作業が続きがちです。特に monorepo 環境や複雑な repository 構造では、AI の context 管理や path management に神経を使う場面が多く、気が抜けません。そんな中、ちょっとした息抜きや遊び心が欲しくなる瞬間もあるでしょう。

実際、以下のような「あるある」な状況に直面することがよくあります。

  • コミット作業が単調で、緊張感や疲労が溜まる
  • 重たいリリース前に、少しでもリラックスしたいがきっかけがない
  • 長時間 session で集中力が切れ、作業ミスが増える
  • onboarding 直後や新しい directory で、空気が重くなりがち
  • Antigravity の context や repository understanding に集中しすぎて、気分転換の余裕がない

AI coding agent とのやりとりがシリアスになりすぎると、作業効率やモチベーションにも影響が出がちです。

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

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

この Skill を導入することで、以下のような効果が得られます。

  • コミット時にランダムなタロット風占いメッセージが表示され、作業の緊張感を和らげる
  • 長い AI coding workflow の中で、ちょっとした笑いやカオスを取り入れられる
  • onboarding 直後や session 再開時の堅苦しさを吹き飛ばし、チーム全体の雰囲気を明るくできる
  • repository や directory 構造に縛られない「遊び」の context を持ち込める
  • Skill の導入だけで、日々のコミットがちょっとしたイベントに変わる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

この Skill を有効化した状態でコミットや主要な作業を行うと、ターミナルに完全ランダムな「今日の運勢」や「このコミットの吉凶」といった占いメッセージが現れます。以下は想定される出力例です。

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


> git commit -m "init: bootstrap project"

─────────────
本日のタロット占い
─────────────
あなたのコミットは「大吉」!
新しい directory での挑戦が幸運を呼びます。
repository understanding も冴え渡る一日。
─────────────

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


> git commit -m "fix: packages/auth/session bug"

─────────────
コミット運勢:小吉
─────────────
monorepo の context を見失いがち。
path management に気をつけて進めば問題なし。
directory 境界での油断に注意!
─────────────

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


> git commit -m "chore: README更新"

─────────────
Antigravity 占い
─────────────
「凶」
今日は memory が溢れ気味。long context への過信は禁物。
でも、遊び心を忘れなければ大丈夫!
─────────────

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

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

各ファイルの役割

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

SKILL.md

---
name: commit-fortune-teller
description: git commit 実行時やコミットメッセージ作成時に、ターミナルへランダムなタロット風占いメッセージを表示するSkillです。コミット・変更・バージョン管理などのキーワードが含まれる操作で発動します。
---

# 機能概要
commit-fortune-teller は、git commit などのバージョン管理操作時に、ターミナルへタロットカード風の占い結果を表示するジョーク系Skillです。実用性はありませんが、作業中の緊張やマンネリを和らげ、エンジニアに一瞬の笑いと混乱をもたらします。運勢は完全ランダムで、今日の運勢や「このコミットは大吉・凶」など、遊び心あふれる文面が出現します。

# 使い方
このSkillは明示的な呼び出しは不要です。`git commit`や`コミット`、`バージョン管理`などの操作・キーワードを検知すると自動的に発動します。暗黙発動例:
- コマンド: `git commit -m "fix bug"`
- コメント: "コミット前に運勢を知りたい"

# 出力例
```
=== Commit Fortune Teller ===
今日の運勢: 小吉
このコミットは「運命の輪」…予想外の展開が待っているかも。
アドバイス: 変更内容をもう一度見直すと吉。
-----------------------------

=== Commit Fortune Teller ===
今日の運勢: 凶
このコミットは「愚者」…大胆な一歩、でも注意も必要。
アドバイス: テストを忘れずに!
-----------------------------
```

# 注意点
- 本Skillは完全にランダムなメッセージを生成し、実際のコード品質や運勢とは無関係です。
- コミット内容や履歴には一切影響しません。
- ローカル環境でのみ動作し、履歴や個人情報は保存しません。
- 占いの結果に一喜一憂しすぎないようご注意ください。

# 参考資料
詳細な設計方針やサンプルは references/design_notes.md を参照してください。タロットカードの意味は https://www.tarot.com/tarot/cards を参考にしています。

scripts/commit_fortune_teller.py

import sys
import argparse
import random
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 = [
    "大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"
]

advices = [
    "テストを忘れずに!",
    "変更内容をもう一度見直すと吉。",
    "休憩を挟むと良いアイデアが浮かぶかも。",
    "レビュー依頼をしてみよう。",
    "コミットメッセージは丁寧に。",
    "深夜のコミットは控えめに。",
    "pushの前にpullを忘れずに。",
    "気分転換にストレッチを。",
    "自信を持って大丈夫。",
    "今日は早めに帰ろう。"
]

def print_fortune():
    today = datetime.date.today().strftime('%Y-%m-%d')
    fortune = random.choice(fortunes)
    card = random.choice(tarot_cards)
    advice = random.choice(advices)
    print("=== Commit Fortune Teller ===")
    print(f"今日の運勢: {fortune}")
    print(f"このコミットは「{card['name']}」…{card['meaning']}")
    print(f"アドバイス: {advice}")
    print("-----------------------------\n")

def log_fortune(logfile):
    today = datetime.date.today().strftime('%Y-%m-%d')
    fortune = random.choice(fortunes)
    card = random.choice(tarot_cards)
    advice = random.choice(advices)
    with open(logfile, 'a', encoding='utf-8') as f:
        f.write(f"[{today}] 運勢: {fortune} | カード: {card['name']} | アドバイス: {advice}\n")

def list_log(logfile, count=10):
    try:
        with open(logfile, 'r', encoding='utf-8') as f:
            lines = f.readlines()
            for line in lines[-count:]:
                print(line.strip())
    except FileNotFoundError:
        print("ログファイルがありません。")

def summary_log(logfile):
    try:
        with open(logfile, 'r', encoding='utf-8') as f:
            lines = f.readlines()
            total = len(lines)
            fortune_count = {k: 0 for k in fortunes}
            for line in lines:
                for fortune in fortunes:
                    if f"運勢: {fortune}" in line:
                        fortune_count[fortune] += 1
            print(f"=== Fortune Summary ({total}件) ===")
            for k, v in fortune_count.items():
                print(f"{k}: {v}回")
    except FileNotFoundError:
        print("ログファイルがありません。")

def main():
    parser = argparse.ArgumentParser(description="コミット占いスクリプト")
    subparsers = parser.add_subparsers(dest='command')

    parser_show = subparsers.add_parser('show', help='占い結果を表示')
    parser_log = subparsers.add_parser('log', help='占い結果をログに記録')
    parser_log.add_argument('--logfile', default='.commit_fortune.log', help='ログファイル名')
    parser_list = subparsers.add_parser('list', help='ログを表示')
    parser_list.add_argument('--logfile', default='.commit_fortune.log', help='ログファイル名')
    parser_list.add_argument('--count', type=int, default=10, help='表示件数')
    parser_summary = subparsers.add_parser('summary', help='ログのサマリー')
    parser_summary.add_argument('--logfile', default='.commit_fortune.log', help='ログファイル名')

    args = parser.parse_args()

    if args.command == 'show' or args.command is None:
        print_fortune()
    elif args.command == 'log':
        log_fortune(args.logfile)
    elif args.command == 'list':
        list_log(args.logfile, args.count)
    elif args.command == 'summary':
        summary_log(args.logfile)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
commit-fortune-tellerは、git commit等の操作時にランダムなタロット風占いを表示するジョークSkillです。エンジニアの作業に一瞬の遊び心を加えることを目的としています。

# 利用例
- コミット直前の緊張緩和や、チーム内の雑談ネタに。
- 実際の運勢やコード品質には一切影響しません。

# 設計方針
- 占い結果やカードは完全ランダムで選ばれます。
- 実際のコミット内容や履歴には何も影響を与えません。
- ログ機能により、過去の占い結果を振り返ることも可能です。

# 注意点
- 本Skillはジョーク目的であり、実用性はありません。
- ローカル環境でのみ動作し、個人情報の外部送信はありません。

# 公式ドキュメント抜粋
タロットカードの意味は https://www.tarot.com/tarot/cards を参考にしています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

ls .agent/skills/commit-fortune-teller
# 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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 占いメッセージが毎回ランダムで、飽きずに楽しめるか?
  • コミット時の割り込み動作が軽量で、作業の邪魔になりすぎないか?

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

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

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

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

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