本文へスキップ
hdknr blog
戻る

Ponytail — AIエージェントを「怠惰なシニア開発者」にするプラグイン

AIエージェントに簡単なタスクを頼んだはずが、500行のコードが返ってきた——そんな経験はないだろうか。Ponytail はそれを解決するためのオープンソースプラグインだ。MITライセンスで公開され、すでに54,000以上のスターを集めている。

Ponytail とは何か

Ponytail は、AIエージェントに「ラダー(梯子)」と呼ばれる意思決定フローを組み込み、コードを書く前に本当に必要かどうかを確認させるプラグインだ。

名前の由来は、どのチームにもいる「あのシニア開発者」のイメージ——長いポニーテール、楕円形の眼鏡、バージョン管理システムよりも長くその会社にいる人物。50行のコードを見せると、一言も言わずに1行に置き換えてくれる。

Ponytail はそのシニアをAIエージェントの中に宿らせる。

7段のラダー

コードを書く前に、エージェントはこの順序で判断する:

1. これは本当に必要か?           → 不要なら: スキップ (YAGNI)
2. このコードベースに既にある?    → あれば再利用、書き直しは不要
3. 標準ライブラリで対応できる?    → できるなら使う
4. プラットフォームのネイティブ機能? → あれば使う
5. インストール済みの依存ライブラリ? → あれば使う
6. 1行で書ける?                  → 1行で書く
7. 上記すべてが該当しない時のみ: 最小限のコードを書く

このラダーは「問題を理解する」より前には走らない。まずコードを読んで実際のフローを把握し、その上で梯子を登る。エージェントは解決策の選択には怠惰だが、理解することには手を抜かない。

典型例:日付ピッカー

通常のエージェントに日付ピッカーを依頼すると、flatpickr をインストールし、ラッパーコンポーネントを書き、スタイルシートを追加し、タイムゾーンについて議論を始める。

Ponytail を使うと:

<!-- ponytail: ブラウザにネイティブ機能がある -->
<input type="date">

ベンチマーク結果

実際の Claude Code セッションで計測した結果(モデル: Haiku 4.5 / 対象: FastAPI + React の OSS リポジトリ / 12タスク、n=4):

比較対象コード行数トークン数コスト時間安全性
ponytail-54%-22%-20%-27%100%
caveman(制御群)-20%+7%+3%+2%100%
“YAGNI + 1行” プロンプト-33%-14%-21%-30%95%

※安全性:検証・エラーハンドリング・セキュリティ・アクセシビリティが維持されたタスクの割合。

Ponytail だけがすべての指標を削減し、かつ安全性を100%に保った唯一のアプローチだ。「1行で書け」という単純なプロンプトは安全性が95%に下がるが、Ponytail はこれらの品質要素を決してカットしない。

コマンド

コマンド説明
/ponytail [lite | full | ultra | off]強度の設定または現在のレベルを確認
/ponytail-review現在の diff を過剰エンジニアリングの観点でレビュー
/ponytail-auditリポジトリ全体を監査
/ponytail-debt後回しにした ponytail: ショートカットを一覧化
/ponytail-gainベンチマークによる効果スコアボードを表示
/ponytail-helpコマンドのクイックリファレンス

インストール方法

Claude Code

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

2つのプロンプトを別々に送る必要がある(同時送信は不可)。デスクトップアプリの場合は UI から「Customize」→「+ by personal plugins」→「Create plugin and add marketplace」→「Add from repository」でリポジトリURLを入力する。

Cursor / Windsurf / Cline / GitHub Copilot(エディタ)

リポジトリから対応するルールファイルをコピーする:

Codex

codex plugin marketplace add DietrichGebert/ponytail
codex

その後 /plugins でインストール、/hooks でライフサイクルフックを承認する。

Gemini CLI

gemini extensions install https://github.com/DietrichGebert/ponytail

OpenCode

opencode.json に追記する:

{ "plugin": ["@dietrichgebert/ponytail"] }

なぜ有効なのか

「最短のトークン数」が目標ではない。タスクに必要なものだけを書くが目標だ。結果としてコードが小さくなるのは、必要なものだけだから。パフォーマンスが向上するのは、書かないコードに関連するバグや CVE がゼロだからだ。

“The best code is the code you never wrote.”

このラダーは高度な推論モデル(GPT-5.5 など)では逆効果になる場合もあると README は正直に述べている。ラダーの各段を深く考えるためにトークンを費やすモデルでは、コストが増えることがある。使うモデルに合わせて検証してみるのが良い。

どんな場面で効くのか(適用条件)

Ponytail は万能ではない。効果が最大化する条件と、逆に薄まる条件がある。導入を検討するなら、まず自分のプロジェクトがどちらに近いかを見極めたい。

greenfield(グリーンフィールド)で最も効く

**greenfield(グリーンフィールド)とは、既存のコードや制約に縛られず、更地から作る新規開発を指す言葉だ。**逆に、すでに動いていて改修を重ねてきたコードベースは brownfield(ブラウンフィールド) と呼ばれる。工事現場で、更地(緑の草地)に新築するか、既存の建物(茶色く汚れた土地)を改修するか、という比喩から来ている。

Ponytail の7段ラダーが最も価値を発揮するのは greenfield だ。なぜなら、ラダーの各段——「本当に必要か」「新しい依存を入れるか」「ラッパーを書くか」——は、これから何を作るかを決める新規実装の判断そのものだからだ。日付ピッカーの例のように、「ゼロから作ろうとして過剰実装に走る」場面を抑えるのが本領といえる。

一方、既存の成熟したコードベースでは効果が薄まる。実運用中のシステムの作業はバグ修正・データ移行・整合性修正・調査が中心になりがちで、「新しい依存を入れるか / ラッパーを書くか」という新規判断そのものが少ない。加えて、「既存パターンや既存資産を再利用せよ」といった規範は、成熟したプロジェクトなら AGENTS.md などのエージェント規約にすでに書き込まれていることが多く、Ponytail のラダーと役割が重なる。

「コード量」がボトルネックのときに効く

Ponytail が最適化するのは「書く量を減らす」ことだ。したがって、プロジェクトの主要リスクがコードの過剰さにあるなら効く。

逆に、主要リスクが正しさ——間違った項目名、間違った ID、データ不整合——にある場合、「少なく書く」最適化はそのリスクと直交してしまう。特に金融系や仕訳のようなコードでは、「1行で書く」バイアスが効きすぎると、周囲のコードに合わせた可読性を損ないかねない点にも注意したい。

弱いモデルに規律を与えるときに効く

ベンチマークが Haiku 4.5 で計測されているのは偶然ではない。ラダーによる規律は、推論力がそこまで高くないモデルに「考える順序」を外から与えるときに最も効く。前述のとおり、高度な推論モデルではラダー自体がトークンを消費して逆効果になりうる。

全部入れずに「思想の核」だけ蒸留する選択肢

導入するかどうかは 0/100 ではない。ラダー全体を常時オンのルール層として入れるのが context 予算と競合するなら、核だけを1行に蒸留して既存のエージェント規約に追記するという中間解もある。たとえば「YAGNI → 既存資産の再利用 → 標準/組込み機能 → 最小実装」を1項目にまとめ、プロジェクト固有の条件(例:「金融・仕訳コードでは短さより可読性を優先する」)を添える、といった形だ。

まとめると、greenfield × 弱いモデル × コード量がリスクの交差点で Ponytail は最も輝き、成熟コードベース × 高度推論モデル × 正しさがリスクの側に寄るほど効果は薄まる。

まとめ

Ponytail は単なる「コードを短くするプロンプト」ではなく、エージェントの意思決定プロセスそのものを構造化するプラグインだ。AIエージェントが過剰なコードを返してきて困っている開発者には、試してみる価値がある。インストールも1コマンドで済む。



前の記事
AIが自律的にセキュリティタスクをこなす「reverse-skill」——逆向エンジニアリングスキルルーターの仕組み
次の記事
OpenAI Codex で30分ごとにSlack/Gmailを自動巡回して返信下書きを生成するループを設定する