Antigravityでコードレビューの指摘数をゲーム感覚で可視化する方法

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

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

Antigravity を使った AI coding workflow では、コードレビューや repository understanding の工程で「可視化」や「状況把握」が意外と難しいと感じる瞬間が多々あります。特に monorepo や複雑な directory 構成のプロジェクトでは、context や path management の混乱が起きやすく、レビューの指摘が増えるほど「今どんな状態?」が見えづらくなりがちです。
また、真面目な開発現場ほどレビューが淡々と進み、オンボーディングや session 再開時にも「場の空気」や「進捗感」が伝わりにくいという声もよく聞かれます。

  • Antigravity が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

レビューが進むほど「どれだけ指摘されたか」が分かりにくく、緊張感や達成感が薄れてしまうことも。単調なレビューをもっと直感的かつ楽しく、状況を分かりやすくしたい――そんな悩みが現場でよく挙がります。

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

一言サマリ: コードレビューの指摘数をRPGのHPゲージ風に可視化し、レビュー状況を一目で把握できるSkill。

このSkillを入れることで以下のような状態になる:

  • レビュー指摘数がHPゲージとして可視化され、今の「体力」が直感的に分かる
  • レビューごとにHPが減る演出で、緊張感と楽しさが加わり、開発現場の空気が一新される
  • 指摘が多いと「力尽きた」などのRPG風メッセージが表示され、進捗や課題の把握が容易になる
  • Antigravity の context・memory 管理と連動し、repo や directory 単位でレビュー状況を整理できる
  • onboarding 時や session 再開時も、HPゲージで状況が可視化されるため、長時間 workflow でも重要な情報が埋もれにくい
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/rpg-review-hp-gauge .agent/skills/rpg-review-hp-gauge

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

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

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


> このPRのレビュー状況を見せて

[Review HP Gauge]
┌────────────────────┐
│■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 90/100
└────────────────────┘
指摘数: 2 / 残HP: 90
レビュー進行中。まだまだ余裕があります。

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


> packages/api/ と packages/web/ のレビュー状況をHPゲージで見せて

[packages/api/]
┌────────────────────┐
│■■■■■■■■■■■■■■■■■■■■ 60/100
└────────────────────┘
指摘数: 8 / 残HP: 60

[packages/web/]
┌────────────────────┐
│■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 80/100
└────────────────────┘
指摘数: 4 / 残HP: 80

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


> もしHPがゼロになったらどうなる?

[Review HP Gauge]
┌────────────────────┐
│                    0/100
└────────────────────┘
指摘数: 20 / 残HP: 0
あなたのコードは力尽きた... 次の冒険者を待っています!

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる レビュー進捗や指摘数をHPゲージで可視化、状況が埋もれにくい

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/rpg-review-hp-gauge/
├── SKILL.md
├── scripts/
│   └── rpg_review_hp_gauge.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/rpg_review_hp_gauge.py RPG風コードレビューHPゲージ
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: rpg-review-hp-gauge
description: Antigravityがコードレビューの指摘数やPRコメント数を検出した際、HPゲージによる可視化を求めるキーワード(例:HPゲージ、体力バー、RPG風レビュー、指摘数可視化)が含まれている場合に発動します。
---

# 機能概要
このSkillは、コードレビュー時の指摘数をRPGのHPゲージ風に可視化します。PRごとに「あなたのコードの体力」をHPバーとして表示し、指摘が多いほどHPが減少。HPが0になると「力尽きた」演出メッセージが現れます。真面目なレビュー現場に遊び心を加え、緊張感と笑いを演出します。レビュー負荷の可視化やチームの雰囲気改善にも役立ちます。

# 使い方
明示的な呼び出しは不要です。Antigravityが「HPゲージ」「体力バー」「RPG風レビュー」「指摘数可視化」などのキーワードを含むレビュー状況やPRコメントを検出した際、自動的に発動します。レビュー指摘が多いPRや、レビュー進捗を可視化したい場面で活躍します。

# 出力例
```
[HPゲージ] あなたのコードの体力: [██████░░░░] 60/100
指摘数: 8 (最大HP: 100)

[HPゲージ] あなたのコードの体力: [░░░░░░░░░░] 0/100
指摘数: 20 (最大HP: 100)
力尽きた... 次回の冒険に期待しよう!
```

# 注意点
本Skillはレビュー指摘数の自動集計に依存します。除外パスや特定のファイルは設定により無視できますが、誤検出を防ぐためレビューコメントの形式に注意してください。HPゲージの閾値や最大HPはカスタマイズ可能です。ローカルに履歴を保存する場合、.agent/skills/rpg-review-hp-gauge/data/ 配下を利用します。

# 参考資料
詳細な設計方針やカスタマイズ方法は references/design_notes.md を参照してください。公式ドキュメントやRPG UIデザインの参考例も掲載しています。

scripts/rpg_review_hp_gauge.py

import argparse
import json
import os
import sys
from datetime import datetime

data_dir = os.path.join(os.path.dirname(__file__), 'data')
if not os.path.exists(data_dir):
    os.makedirs(data_dir)

def load_reviews():
    path = os.path.join(data_dir, 'reviews.json')
    if not os.path.exists(path):
        return []
    with open(path, 'r', encoding='utf-8') as f:
        return json.load(f)

def save_reviews(reviews):
    path = os.path.join(data_dir, 'reviews.json')
    with open(path, 'w', encoding='utf-8') as f:
        json.dump(reviews, f, ensure_ascii=False, indent=2)

def calc_hp(num_issues, max_hp=100, issue_per_hp=5):
    hp = max_hp - num_issues * issue_per_hp
    hp = max(0, min(max_hp, hp))
    return hp

def hp_bar(hp, max_hp=100, bar_len=10):
    filled = int(bar_len * hp / max_hp)
    bar = '█' * filled + '░' * (bar_len - filled)
    return f'[{bar}] {hp}/{max_hp}'

def log_review(pr_id, num_issues, reviewer, max_hp=100, issue_per_hp=5):
    reviews = load_reviews()
    hp = calc_hp(num_issues, max_hp, issue_per_hp)
    entry = {
        'timestamp': datetime.now().isoformat(),
        'pr_id': pr_id,
        'num_issues': num_issues,
        'reviewer': reviewer,
        'hp': hp,
        'max_hp': max_hp
    }
    reviews.append(entry)
    save_reviews(reviews)
    return entry

def list_reviews():
    reviews = load_reviews()
    if not reviews:
        print('No review logs found.')
        return
    for r in reviews:
        print(f"PR: {r['pr_id']} | 指摘数: {r['num_issues']} | HP: {r['hp']}/{r['max_hp']} | Reviewer: {r['reviewer']} | {r['timestamp']}")

def summary():
    reviews = load_reviews()
    if not reviews:
        print('No review logs found.')
        return
    total = len(reviews)
    avg_issues = sum([r['num_issues'] for r in reviews]) / total
    avg_hp = sum([r['hp'] for r in reviews]) / total
    print(f'レビュー記録数: {total}')
    print(f'平均指摘数: {avg_issues:.2f}')
    print(f'平均残HP: {avg_hp:.2f}')

def show_gauge(num_issues, max_hp=100, issue_per_hp=5):
    hp = calc_hp(num_issues, max_hp, issue_per_hp)
    bar = hp_bar(hp, max_hp)
    print(f'[HPゲージ] あなたのコードの体力: {bar}')
    print(f'指摘数: {num_issues} (最大HP: {max_hp})')
    if hp == 0:
        print('力尽きた... 次回の冒険に期待しよう!')

def parse_args():
    parser = argparse.ArgumentParser(description='RPG風コードレビューHPゲージ')
    subparsers = parser.add_subparsers(dest='command')

    log_parser = subparsers.add_parser('log', help='レビュー指摘数を記録')
    log_parser.add_argument('--pr', required=True, help='PR ID')
    log_parser.add_argument('--issues', type=int, required=True, help='指摘数')
    log_parser.add_argument('--reviewer', required=True, help='レビュワー名')
    log_parser.add_argument('--max-hp', type=int, default=100, help='最大HP')
    log_parser.add_argument('--issue-per-hp', type=int, default=5, help='指摘1件あたりHP減少量')

    list_parser = subparsers.add_parser('list', help='レビュー履歴を一覧表示')
    summary_parser = subparsers.add_parser('summary', help='レビュー履歴のサマリー表示')

    gauge_parser = subparsers.add_parser('gauge', help='HPゲージを表示')
    gauge_parser.add_argument('--issues', type=int, required=True, help='指摘数')
    gauge_parser.add_argument('--max-hp', type=int, default=100, help='最大HP')
    gauge_parser.add_argument('--issue-per-hp', type=int, default=5, help='指摘1件あたりHP減少量')

    return parser.parse_args()

def main():
    args = parse_args()
    if args.command == 'log':
        entry = log_review(args.pr, args.issues, args.reviewer, args.max_hp, args.issue_per_hp)
        print('レビュー記録を保存しました:')
        bar = hp_bar(entry['hp'], entry['max_hp'])
        print(f'[HPゲージ] あなたのコードの体力: {bar}')
        print(f'指摘数: {entry["num_issues"]} (最大HP: {entry["max_hp"]})')
        if entry['hp'] == 0:
            print('力尽きた... 次回の冒険に期待しよう!')
    elif args.command == 'list':
        list_reviews()
    elif args.command == 'summary':
        summary()
    elif args.command == 'gauge':
        show_gauge(args.issues, args.max_hp, args.issue_per_hp)
    else:
        print('コマンドを指定してください (log, list, summary, gauge)')

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、コードレビューの指摘数をRPGのHPゲージ風に可視化することで、開発現場に遊び心と緊張感をもたらします。指摘数が多いほどHPが減り、0になると「力尽きた」演出が表示されます。

# 公式ドキュメント抜粋
HPゲージの表示や指摘数のカウントは、Pythonスクリプトで自動化されています。履歴はJSONでローカル保存され、過去のレビュー状況も確認可能です。

# 利用例
- PRレビュー時に指摘数を入力し、HPゲージで可視化
- チームのレビュー傾向をサマリーで把握
- HPゼロ演出で場を和ませる

# 注意点
指摘数のカウント基準はプロジェクトごとに調整可能ですが、レビューコメントの形式によっては誤集計が発生する場合があります。最大HPや減少量もカスタマイズできます。

# 設計方針
シンプルなCLIとJSON保存で、他ツールとの連携や拡張も容易です。UIはRPGっぽさを重視しつつ、実用的なレビュー支援を目指しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/rpg-review-hp-gauge .agent/skills/rpg-review-hp-gauge

.agent/skills/rpg-review-hp-gauge の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/rpg-review-hp-gauge
# 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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 指摘数とHPゲージの連動が正しく動作するか?
  • HPゼロ演出やメッセージが表示されるか?
  • UIがRPGっぽく楽しい雰囲気になっているか?

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

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

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

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

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