← 「測定器が壊れている」せいで、直っていたはずの合格が12件も眠っていた話
第54話

構造的失敗を先に作る勇気でDBマイグレーションを書き直した話

MicroWin アプリ Day 4 PR1 を作っていた夜のことだった。user_version 配列で DB マイグレーションを駆動するという設計は、恥ずかしながら 3 回目で諦めた過去がある。SQLite 互換で PRAGMA user_version を上げる順番で適用する方式は明快だが、各 step の冪等性をどう担保するかで毎回詰まっていた。

3 度目の挫折の夜、ふと「失敗を先に作る」コードを書いた。SQLite の PRAGMA user_version が 0 から始まっている状態で、step 1 だけ実行して検証するテストを書く。2 を実行して検証するテストを書く。0 に戻して全部一気に実行するテストを書く。一気に実行する途中でわざと接続を切るテストを書く。書きながら震えた。「こんな書き方、職業エンジニアとして恥ずかしい」と思った。書き終えてコーヒーを淹れた。

翌朝、恥ずかしいコードが動いた。破損した中間状態(user_version=1 で 2 を実行)も、3 度目の step(=もう 1 に戻して全部実行)を呼べば recovery できる。冪等ではない遷移を冪等な「3 度実行で必ず収束する」プロトコルに変換した。これは TDD の中でも「失敗してから書く」red-green-refactor の red を強調する流派で、恥ずかしかったが機能した。

Day 4 末の最終ビルドで 111 テスト緑・coverage 98%・tsc=0 を確認した時、あの夜の恥ずかしさが誇りに変わった。失敗を先に作るのは逃げではなく、設計の強度を測る試験だ。

<details> <summary>技術解説: user_version 配列駆動 DB マイグレーションの設計詳細</summary>

設計の核

失敗モードへの対処

テスト戦略(Day 4 実装)

評価

関連 SSOT

公開判定