「コードサルベージャー」は、原因の分からない障害をどう調べるかを扱う連載です。直し方ではなく、調べ方を扱います。港の乾ドックに引き揚げられた沈没船を、元海難事故調査官の引き揚げ屋・汐見澪(ミオ)が一年かけて修復していきます。毎回、船に縁のある人がドックを訪れて自分のバグを持ち込み、ミオが船体で行う調べ方を、自分のコードに持ち帰ります。実装は Go で、検証は go test だけで確かめます。
このページは目次を兼ねた案内板です。いま困っていることが決まっているなら「困りごとから探す」から、順に通して読むなら「全話一覧」から選んでください。公開に合わせて、回を足していきます。
まず読むなら
- 深夜の注文が締め切り前なのに断られる。3回直したのは、どれも見当違いの場所だった — 科学的デバッグ。 思いつきの修正を当てては外し続けるとき、観察と仮説を分け、予測を先に書いてから実験する回。どんなバグにも最初に効く調べ方
困りごとから探す
直しても直しても、同じ苦情が来る
- 深夜の注文が締め切り前なのに断られる。3回直したのは、どれも見当違いの場所だった — 科学的デバッグ。 3回直しても直らない。仮説ごとにテストを書き、外れた仮説も残して原因まで絞る
報告されたエラーが、手元では起きない
- 同じCSVなのに、ある月だけ取り込めない。違っていたのは中身ではなかった — 再現手順の確立。 同じファイルなのに、ある月だけ取り込めない。報告者との差を表にして上から揃え、毎回起きる状態にしてから原因を比べる
大きい入力のときだけ落ちて、どこが悪いのか分からない
- 800行のデータを流すとだけ落ちる。原因は1行ではなかった — Delta Debugging。 800行の部材表を流すとだけ panic する。一部と残りで同じ壊れ方かを確かめながら入力を削り、落ちる最小の組まで絞る
前は動いていたのに、いつの変更で壊れたか分からない
- 去年の報告書を計算し直すと、数字が合わない。怪しいと読んだ変更は無実だった — git bisect。 去年の版は合い、今の版は合わない。判定プログラムに良い・悪い・調べられない(125)を返させ、
git bisect runで最初に壊れたコミットを特定する
全話一覧
| 公開日 | 技法 | 記事 |
|---|---|---|
| 11/16 | 科学的デバッグ | 深夜の注文が締め切り前なのに断られる。3回直したのは、どれも見当違いの場所だった |
| 11/17 | 再現手順の確立 | 同じCSVなのに、ある月だけ取り込めない。違っていたのは中身ではなかった |
| 11/18 | Delta Debugging | 800行のデータを流すとだけ落ちる。原因は1行ではなかった |
| 11/19 | git bisect | 去年の報告書を計算し直すと、数字が合わない。怪しいと読んだ変更は無実だった |
タグページ #code-salvager からも、公開済みの回をたどれます。
