Skip to content

Tests Remain

テストを書かないエンジニアがいた。

手は早かったし、バグも少なかった。テストなんか書かなくても動くものは作れる、と本気で思っていた。あるとき、大規模サービスの複雑なコンポーネントでエッジケースを踏んだ。商用環境で、だ。修正はすぐだった。しかし後始末は最悪だった。影響範囲の特定、破損した全データのリカバリ、顧客への説明、再発防止策の作成。テストがあれば、そのすべてが要らなかった。

テストは面倒だ。書くのに時間がかかるし、メンテナンスも要る。テストコードのほうが本体より多いプロジェクトもある。それでも書く理由は単純で、人間は忘れるからだ。3ヶ月前に自分が書いたコードの意図を、自分でも覚えていない。テストだけがそれを覚えている。

AIがコードを書く時代になって、テストの重要性はむしろ上がったと感じている。

AIの出力は速い。速いが、正しいとは限らない。文脈を読み違えることもあるし、既存のコードとの整合性が取れていないこともある。人間が書いたコードなら「あの人に聞けばわかる」が通用するが、AIが書いたコードには聞く相手がいない。テストだけが、そのコードが意図通りに動いているかを教えてくれる。

膨大なテストがあれば、AIにコードを書かせてもリグレッションを検出できる。テストが通れば出す。落ちたら直す。書いたのが人間かAIかは関係ない。テストが品質の最後の砦になる。

E2Eテストの敷居も下がった。AIに頼めばDockerで環境を立てて、Playwrightでブラウザを動かして、テストまで書いてくれる。以前なら環境構築だけで半日かかっていた作業が、数分で終わる。テストを書かない言い訳がなくなりつつある。

冒頭のテストを書かないエンジニアは、いまこうしてブログを書いている。