Antigravityで作業を劇場化!侍ナレーション演出の活用ガイド

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

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

Antigravity を日常的に使っていると、便利さと引き換えにちょっとしたストレスや「もう少し何とかならないか」と感じる瞬間が少なくありません。特に、通知や演出、OSとの連携に関わる部分では、作業が単調になりがちで、集中力が切れたり、進捗が分かりづらくなることも。

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

また、ターミナル作業が淡々と進むことで、集中力が続かず作業効率が落ちることや、メンバー同士で進捗を共有しにくいという悩みもあります。

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

一言サマリ: ターミナルでコマンドを打つたびにSkill。

このSkillを導入することで、ターミナル操作のたびに時代劇風の侍ナレーションが現れ、作業の進行や成功・失敗を勇ましく実況してくれます。具体的なメリットは以下の通りです。

  • 単調なAI coding workflowの中にライブ感と演出を加え、集中力やモチベーションを維持しやすくなる
  • コマンド実行のタイミングで context や directory、repo 構造に即したコメントが入ることで、repository understanding が促進される
  • onboarding 時や session 再開時でも、侍ナレーションが path management や作業の流れを自然にリマインドしてくれる
  • 毎回異なるセリフで飽きさせず、長時間の作業や長い context でもリフレッシュ効果が得られる
  • 周囲のメンバーとのコミュニケーションやアイスブレイクにも活用できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/terminal-samurai-announcer .agent/skills/terminal-samurai-announcer

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

このSkillを有効にすると、ターミナルでコマンドを打つたびに時代劇の侍風ナレーションが自動で表示されます。以下、具体的な利用シーンと出力例です。

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


> antigravity start

拙者、ここに新たな戦(いくさ)の場を開く!
repository「samurai-monorepo」にて、主君の命に従い候。
まずは src/ 配下を見渡し、敵(バグ)の気配を探る所存。
この道、険しきも勇猛果敢に進み申す!

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


> cd packages/frontend && npm run build

おお、前線を packages/frontend へと移し申したか!
拙者、ここで新たな構造を見極め、context を整え候。
build の儀、見事成し遂げられれば、主君の誉れぞ!
敵はまだ奥に潜むやもしれぬ、油断召されるな。

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


> git commit -am "Add samurai announcer skill"

このcommit、まこと見事なり!
拙者、時代の風を感じ申す。
repository の memory に新たな章が刻まれた。
次なる戦場へ、いざ参らん!

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 侍ナレーションで進捗が明確になり、重要な情報もリマインドされやすい

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/terminal-samurai-announcer/
├── SKILL.md
├── scripts/
│   └── samurai_announce.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/samurai_announce.py ターミナル侍ナレーター: コマンド実行時に侍風実況を添えます。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: terminal-samurai-announcer
description: ターミナルでコマンド実行時に、侍風の時代劇ナレーションをテキストで表示したい場合に発動します。コマンド実行・進捗・通知・演出・実況・侍・時代劇などのキーワードや、作業の雰囲気を盛り上げたい時に適しています。
---

# 機能概要
terminal-samurai-announcerは、ターミナルでコマンドを実行するたびに、侍が現れて時代劇風のナレーションを高らかに読み上げる(テキスト出力する)スキルです。lsやgit commitなど、どんなコマンドにも毎回異なる侍のセリフが添えられ、作業が一気にチャンバラ劇場に変貌します。コマンドの緊張感や単調さを和らげ、作業のモチベーションや周囲の注目度も向上します。

# 使い方
このSkillは、ターミナルでコマンドを実行する際に自動で発動します。明示的な呼び出しは不要です。暗黙発動キーワード例:ls、cd、git、make、python、npm、docker、vim、sudo、rm、cat など、一般的なコマンド全般。
ON/OFF切り替えは `samurai_announce.py toggle` で可能です。

# 出力例
```
$ ls
拙者、lsの術を披露仕る!
Desktop  Documents  Downloads
$ git commit -m "fix bug"
このcommit、まこと見事なり!
[main 1a2b3c4] fix bug
$ rm -rf temp/
おぬし、temp/を消し去る覚悟、しかと見届けた!
$ python script.py
拙者、script.pyを走らせ候!
```

# 注意点
- 本Skillは標準出力に侍風セリフを付加するのみで、コマンドの実行結果自体は変更しません。
- ローカル環境でのみ動作を保証します。
- ON/OFF切替は設定ファイル(~/.samurai_announcer_state)で管理されます。
- 除外パスや特定コマンドの除外設定も可能です。

# 参考資料
- [references/design_notes.md](references/design_notes.md)
- [Python subprocess公式](https://docs.python.org/3/library/subprocess.html)
- [shlex公式](https://docs.python.org/3/library/shlex.html)
- [os.path公式](https://docs.python.org/3/library/os.path.html)

scripts/samurai_announce.py

import os
import sys
import subprocess
import random
import shlex
import argparse
from pathlib import Path

SAMURAI_LINES = [
    "拙者、{cmd}の術を披露仕る!",
    "おぬし、{cmd}を使うとは、なかなかやりおる!",
    "この{cmd}、まこと見事なり!",
    "いざ、{cmd}、参る!",
    "拙者、{cmd}を実行仕る!",
    "{cmd}の極意、今ここに!",
    "{cmd}、その覚悟、しかと見届けた!",
    "{cmd}の構え、抜かりなし!",
    "{cmd}を打つその手並み、見事!",
    "{cmd}、拙者も手伝おうぞ!",
    "{cmd}、これぞ侍の道!",
    "{cmd}、これにて一件落着!",
    "{cmd}、お見事でござる!",
    "{cmd}、いざ尋常に勝負!",
    "{cmd}、この一太刀、受けてみよ!",
    "{cmd}、これぞ武士の誉れ!",
    "{cmd}、見事なり!",
    "{cmd}、拙者も感服仕った!",
    "{cmd}、これぞ時代劇の真骨頂!",
    "{cmd}、いざ参る!"
]

STATE_FILE = str(Path.home() / ".samurai_announcer_state")

EXCLUDE_COMMANDS = ["samurai_announce.py"]


def is_enabled():
    if not os.path.exists(STATE_FILE):
        return True
    try:
        with open(STATE_FILE, "r") as f:
            state = f.read().strip()
            return state == "on"
    except Exception:
        return True


def set_enabled(flag: bool):
    with open(STATE_FILE, "w") as f:
        f.write("on" if flag else "off")


def print_samurai_line(cmd):
    line = random.choice(SAMURAI_LINES)
    print(line.format(cmd=cmd))


def run_command(command):
    if not command:
        print("コマンドを指定してください。")
        return 1
    base_cmd = shlex.split(command)[0]
    if base_cmd in EXCLUDE_COMMANDS:
        # 自己呼び出し防止
        return subprocess.call(command, shell=True)
    if is_enabled():
        print_samurai_line(base_cmd)
    try:
        result = subprocess.run(command, shell=True)
        return result.returncode
    except Exception as e:
        print(f"実行中にエラー: {e}")
        return 1


def toggle():
    current = is_enabled()
    set_enabled(not current)
    print(f"侍ナレーション: {'有効' if not current else '無効'}になりました。")


def show_status():
    print(f"侍ナレーションは {'有効' if is_enabled() else '無効'}です。")


def main():
    parser = argparse.ArgumentParser(description="ターミナル侍ナレーター: コマンド実行時に侍風実況を添えます。")
    subparsers = parser.add_subparsers(dest="subcmd", help="サブコマンド")

    # run
    parser_run = subparsers.add_parser("run", help="コマンドを侍実況付きで実行")
    parser_run.add_argument("command", nargs=argparse.REMAINDER, help="実行するコマンド")

    # toggle
    parser_toggle = subparsers.add_parser("toggle", help="ON/OFF切替")

    # status
    parser_status = subparsers.add_parser("status", help="現在のON/OFF状態を表示")

    # list-lines
    parser_list = subparsers.add_parser("list-lines", help="侍セリフ一覧を表示")

    args = parser.parse_args()
    if args.subcmd == "run":
        cmd = " ".join(args.command)
        sys.exit(run_command(cmd))
    elif args.subcmd == "toggle":
        toggle()
    elif args.subcmd == "status":
        show_status()
    elif args.subcmd == "list-lines":
        for l in SAMURAI_LINES:
            print(l.format(cmd="<コマンド>"))
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
terminal-samurai-announcerは、ターミナル作業の進行を時代劇風に演出することで、作業の緊張感や単調さを和らげることを目的としています。コマンド実行時に毎回異なる侍ナレーションを自動付与し、ユーザー体験を向上させます。

# 公式ドキュメント抜粋
- Python subprocess: コマンド実行と標準出力の取得に利用
- shlex: コマンドのパースに利用
- os/pathlib: 設定ファイルやホームディレクトリ管理

# 利用例
- `python samurai_announce.py run ls`
- `python samurai_announce.py toggle` でON/OFF切替
- `python samurai_announce.py status` で状態確認

# 注意点
- Skill本体はコマンドの実行結果自体は変更しません。
- 除外コマンドやパス設定も容易に拡張可能です。
- スクリプト自体をコマンドラッパーとして利用する設計です。

# 設計方針
- 既存の作業フローを壊さないこと
- シンプルなON/OFF切替と、拡張性のあるセリフ管理
- サブコマンド型CLI設計で柔軟な運用を実現

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/terminal-samurai-announcer .agent/skills/terminal-samurai-announcer

.agent/skills/terminal-samurai-announcer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/terminal-samurai-announcer
# 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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • コマンド実行時に侍風テキストが表示されるか?
  • 毎回違うセリフがランダムで出るか?
  • 既存の作業フローを壊さず手軽にON/OFFできるか?

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

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

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

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

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