Antigravity ユーザーが日常でぶつかる悩み
Antigravity を使っていると、AI coding workflow の中で思わず「またか」と感じる小さなストレスが積み重なりがちです。特に PR(プルリクエスト)を作成するタイミングでは、真面目な repository 管理や context の説明を毎回繰り返すことに疲れてしまうことも。そんなとき、ちょっとした遊び心やチームの雰囲気づくりを求める声も多く聞かれます。
- PRタイトルを毎回きっちり考えるのが面倒で、つい generic なタイトルにしてしまう
- リポジトリの onboarding や context 説明が堅苦しくなりがちで、開発現場に遊び要素が不足している
- monorepo で package を跨ぐ作業が続くと、作業の区切りや切り替え感がなく、workflow が単調になる
- 長時間の作業で long context が膨らみ、気分転換や話題の転換ができない
- Antigravity の自動化に慣れすぎて、PR提出時も「作業報告」的なタイトルしか出てこない
このような悩みは、AI coding workflow の効率化と同時に、ちょっとしたエンタメ要素やチームの空気づくりも求められている証拠です。
この Skill が一言でいうと何を解決するか
一言サマリ: PRのタイトルSkill。
この Skill を導入することで、PR タイトルが“おみくじ”風に自動変換され、開発 workflow の中に遊び心と話題性が加わります。具体的には次のようなメリットがあります:
- PR タイトル作成の手間がゼロになり、毎回ランダムな運勢付きタイトルで気分転換ができる
- monorepo や複雑な repository 構造でも、PRごとに話題をリフレッシュしやすくなる
- onboarding や長時間の AI coding workflow でも、チーム内コミュニケーションのきっかけが生まれる
- Antigravity の context 管理や path management の堅さを和らげる“祭り”ムードが出せる
- 毎回違うタイトルになるため、PR一覧が賑やかになり記憶にも残りやすい
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/pr-title-omikuji .agent/skills/pr-title-omikuji実行したらこうなる (3つの利用シーン)
この Skill を入れると、PR 作成時にタイトルが自動で“おみくじ”風に変換されます。実際の利用シーンを terminal 風に3パターン紹介します。
シーン1: session 開始時 (プロジェクト初動で)
# 新しい feature ブランチで PR を作成
> git checkout -b feat/init-context
> git push origin feat/init-context
> gh pr create --title "Initialize context manager" --body "初期化処理の追加"
[Antigravity] PRタイトルをおみくじ化します…
[Antigravity] PRタイトル: 大吉:運命の context 初期化祭り
[Antigravity] PR作成完了: https://github.com/your-org/your-repo/pull/123
シーン2: monorepo / package 跨ぎ作業時
# packages/api と packages/ui をまたいで修正
> git checkout -b fix/api-ui-sync
> git push origin fix/api-ui-sync
> gh pr create --title "Sync API and UI" --body "monorepo の両方を修正"
[Antigravity] PRタイトルをおみくじ化します…
[Antigravity] PRタイトル: 小吉:monorepo横断のご利益アップ修正
[Antigravity] PR作成完了: https://github.com/your-org/your-repo/pull/124
シーン3: お遊び的な使い方
# ちょっとした typo 修正
> git checkout -b chore/fix-typo
> git push origin chore/fix-typo
> gh pr create --title "Fix typo" --body "typo のみ修正"
[Antigravity] PRタイトルをおみくじ化します…
[Antigravity] PRタイトル: 末吉:細かい修正にも運命の出会い
[Antigravity] PR作成完了: https://github.com/your-org/your-repo/pull/125
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | PRタイトルで workflow にアクセントがつき、重要なPRが埋もれにくい |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/pr-title-omikuji/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/pr-title-omikuji/
├── SKILL.md
├── scripts/
│ └── pr_title_omikuji.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/pr_title_omikuji.py |
PRタイトルをおみくじ風に変換するツール |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: pr-title-omikuji
description: PR作成時やタイトル編集時に、PRタイトルを“おみくじ”風の運勢付きタイトルへ自動変換します。triggerType: always。semantic-match-onlyで発動し、PR関連アクション時に適用されます。
---
# 機能概要
pr-title-omikujiは、Pull Request(PR)のタイトルを提出時に自動で“おみくじ”風タイトルへ変換するジョーク系スキルです。通常、PRタイトルは内容を端的に表現する必要がありますが、本Skillは運勢ワード(例:大吉、中吉、小吉、凶)とユーモラスなフレーズを組み合わせ、タイトルをエンタメ化します。これにより、開発現場の雰囲気が和み、日々のPR作成がちょっとしたお祭り気分に変わります。
# 使い方
本Skillは明示的な呼び出しは不要です。PR作成やタイトル編集など、PRタイトルが入力・編集されるタイミング(semantic-match-onlyトリガー)で自動的に発動します。タイトルが既に運勢ワードを含んでいる場合は再変換されません。暗黙発動キーワード例:"pull request", "PR作成", "タイトル編集" など。
# 出力例
以下は変換後のPRタイトル例です。
```
大吉: 運命のリファクタリング
中吉: ちょっと良いバグ修正
小吉: 軽い修正だけど運は微妙
末吉: ささやかな機能追加
凶: 不穏な依存関係の更新
大吉: 祝・テストカバレッジ向上
```
# 注意点
- 既存タイトルの内容や意図とは無関係に変換されます。
- タイトルの運勢ワードとフレーズはランダムに選ばれます。
- 本SkillはPRタイトル編集のみ対象で、本文や他のフィールドは変更しません。
- ローカル保存や履歴管理は行いません。
- 真面目な運用には不向きです。
# 参考資料
詳細な設計方針や運勢ワードのバリエーションはreferences/以下に記載。GitHub Pull Request API(https://docs.github.com/en/rest/pulls/pulls)を利用しています。
scripts/pr_title_omikuji.py
import sys
import argparse
import random
import requests
import os
from typing import List, Tuple
OMIKUJI_RESULTS = [
("大吉", [
"運命のリファクタリング",
"祝・テストカバレッジ向上",
"最高の機能追加",
"伝説のバグ修正",
"未来を変えるPR"
]),
("中吉", [
"ちょっと良いバグ修正",
"堅実なリファクタリング",
"安定性アップデート",
"良い感じの改善",
"無難な機能追加"
]),
("小吉", [
"軽い修正だけど運は微妙",
"ささやかな改善",
"微妙なリファクタ",
"地味なバグ修正",
"控えめな機能追加"
]),
("末吉", [
"ささやかな機能追加",
"運勢はこれから",
"地道なテスト追加",
"慎ましいアップデート",
"静かな改善"
]),
("凶", [
"不穏な依存関係の更新",
"危険なバグ修正",
"波乱のリファクタ",
"運命を狂わすPR",
"闇に包まれた修正"
])
]
GITHUB_API_URL = "https://api.github.com"
def get_random_omikuji_title() -> str:
fortune, phrases = random.choice(OMIKUJI_RESULTS)
phrase = random.choice(phrases)
return f"{fortune}: {phrase}"
def is_omikuji_title(title: str) -> bool:
for fortune, _ in OMIKUJI_RESULTS:
if title.startswith(fortune + ":"):
return True
return False
def fetch_pr_title(repo: str, pr_number: int, token: str) -> str:
url = f"{GITHUB_API_URL}/repos/{repo}/pulls/{pr_number}"
headers = {"Authorization": f"token {token}"}
resp = requests.get(url, headers=headers)
if resp.status_code != 200:
raise Exception(f"Failed to fetch PR: {resp.status_code} {resp.text}")
return resp.json().get("title", "")
def update_pr_title(repo: str, pr_number: int, new_title: str, token: str):
url = f"{GITHUB_API_URL}/repos/{repo}/pulls/{pr_number}"
headers = {
"Authorization": f"token {token}",
"Accept": "application/vnd.github+json"
}
data = {"title": new_title}
resp = requests.patch(url, headers=headers, json=data)
if resp.status_code not in (200, 201):
raise Exception(f"Failed to update PR: {resp.status_code} {resp.text}")
return resp.json()
def omikuji_command(args):
token = args.token or os.environ.get("GITHUB_TOKEN")
if not token:
print("Error: GitHub token is required via --token or GITHUB_TOKEN env var.", file=sys.stderr)
sys.exit(1)
try:
title = fetch_pr_title(args.repo, args.pr_number, token)
if is_omikuji_title(title):
print(f"PR #{args.pr_number} is already omikuji: {title}")
return
new_title = get_random_omikuji_title()
update_pr_title(args.repo, args.pr_number, new_title, token)
print(f"Updated PR #{args.pr_number} title to: {new_title}")
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(2)
def preview_command(args):
for _ in range(args.count):
print(get_random_omikuji_title())
def main():
parser = argparse.ArgumentParser(description="PRタイトルをおみくじ風に変換するツール")
subparsers = parser.add_subparsers(dest="command")
omikuji_parser = subparsers.add_parser("omikuji", help="指定PRのタイトルをおみくじ化")
omikuji_parser.add_argument("--repo", required=True, help="リポジトリ名 (owner/repo)")
omikuji_parser.add_argument("--pr-number", type=int, required=True, help="PR番号")
omikuji_parser.add_argument("--token", help="GitHubアクセストークン")
omikuji_parser.set_defaults(func=omikuji_command)
preview_parser = subparsers.add_parser("preview", help="おみくじタイトルをランダム生成して表示")
preview_parser.add_argument("--count", type=int, default=5, help="生成数")
preview_parser.set_defaults(func=preview_command)
args = parser.parse_args()
if hasattr(args, "func"):
args.func(args)
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillはPRタイトルを“おみくじ”風に変換し、開発現場にエンタメ要素を提供します。運勢ワードとフレーズは複数用意し、バリエーションを確保しています。
# 公式ドキュメント抜粋
GitHub Pull Request API: https://docs.github.com/en/rest/pulls/pulls
# 利用例
- PR作成時に自動でタイトルが「大吉: 運命のリファクタリング」等に変換される
- previewサブコマンドでローカルでタイトル案を確認可能
# 注意点
- PR本文や他フィールドは変更しません
- タイトルが既に運勢ワードで始まる場合は再変換しません
- GitHubアクセストークンが必要です
# 設計方針
タイトルの運勢ワードとフレーズはランダムで組み合わせ、毎回異なるタイトルを生成。APIエラー時は詳細をstderrに出力し、exit codeで通知します。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/pr-title-omikuji .agent/skills/pr-title-omikuji
.agent/skills/pr-title-omikuji の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/pr-title-omikuji
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- PR作成時に確実にタイトルが変換されるか?
- 運勢ワードのバリエーションが十分あるか?
- タイトル編集に支障が出ないか?
実際に Antigravity で試した検証ログは AntigravityのPRタイトルをおみくじ風に変えてみた!運勢付きで盛り上がるか検証 にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
