結論
mattpocock/skillsのtddスキルは、赤緑ループに入る前に「どこをテストするか」を開発者に確認させます。テストを書く場所(シーム)の合意が先、実装は後。2026年10月20日時点で約111万インストールあり、カタログ内のTDD系スキルでは最多です。
Claude Codeにテストを書かせると、だいたい3つのことが同時に起きます。スイート全体を先にまとめて書く。内部の協力オブジェクトをモックする。そして、コードと同じ手順で期待値を計算した「必ず通るアサーション」を置く。mattpocock/skillsのtddスキルは、この3つを名前付きのアンチパターンとして定義して止めにいきます。
比較の全体像はClaude CodeのTDDスキル解説ガイドにまとめてあります。先に立場を書いておくと、私たちはSkillselionという、Claude Code・Codex・CursorなどのコーディングエージェントむけのスキルやMCPサーバーを集めた独立したディレクトリを運営しています。Anthropic、OpenAI、Cursor、および本文で名前を挙げた公開者とは関係がありません。インストール数は、skills.sh・GitHub・MCPレジストリから毎日更新している稼働中のカタログの値で、2026年10月20日に読んだものです。
この記事の引用は、カタログの保存コピーではなくGitHubの原本(コミット5beb3時点)から取っています。カタログ側のコピーは上流に追随が遅れることがあるためで、実際に1か所ずれていました。後述します。
tddスキルが最初に要求するのは、テストではなく合意です
このスキルで一番変わっているのは、赤緑ループの中身ではありません。ループに入る前に止まるところです。
Test only at pre-agreed seams. Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam.
Source: mattpocock/skills, skills/engineering/tdd/SKILL.md, "Seams: where tests go"
「シーム(seam)」は、内部に手を入れずに振る舞いを観測できる公開の境界、とこのファイルの中で定義されています。テストはシームに置き、内部実装には当てない。そしてシームの一覧は、エージェントが勝手に決めるのではなく、開発者が書き出して確認するものだ、という手順になっています。
理由は美学ではなく予算です。ファイルはそのまま「You can't test everything」と書いていて、全部はテストできない以上、どこを守るかを先に決めるのが、クリティカルパスと複雑なロジックに労力を寄せる唯一の方法だ、という立て付けです。
実務で効くのはその次の1行のほうだと思います。
Ask: "What's the public interface, and which seams should we test?" Give each proposed seam a one-line note on what it catches and what it misses.
Source: mattpocock/skills, skills/engineering/tdd/SKILL.md, "Seams: where tests go"
提案したシームごとに「何を捕まえられて、何を捕まえ損ねるか」を1行ずつ書かせる、という指示です。レビューで一番聞きたいのがまさにここなので、エージェントに先に言わせる形にしてあるのは筋がいいと感じました。
3つのアンチパターンは、助言ではなく判定条件です
tddスキル(約111万インストール、2026年10月20日時点)が挙げるのは次の3つです。それぞれに「見分け方(tell)」が付いているので、レビュー時にチェック可能な条件として使えます。
| アンチパターン | 内容 | 見分け方 |
|---|---|---|
| Implementation-coupled | 内部の協力オブジェクトをモックする、privateメソッドを触る、インターフェースではなくDBを直接見て検証する | 振る舞いが変わっていないのに、リファクタでテストが壊れる |
| Tautological | 期待値をコードと同じ手順で計算してしまう | 構造上かならず通り、コードと食い違うことが原理的にない |
| Horizontal slicing | テストを全部書いてから実装を全部書く | 想像した振る舞いを検証していて、実変更に鈍感になる |
Tautologicalの例としてファイルが挙げているのはexpect(add(a, b)).toBe(a + b)です。期待値は独立した出どころ、つまり既知の正解リテラル、手で解いた具体例、仕様のいずれかから持ってくること、と書かれています。手計算のスナップショットも同じ扱いで落とされます。
Horizontal slicingの代わりに指定されているのがvertical slicingで、1テスト、1実装、そのくり返しです。各テストは「tracer bullet(曳光弾)」と呼ばれていて、前のサイクルで分かったことに反応して次を決める、という位置づけになっています。
ループの規則は3つだけで、リファクタリングは入っていません
- Red before green: 失敗するテストを先に書き、それを通すぶんだけ実装する。先回りして機能を足さない。
- One slice at a time: 1サイクルにつき、1シーム、1テスト、最小の実装1つ。
- Refactoring is not part of the loop: リファクタリングはループの一部ではなく、レビュー段階の担当。
3つ目が実運用でいちばん効きます。「ついでに整理しておいて」をループの中に入れないので、赤緑のサイクルが短いまま保たれます。整理のほうはmattpocock/skillsのcode-reviewスキル(約77万インストール)に回す設計で、こちらの周辺はコードレビュー系スキルの比較ガイドにまとめてあります。
そもそもシームをどこに置くべきかが決まっていない場合は、codebase-designスキル(約83万インストール)に用語を参照しにいく、とtdd側に明記されています。参照先であって、走らせるセッションではない、という但し書き付きです。なお、SKILL.mdには出てきませんが、先に失敗するテストの場所を特定したい場合は、同じリポジトリのdiagnosing-bugsスキル(約81万インストール)が使えます。4つの関係はMatt Pocockのスキル全体マップで俯瞰できます。リポジトリはmattpocock/skillsです。
カタログのコピーとGitHub原本が1か所ずれています
これは今回の確認で見つかった点です。
私たちの解説ガイドには現在「プロジェクトにCONTEXT.mdがあれば読む」と書いてあります。2026年10月20日にGitHubから取った原本では、該当の記述はこうなっています。
When exploring the codebase, read
GLOSSARY.md(if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.
Source: mattpocock/skills, skills/engineering/tdd/SKILL.md, 冒頭セクション
正しいファイル名はGLOSSARY.mdです。ガイド側はこれから修正します。スキルの引用をそのまま設定に落とす場合は、二次情報ではなく配布元のSKILL.mdを一度開く、という手順を挟んでおくと安全です。ファイル名が1文字違うだけで、「読んでいるはずのファイル」が永久に読まれません。
同じガイドにはSKILL.md本体が「3,546文字」とも書いてありますが、2026年10月20日に取得した原本は3,629バイト(3,621文字)です。こちらもあわせて修正します。本体が短いのは手抜きではなく、残りを同じディレクトリのtests.mdとmocking.mdに分け、本体からは参照するだけにして、毎サイクル読み返させるための設計だと読めます。
ほかのTDDスキルとどう違うか
| スキル | インストール数(2026年10月20日) | 特徴 |
|---|---|---|
| mattpocock/skills tdd | 1,115,950 | シーム合意とアンチパターン3種。本体が短い |
| obra/superpowers test-driven-development | 254,990 | 大きなマーケットプレイスの一部として同梱 |
| addyosmani/agent-skills test-driven-development | 57,159 | 軽量な第3の選択肢 |
| affaan-m/ecc springboot-tdd | 10,950 | Spring Boot専用のループ |
| affaan-m/ecc django-tdd | 10,925 | Django専用のループ |
配布元リポジトリはそれぞれobra/superpowers、addyosmani/agent-skills、affaan-m/ECCです。フレームワーク固有の型やフィクスチャの作法まで指示してほしい場合は後者の系統、ループの規律だけ入れたい場合はmattpocock版、という分け方になります。テストランナーやカバレッジまわりを含めた広い比較はClaude Code向けテストスキルの比較ガイドにまとめました。
導入
npx skills add mattpocock/skills --skill tdd
最初のセッションでエージェントが「どのシームをテストしますか」と聞いてきたら、想定どおりの動作です。ここで「全部」と答えると、このスキルを入れた意味がほぼ消えます。
よくある質問
Q. シーム(seam)とは何ですか。
内部に手を入れずに振る舞いを観測できる公開の境界のことです。tddスキルはシームにだけテストを置き、内部実装には当てません。シームの一覧はテストを書く前に書き出して確認する、という手順が必須になっています。
Q. リファクタリングもこのスキルでやれますか。
いいえ。SKILL.mdがループの外だと明記していて、レビュー段階に回す設計です。リファクタだけを頼むと、担当外のスキルに当たります。
Q. tests.mdとmocking.mdは読まなくてよいですか。
本体が短いぶん、実体の多くがこの2ファイル側にあります。本体はこの2つを参照するだけで内容を繰り返していないので、省くと中身のおよそ半分が欠けます(本体3,629バイトに対し、2ファイル合計で3,695バイト)。
Q. 最初に入れるべきTDDスキルはどれですか。
インストール数ではmattpocock/skillsのtddが約111万で最多です(2026年10月20日時点)。特定フレームワークの作法まで固定したい場合だけ、affaan-m系の専用版を足す順番をおすすめします。
最終更新: 2026年10月20日。本文の引用はGitHub上の原本(コミット5beb3)と突き合わせ済みです。