テスト戦略
なぜ学ぶか: 「AIが書くならテストは要らない」は逆です。AIは大量のコードを速く生成・変更するからこそ、『壊れていないことを自動で確かめる』テストの価値が上がります。テストは、AIに安心して変更を任せるための安全網であり、CIと組み合わせて『壊れたら気づける』体制を作る要です。
テスト=コードが正しく動くかの自動確認
「この入力ならこの結果になるはず」を、コードで書いて機械に検証させます。人間が毎回手で確かめる代わりに、自動で何度でも確認できます。
AI時代こそ価値が上がる理由
AIは速く大量に変更する分、『別の場所を壊す』ことも起きます。テストがあれば、その破壊を即座に検知できます。変更の速さと安全を両立させる装置です。
何をテストするか:重要な振る舞い
全部を網羅する必要はありません。『壊れたら困る中核』(計算ロジック・認証・データ処理)を優先します。UIの細部より、ロジックの正しさから。
AIにテストも書かせる(ただし中身を読む)
「この関数のテストも書いて」でOK。ただしテストも生成物 —『何を確かめているか』を人間が読みます。意味のないテストは安心を偽装します。
テストは1コマンドで何度でも動く
npm testのようなコマンドで一括実行できます。AIに変更を頼んだ直後に流せば、壊れていないかをその場で確かめられます。
テストコードの実例
// 「合計金額を計算する」関数(守りたい中核ロジック)
export function totalPrice(items: { price: number; qty: number }[]): number {
return items.reduce((sum, item) => sum + item.price * item.qty, 0);
}
// テスト: 「この入力ならこの結果のはず」を機械に検証させる
import { expect, test } from "vitest";
test("複数商品の合計を正しく計算する", () => {
const items = [
{ price: 100, qty: 2 }, // 200
{ price: 300, qty: 1 }, // 300
];
expect(totalPrice(items)).toBe(500);
});
test("空の場合は 0 を返す", () => {
expect(totalPrice([])).toBe(0);
});
// → AI が totalPrice を後で書き換えても、
// このテストが通れば「計算は壊れていない」と保証されるテストは「AIが別の変更で、この計算をうっかり壊していないか」を自動で見張る番人です。中核のロジックにテストがあれば、AIに大胆にリファクタリングを任せられます。
ステップ 1 / 2
※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。