Antigravityでエラーを和風俳句に変える楽しみ方ガイド

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

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

AI coding workflow を Antigravity で回していると、真面目な作業の合間にちょっとした息抜きや、思わぬストレスが溜まる瞬間が少なくありません。特にターミナルでコマンドを実行中、エラーが出た時の「無機質な絶望感」は、誰もが一度は経験しているはずです。context や repository understanding の精度を上げるために真剣にやっていても、エラーメッセージだけはどうにも心が折れる。そんな「あるある」を感じている方も多いのではないでしょうか。

  • Antigravity で AI が context を見失い、意図しない directory でコマンドを叩いてエラーが発生する
  • monorepo の packages を跨いだ際、repo 構造をうまく把握できず、path 管理ミスで Permission denied などのエラーが頻発
  • 長い session の中で、memory や long context が膨張し、重要な情報が埋もれるだけでなく、ちょっとしたコマンドミスで冷たいエラーが返ってきて気が滅入る
  • onboarding 時や session 再開時に、directory や path の説明を繰り返すうちに、エラーで出鼻をくじかれる
  • 「またか…」と感じる同じエラーに、ただただ萎えるだけで、何も面白みがない

こうした「エラーが出るたびに気分が沈む」という悩みは、Antigravity のような高度な AI coding agent を使っていても、避けて通れない日常の一コマです。どうせなら、エラーさえも楽しめる仕掛けが欲しい――そんな気持ちに応える Skill です。

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

一言サマリ: ターミナルでコマンド実行時にエラーが発生したらSkill。

このSkillを導入すると、ターミナルでエラーが発生した瞬間、冷たいエラーメッセージが和風の俳句として表示されます。これにより、AI coding workflow の中で発生するエラー体験が一変します。

  • エラー発生時に、ただのエラーメッセージではなく「和風エラー俳句」が出力されることで、作業のストレスが和らぎ、気持ちの切り替えがしやすくなる
  • Antigravity の context や repository understanding が不十分で起きるエラーも、文学的な味わいで笑いに変わる
  • monorepo や複雑な directory での path 管理ミスも、エラー内容ごとに変化する俳句で「次はどうなる?」と楽しめる
  • onboarding や session 再開時の失敗も、記憶に残るユーモアでチーム全体の雰囲気が明るくなる
  • AI coding workflow の長時間利用でも、エラーが単なる障害ではなく、ちょっとしたイベントになる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/os-error-bigaku-haiku .agent/skills/os-error-bigaku-haiku

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

実際に Skill を導入した場合、どのような出力が得られるのか。以下、現場でありがちな3つのシーンを擬似 terminal 出力で紹介します。

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


# 新規プロジェクトで依存インストール
> npm install

Error: Permission denied, access to '/usr/local/lib/node_modules' is not permitted

和風エラー俳句:
Permission denied
心閉ざして
春霞

(元のエラー: Permission denied, access to '/usr/local/lib/node_modules' is not permitted)

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


> cd packages/core && python3 scripts/build.py

Traceback (most recent call last):
  File "scripts/build.py", line 42, in 
    open('dist/output.txt', 'w')
FileNotFoundError: [Errno 2] No such file or directory: 'dist/output.txt'

和風エラー俳句:
ファイルなし
道に迷いて
秋の風

(元のエラー: No such file or directory: 'dist/output.txt')

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


> rm -rf /

rm: cannot remove '/': Is a directory

和風エラー俳句:
消せぬもの
根の深さ知る
冬の土

(元のエラー: cannot remove '/': Is a directory)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し エラーが出ても和風俳句でリラックス、再説明のストレスが和らぐ
monorepo 移動 違う package のコードを参照しがち package 跨ぎエラーも俳句で笑いに変わる
長時間 workflow long context で重要箇所が薄まる エラーがイベント化、workflowにメリハリが生まれる

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/os-error-bigaku-haiku/
├── SKILL.md
├── scripts/
│   └── os_error_bigaku_haiku.py
└── references/
    └── reference.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/os_error_bigaku_haiku.py エラーメッセージから主要なエラータイプを抽出
references/reference.md 概要 をまとめた参考資料

SKILL.md

---
name: os-error-bigaku-haiku
description: ターミナルやシェルでコマンド実行時にOSエラー(例: Permission denied, FileNotFoundError, Segmentation fault等)が発生した場合、そのエラーメッセージを和風俳句に変換・表示する際に発動。エラー検出・エラー内容の俳句化がキーワード。
---

# 機能概要
このSkillは、ターミナルやシェル上でコマンド実行時に発生する各種OSエラー(例:Permission denied、FileNotFoundError、Segmentation faultなど)を検知し、その内容を和風の“エラー俳句”として表示します。無機質なエラーメッセージを文学的な俳句に変換することで、失敗時のストレスや落胆を和らげ、思わず笑ってしまう体験に変えます。日々の開発や運用の中で、エラーを前向きに受け止めるためのユーモアあふれるスキルです。

# 使い方
このSkillは明示的な呼び出しは不要で、コマンド実行時に自動的に発動します。例えば、`ls /root`や`cat nofile.txt`など、エラーが発生する操作を行った際に、俳句化されたエラーメッセージがターミナルに表示されます。暗黙発動キーワード例:"Permission denied", "No such file or directory", "Segmentation fault" など。

# 出力例
```
[元エラー] Permission denied: '/root/secret.txt'
[俳句]   Permission denied
          心閉ざして
          春霞

[元エラー] FileNotFoundError: 'nofile.txt' not found
[俳句]   ファイルなし
          探し求めて
          夕暮れ時

[元エラー] Segmentation fault (core dumped)
[俳句]   セグメンテーション
          記憶の彼方
          絶望感
```

# 注意点
- すべてのOSエラーが俳句化されるわけではなく、主要なエラーのみ対応しています。
- 俳句はエラー内容ごとに変化しますが、完全な意味合いの一致を保証するものではありません。
- 俳句生成のためにローカルにエラーログや履歴を保存することはありません。
- 本Skillはジョーク・パロディ用途です。実運用環境での利用は推奨しません。

# 参考資料
詳細はreferences/以下やPython公式の例外ハンドリングドキュメント(https://docs.python.org/3/library/exceptions.html)を参照してください。

scripts/os_error_bigaku_haiku.py

import sys
import subprocess
import argparse
import traceback
import os
from typing import Optional, Tuple

HAIKU_TEMPLATES = {
    'Permission denied': [
        'Permission denied',
        '心閉ざして',
        '春霞'
    ],
    'No such file or directory': [
        'ファイルなし',
        '探し求めて',
        '夕暮れ時'
    ],
    'File exists': [
        'ファイル在り',
        '重ねた想い',
        '夏の雲'
    ],
    'Is a directory': [
        'ディレクトリ',
        '開けてみれば',
        '空の箱'
    ],
    'Not a directory': [
        '道迷い',
        'ディレクトリじゃ',
        'なかったよ'
    ],
    'Segmentation fault': [
        'セグメンテーション',
        '記憶の彼方',
        '絶望感'
    ],
    'Connection refused': [
        '拒まれて',
        '扉は固く',
        '冬の朝'
    ],
    'Broken pipe': [
        '壊れた管',
        '流れ止まりて',
        '静寂なり'
    ],
    'Timeout': [
        '時は過ぎ',
        '待ちぼうけして',
        '秋の暮れ'
    ],
    'Read-only file system': [
        '読み取りのみ',
        '書き込めぬまま',
        '雪の夜'
    ],
    'default': [
        'エラーかな',
        '思い悩んで',
        '深呼吸'
    ]
}

def extract_error_type(stderr: str) -> Tuple[str, str]:
    """
    エラーメッセージから主要なエラータイプを抽出
    """
    for key in HAIKU_TEMPLATES.keys():
        if key in stderr:
            return key, stderr.strip()
    # Python例外の場合
    if 'PermissionError' in stderr:
        return 'Permission denied', stderr.strip()
    if 'FileNotFoundError' in stderr:
        return 'No such file or directory', stderr.strip()
    if 'IsADirectoryError' in stderr:
        return 'Is a directory', stderr.strip()
    if 'NotADirectoryError' in stderr:
        return 'Not a directory', stderr.strip()
    if 'BrokenPipeError' in stderr:
        return 'Broken pipe', stderr.strip()
    if 'TimeoutError' in stderr:
        return 'Timeout', stderr.strip()
    return 'default', stderr.strip()

def format_haiku(error_type: str) -> str:
    haiku = HAIKU_TEMPLATES.get(error_type, HAIKU_TEMPLATES['default'])
    return '  ' + '\n          '.join(haiku)

def run_command(cmd_args: list) -> int:
    try:
        completed = subprocess.run(cmd_args, capture_output=True, text=True, check=True)
        if completed.stdout:
            print(completed.stdout, end='')
        return 0
    except subprocess.CalledProcessError as e:
        stderr = e.stderr if e.stderr else str(e)
        error_type, raw_msg = extract_error_type(stderr)
        print(f"[元エラー] {raw_msg}")
        print(f"[俳句]{os.linesep}{format_haiku(error_type)}")
        return e.returncode if hasattr(e, 'returncode') else 1
    except Exception as ex:
        tb = traceback.format_exc()
        error_type, _ = extract_error_type(str(ex))
        print(f"[元エラー] {str(ex)}")
        print(f"[俳句]{os.linesep}{format_haiku(error_type)}")
        return 1

def list_haiku_templates():
    print("# 登録済みエラー俳句テンプレート一覧:")
    for key, haiku in HAIKU_TEMPLATES.items():
        print(f"\n{key}")
        print('  ' + '\n  '.join(haiku))

def summary():
    print("このスクリプトは、コマンド実行時のエラーを和風俳句に変換して表示します。主要なOSエラーに対応しています。")
    print("詳細は --help をご覧ください。")

def main():
    parser = argparse.ArgumentParser(
        description='コマンド実行時のOSエラーを和風俳句に変換して表示するツール')
    subparsers = parser.add_subparsers(dest='subcmd', required=False)

    parser_run = subparsers.add_parser('run', help='コマンドを実行し、エラーがあれば俳句化')
    parser_run.add_argument('cmd', nargs=argparse.REMAINDER, help='実行するコマンド')

    parser_list = subparsers.add_parser('list', help='エラー俳句テンプレート一覧を表示')
    parser_summary = subparsers.add_parser('summary', help='Skill概要を表示')

    # デフォルトは run
    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit(0)
    args = parser.parse_args()

    if args.subcmd == 'run':
        if not args.cmd:
            print('コマンドを指定してください。')
            sys.exit(1)
        sys.exit(run_command(args.cmd))
    elif args.subcmd == 'list':
        list_haiku_templates()
    elif args.subcmd == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/reference.md

# 概要
このSkillは、OSエラーやPython例外の無機質なメッセージを和風俳句に変換し、ユーザー体験をユーモラスにするために設計されています。主要なエラーごとに独自の俳句テンプレートを用意し、エラー発生時に即座に俳句として表示します。

# 公式ドキュメント抜粋
- Python例外: https://docs.python.org/3/library/exceptions.html
- subprocessモジュール: https://docs.python.org/3/library/subprocess.html

# 利用例
```bash
$ python os_error_bigaku_haiku.py run ls /root
[元エラー] ls: cannot open directory '/root': Permission denied
[俳句]
  Permission denied
          心閉ざして
          春霞
```

# 注意点
- すべてのエラーに完全対応しているわけではありません。
- 俳句はユーモア目的であり、実際のトラブルシュートには原文も参照してください。
- ログや履歴は保存しません。

# 設計方針
- 主要なエラータイプを独自に抽出し、テンプレートに基づき俳句を生成。
- subprocessで外部コマンドを安全に実行し、エラー時のみ俳句化。
- CLIサブコマンドで拡張性を確保。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/os-error-bigaku-haiku .agent/skills/os-error-bigaku-haiku

.agent/skills/os-error-bigaku-haiku の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/os-error-bigaku-haiku
# 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をコピーしました!
目次