← inaro.devAI駆動開発 学習ツール

テスト戦略

なぜ学ぶか: 「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が生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。