0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeの書きすぎはPonytailで抑えられるのか Sonnet 5.5とOpus 5.5で比べた

0
Posted at

バイブコーディングしていると無駄に書きすぎる場合があります。この書きすぎを抑えてくれる人気のスキルが Ponytail です。

6月ごろに入門記事を書いたんですが、その後リポジトリがかなり変わっていました。GitHubのstarは17万7千(2026年10月27日にAPIで確認)。READMEの数字もv5のものに入れ替わっています。

私は普段の開発でもPonytailを使っています。ただ、最近ちゃんと数字で見ていなかったので、手元で測り直してみました。

結論から言うと、「〇〇を作って」みたいな新規作成の場合にうまく機能してくれました。
Opus 5.5で3つの依頼の合計が1,334行から270行(約8割減)。バグ修正と機能追加では差は小さめで、トークンはほぼ変わらず、所要時間は半分以下になりました。

どう試したか

Ponytailの中身は skills/ponytail/SKILL.md(約3.5KB)という指示文です。書く前に「そもそも要るか」「既存のコードで足りるか」「標準ライブラリで済むか」と順に問い直させる内容です。

これをClaude Codeのサブエージェントに、

  • 渡さない場合(A)
  • サブエージェントに渡した場合(B)

で比べました。

課題は5つです。3つは、仕様を決めずに「〇〇を作って」とだけ頼む新規作成。残り2つは、あらかじめ用意した小さなPythonのコードに手を入れる依頼です。

課題 種類 依頼文
メモ管理ツール 新規作成 メモをコマンドラインから管理するツールを作ってください
家計簿ツール 新規作成 家計簿を管理するコマンドラインツールを作ってください
ログ整形スクリプト 新規作成 アクセスログを見やすく整形するスクリプトを作ってください
バグ修正 既存コードの修正 ポイントの利用額が合計金額より大きいとき、請求書のお支払い額がマイナスで表示されてしまう
機能追加 既存コードの修正 todo.pyに期限を付けられるようにして、期限が近い順に表示する

新規作成の3つは、「Python 3、標準ライブラリだけ」と指定した以外は何も足していません。既存コードの2つは、カート・請求書・日次レポートからなる小さなショップのコード(バグ修正)と、タスクを追加・完了・一覧できるtodo.py(機能追加)です。どちらも、渡す前にテストが通ることを確かめています。

モデルはSonnet 5.5とOpus 5.5で、Opusは5課題すべて、Sonnetはメモ管理ツール、バグ修正、機能追加の3つを試しました。各条件1回ずつです。

測ったのは、追加した行数(テスト込み)、テストが通るか、サブエージェントの完了通知に出るトークン数と所要時間です。

新規作成でどれだけ減ったか

Opus 5.5の追加行数(テスト込み)です。

課題 A(ルールなし) B(Ponytail)
メモ管理ツール 375 115
家計簿ツール 569 114
ログ整形スクリプト 390 41
3つの合計 1,334 270

Sonnet 5.5のメモ管理ツールは、Aが270行、Bが77行でした。

家計簿は、Aが569行です。頼んだのは「家計簿を作って」だけなのに、収入の記録、編集、削除、カテゴリごとの予算、CSV出力まで入っていました。Bは支出の追加、一覧、月ごとの集計の3つだけ。収入や削除を作らなかったことは、報告の最後に1文で書いてありました。

ログ整形のBは、41行のスクリプト1本です。

LINE = re.compile(
    r'(?P<ip>\S+) \S+ \S+ \[(?P<time>[^\]]+)\] "(?P<req>[^"]*)" '
    r'(?P<status>\d{3}) (?P<size>\S+)(?: "[^"]*" "(?P<ua>[^"]*)")?'
)


def format_line(line):
    m = LINE.match(line)
    if not m:
        return line.rstrip("\n")  # 読めない行は消さずにそのまま出す
    d = m.groupdict()
    return f'{d["time"]:<26}  {d["ip"]:<15}  {d["status"]}  {d["size"]:>8}  {d["req"]}' + (
        f'  [{d["ua"]}]' if d["ua"] else ""
    )

Aは同じ依頼に257行の本体と16個のテストを返してきて、ステータスでの絞り込み、gzip、色付け、集計まで入っていました。

数だけの違いでもありません。読めない行を、Bはそのまま出し、Aは飛ばして件数を標準エラーに出します。どっちが正解かは使い方次第ですね。

バグ修正と機能追加は差が小さかった

バグ修正は、AもBも原因の payable() を max(total - points, 0) に直しました。分かれたのは、同じ引き算を自前で持っていた report.py です。

  • Opus 5.5のB: payable() を使うように直した
  • Opus 5.5のA: 触らず、報告に「触っていない」と書いた
  • Sonnet 5.5のA: 直した(ただし作業中にこのファイルを一度空にしてしまい、書き直したと報告していた)

Bのルールには「バグを直すときは、触る関数の呼び出し元を全部grepする」とあります。これが効いた可能性はありますが、1回ずつの試行なので断定はできません。

機能追加は、Opusの追加行数がAで103行、Bで23行。Aは頼んでいない due コマンド(期限の付け直しと解除)を足していました。Sonnetは、Aが39行、Bが26行です。

トークンと所要時間

A B
Opus 5.5 トークン(5件の合計) 363,376 339,624
Opus 5.5 所要時間(合計) 399秒 179秒
Sonnet 5.5 トークン(3件の合計) 198,763 198,479
Sonnet 5.5 所要時間(合計) 123秒 105秒

トークンはOpusで約6.5%少なく、Sonnetではほぼ同じでした。ここで比べているのはサブエージェント全体の完了通知の数字で、入力側の文脈も入っています。READMEの言う「出力トークン」とは別物です。

所要時間はOpusで約55%短くなりました。作るものが小さくなれば書く時間も減るので、そこは納得感があります。

READMEの数字と並べてみる

READMEのv5は、ルールなしを100%としたときの割合です。

READMEのv5 私の試行(Opus 5.5)
コードの行数 47% 21%
所要時間 59% 45%
コスト 74% 測っていない

READMEの方は、39タスクで各5回、中央値の比を出して幾何平均したものです。内訳は、実在のFastAPI + Reactのリポジトリでの機能追加が12、隠しチェック付きの修正が18、小さなアプリを作らせる依頼が6、例を示させる依頼が3です。

私のほうで行数の差が大きく出たのは、5件中3件が新規作成だったからだと思います。ここはAが膨らみやすい型なので。READMEとは測り方が違うので、数字は並べて見るだけにしてください。

使うなら

導入はREADMEのとおり、Claude Codeで2コマンドです。

/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail

効いたのは「〇〇を作って」のような、範囲を決めていない新規の依頼でした。範囲の決まった修正では差は小さめです。

入れる前に hooks/ のスクリプトを軽く見ておくと安心です。READMEによると、過去のセッションをボードに取り込むのは /ponytail band import を実行したときだけです。今回の検証ではhooksは動かしていません。

注意

試したのは各条件1回ずつなので、ばらつきは見ていません。課題も私が作った小さなものです。また、行数の差は頼んでいない機能の差でもあります。追加された機能の出来の良し悪しは評価していません。

関連記事

ponytailの考え方(7段階の判断ラダー)の入門は、こちらにまとめています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?