バグ修正PRを2つに割る「Red-Green Stacked PR」
再現テストと修正実装をPRに分け、テストが「落ちていた」事実をCI履歴に残す。レビューの信頼性を仕組みで担保する手法。
#なぜ今日これを選んだか
バグ修正のレビューで一番確認しづらいのが「このテスト、修正前は本当に落ちていたのか」という点だ。落ちないテストを足しても直った証明にはならないが、レビュワーは普通そこまで検証しない。この記事はその確認を人の善意ではなくCIの履歴に肩代わりさせる。小さいが効き目のある発想の転換だった。
#要点
- Vitest の
test.failsを使うと「落ちることを期待するテスト」をCIの結果として記録できる - バグ修正を2つのPRに分ける。PR 1 は再現テストだけ(仕様通りのアサーション+
.fails付き)、PR 2 で.failsを外して実装を直す - 同じテストが Red → Green に変わった遷移がCI履歴に残り、「直った根拠」が後から追える
- 複数PRのスタック管理は
gh stackで一括作成・マージができる
#自分にとっての示唆
これは外資の面接で聞かれる「どうやって品質を担保しているか」への具体的な回答になる。「テストを書いています」は誰でも言うが、「再現テストが落ちる状態をCIに残してからPRを分けています」と言えると、レビュー文化を設計できる人として見られる。React × Go を狙うなら、コードの量より運用の設計で差をつけたい。
明日からやるなら、次に踏むバグ1件で試すのがいい。全部の修正でPRを分けるのは重すぎるので、原因が非自明だったバグ限定でよい。PR 1 のタイトルに repro: と付けておけば、チームに説明しないまま試せる。日本語で説明しづらい概念ほど、英語のPR文化ではそのまま通じるという副産物もある。