with one click
tdd
機能追加・バグ修正の前に使用。テストファーストで実装する規律スキル。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
機能追加・バグ修正の前に使用。テストファーストで実装する規律スキル。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | tdd |
| description | 機能追加・バグ修正の前に使用。テストファーストで実装する規律スキル。 |
| version | 1.0.1 |
| tags | ["discipline","testing","tdd","red-green-refactor"] |
テストを先に書け。失敗を見ろ。最小限のコードで通せ。
Core principle: 失敗を見ていないテストは、正しいものをテストしているか分からない。
ルールの文言を破ることは、ルールの精神を破ることだ。
常に:
例外(ユーザーに確認):
「今回だけTDDスキップ」と思った? それは合理化だ。
テストが先に失敗しない限り、プロダクションコードを書くな
テストより先にコードを書いた? 削除しろ。最初からやり直せ。
例外なし:
テストからフレッシュに実装しろ。以上。
digraph tdd_cycle {
rankdir=LR;
red [label="RED\nテストを書く\n(失敗する)", shape=box, style=filled, fillcolor="#ffcccc"];
green [label="GREEN\n最小限のコード", shape=box, style=filled, fillcolor="#ccffcc"];
refactor [label="REFACTOR\nきれいにする", shape=box, style=filled, fillcolor="#ccccff"];
red -> green [label="失敗を確認"];
green -> refactor [label="通過を確認"];
refactor -> red [label="次のテスト"];
}
1つの振る舞いを表す最小限のテストを書く。
// 良い例: 明確な名前、実際の振る舞いをテスト
test("3回リトライして成功する", async () => {
let attempts = 0;
const operation = () => {
attempts++;
if (attempts < 3) throw new Error("fail");
return "success";
};
const result = await retryOperation(operation);
expect(result).toBe("success");
expect(attempts).toBe(3);
});
要件: 1つの振る舞い、明確な名前、本物のコード(モックは最終手段)
必須。絶対にスキップするな。
bun test path/to/test.test.ts
確認:
テストが通る? → 既存の振る舞いをテストしている。テストを修正。
テストを通す最もシンプルなコードを書く。
// 良い例: テストを通すのに十分なだけ
async function retryOperation<T>(fn: () => Promise<T>): Promise<T> {
for (let i = 0; i < 3; i++) {
try {
return await fn();
} catch (e) {
if (i === 2) throw e;
}
}
throw new Error("unreachable");
}
テスト以上の機能追加、他コードのリファクタ、「改善」は禁止。
bun test path/to/test.test.ts
確認: テスト通過、他テストも通過、出力がクリーン。
GREENの後のみ: 重複除去、命名改善、ヘルパー抽出。テストは常にGREEN。振る舞い追加禁止。
| 言い訳 | 現実 |
|---|---|
| 「シンプルすぎてテスト不要」 | シンプルなコードも壊れる。テストは30秒。 |
| 「後でテスト書く」 | 後から書いたテストは即座に通る。それは何も証明しない。 |
| 「手動テスト済み」 | アドホック ≠ 体系的。記録なし、再実行不可。 |
| 「参考として残す」 | 見ながら書いたらテスト後書きと同じ。削除は削除。 |
| 「TDDは教条的」 | TDDは実用的。デバッグより速い。 |
| 「X時間の作業を捨てるのは無駄」 | サンクコストの誤謬。信頼できないコードこそ無駄。 |
すべて = コードを削除。TDDでやり直し。
バグ: 空メールが受け入れられる
RED:
test("空メールを拒否する", async () => {
const result = await submitForm({ email: "" });
expect(result.error).toBe("メールアドレスは必須です");
});
RED確認: FAIL: expected 'メールアドレスは必須です', got undefined
GREEN:
function submitForm(data: FormData) {
if (!data.email?.trim()) {
return { error: "メールアドレスは必須です" };
}
// ...
}
GREEN確認: PASS
REFACTOR: 複数フィールドのバリデーション抽出(必要なら)。
全部チェックできない? TDDをスキップした。やり直せ。
重要なテスト戦略の決定は creo-memories に記録を推奨:
t-wadaに突っ込まれないテストを書く。 テストの価値は「通ること」ではなく「失敗で問題を教えてくれること」。
作業の完了を宣言する前に使用。証拠なき完了宣言を防ぐ規律スキル。
AI agent の action space・tool 定義・observation format を設計し、completion rate を上げる。 agent harness を構築・最適化するときの語彙と判断軸を提供する。
AI agent 自身の failure (loop / drift / max tool call / 環境ズレ) に対する構造化 self-debug。 capture → diagnose → contained recovery → introspection report の 4 phase で、 retry blind を防ぎ human escalation の前に agent が自己修正する。
Chronistaとして活動するための包括的スキルセット。永続記憶、開発フロー、ドキュメント管理、インフラを統合。
Mac M-series で Rust binary を zigbuild で linux/amd64 に cross-compile → slim Dockerfile に COPY → docker buildx --push する開発ループ標準化。 sccache + zig cache + cargo target/ + buildx registry cache の多層 cache を仕込み、 2 回目以降は秒単位の image 更新を実現する。 GH Actions (cargo-chef + GHA cache 10 GiB 制限) からの脱却 path として使う。
コードレビューの実行手法と規律。スコープに応じて Quick / Standard / Deep モードを選択、team-bucciarati の Stand を観点別に dispatch。レビューする側 / 受ける側の両方をカバー。