Dev Study
← Angular コース

99. 原因の切り分け — 範囲を半分にしていく型

バグ調査の基本は、どこが壊れたかの範囲をひたすら狭めることです。代表的な手法が二分探索で、怪しい範囲の半分をコメントアウトして症状が消えるか試します。消えればコメントアウトした側に、残ればもう半分に原因があります。これを繰り返せば、数十行の候補でも数回の試行で1行まで絞り込めます。

「さっきまで動いていた」なら、動いていた状態との差分が最大の手がかりです。git diff で直前のコミットからの変更点を一覧すれば、原因はほぼ必ずその中にあります。また、バグの箇所だけを小さな新しいコンポーネントに移して再現する「最小再現」を作ると、無関係な要素が消えて原因が浮かび上がります。

手当たり次第に直そうとするのは逆効果です。疑う順番の型を持ちましょう。まずデータ(APIの応答は正しいか)、次にロジック(加工後の値は正しいか)、最後に表示(テンプレートの書き方は正しいか)の順に、各段階で値を実際に確認してから次へ進みます。そして一度に変えるのは一箇所だけ、が鉄則です。

サンプルコード(フレームワーク環境が必要なため表示のみ)

// 切り分けの型 ① 二分探索(半分コメントアウト)
//
// 「このページを開くとエラーになる」→ テンプレートの半分を消して試す
//   前半だけ残す → エラー消えた → 原因は後半にある
//   後半をさらに半分に → …数回で1行まで絞れる
//
// 切り分けの型 ② 動いていた状態との差分
//   git diff              # 直前のコミットからの変更を一覧
//   git stash             # 変更を一時退避して「動く状態」に戻して確認
//   git stash pop         # 退避した変更を戻す
//
// 切り分けの型 ③ どの層で壊れたかを順に疑う
//
//   [データ]   APIの応答は正しいか   → Network タブで確認
//      ↓ 正しい
//   [ロジック] 加工後の値は正しいか → ブレークポイントで確認
//      ↓ 正しい
//   [表示]     テンプレートは正しいか → Angular DevTools で確認
//
// 鉄則: 一度に変えるのは一箇所だけ。
// 二箇所同時に変えると、直っても壊れても原因が特定できない
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗