「さっきまで動いていたのに、急に動かなくなった」
「同じ場所で何度もエラーが出る」
そんな時に行うのが「デバッグ(Debug)」です。
今回は、デバッグを「医師の診察」に例えて解説します。
結論:「デバッグ」=「不具合を再現し、原因を特定して、修正を確かめること」
デバッグとは、「ソフトウェアが期待通りに動かない原因を調べ、修正する一連の作業」です。
いきなり思いつきでコードを書き換えると、別の問題を増やすことがあります。まず症状を整理し、原因の候補を一つずつ確かめます。
診察のように進める
1. 症状を確認する
「何をした時に」「どの環境で」「何が起きたか」を整理します。
「動かない」だけでは情報が足りません。「スマホで送信ボタンを押すと、読み込み表示のまま止まる」まで分かると、調査しやすくなります。
2. 同じ問題を再現する
同じ手順で問題が起きるかを試します。毎回起きるのか、特定の端末やデータだけなのかも確認します。
再現できない問題は直せない、という意味ではありません。ただし、条件が分かるほど原因を絞りやすくなります。
3. 原因の範囲を狭める
入力、画面、通信、サーバー、データベースなど、どこまで正常に動いているかを確認します。
4. 修正し、もう一度確かめる
原因と考えられる部分を直し、元の問題が解消したかを確認します。同時に、別の機能を壊していないかもテストします。
デバッグで使う道具
ログ
プログラムの動作やエラーを記録したものです。「いつ、どこで、何が起きたか」を調べる手がかりになります。
ブレークポイント
プログラムを指定した場所で一時停止し、その時点の変数や処理の流れを確認します。
一時的な出力
値や通過した場所を表示し、想定した順番で動いているかを確かめます。本番へ不要な出力を残さないことも大切です。
テスト
期待する入力と結果をあらかじめ決め、自動または手動で確認します。修正したバグのテストを残せば、同じ問題の再発を見つけやすくなります。
Gitの履歴
実行時のログとは別物ですが、「どの変更から問題が始まったか」を調べる手がかりになります。変更を少しずつ比較し、原因となったコミットを絞り込む方法もあります。
デバッグで大切な考え方
事実と予想を分ける
「たぶん通信の問題」と決めつけず、ログや再現結果で確かめます。
一度に多くを変えない
複数箇所を同時に変更すると、どの修正が効いたのか分からなくなります。
分からない時は記録して相談する
再現手順、エラーメッセージ、試したことを残すと、ほかの人も調査に参加しやすくなります。
すぐには原因が見つからないバグもあります。それでも、確認した事実を積み上げれば、少なくとも次に調べる範囲は狭くなります。
まとめ
- デバッグ = 「再現、原因調査、修正、再確認の一連の作業」
- 道具 = 「ログ、ブレークポイント、テスト、Gitの履歴など」
- コツ = 「事実と予想を分け、一度に多くを変えない」
デバッグは、勘で犯人を当てる作業ではありません。証拠を集め、仮説を確かめる小さな実験の積み重ねです。
次の記事では、直した問題が再び現れる「先祖返り」について解説します。
ここまでお読みいただきありがとうございました!
QUICK CHECK
よくある質問
最初からコードを直してはいけませんか?
症状を再現できないまま多くを変えると、何が効いたのか分からなくなります。まず事実を記録し、仮説を1つずつ確かめるほうが、遠回りに見えて原因へ近づきやすくなります。
次に読むなら?
REGRESSIONの記事へ進むと、開発や通信の流れを順番に理解できます。
参考資料
用語の定義や仕様を確認するため、公式文書・標準文書を参照しています。リンク先の内容は更新される場合があります。