はじめに
NTT西日本の中川です。 プログラム開発において、デバッグ(バグの修正)は避けて通れない工程ですよね。 どれほど丁寧に設計を練っても、不具合をゼロにするのは至難の業。僕も新人の頃は、画面の前で「なんで動かないんだ?」と頭を抱えたまま、気づけば外が暗くなっていた、なんて苦い経験が何度もあります。
当時は、闇雲にコードを書き換えてはブラウザをリロードする、俗にいう「お祈りデバッグ」を繰り返していました。しかし、それではいつまで経っても解決しないんですよね。今回は、そんなお祈りデバッグを卒業するための「検証ツール(DevTools)」の活用法と、デバッグの時間を効率よく短縮するための「仮説検証」のアプローチを、実体験を交えてご紹介できたらと思います。
対象読者
本記事が想定する対象読者は次の通りです。
- 「とりあえず値を確認したいから、まず
console.log」が口癖の方 - エラーが出ると、どこから手を付けていいか分からずフリーズしてしまう方
- 検証ツールを「色をポチポチ変えるだけ」のツールから卒業させたい方
背景
開発時間の半分以上がデバッグに消えてしまう……。そんな悩みを抱えている方は多いはずです。 僕も以前は、「なんとなくここが怪しい」という直感だけでコードをいじり、別のバグを生むという悪循環に陥っていました。
ですが、大切なのは、ブラウザが標準で備えている強力な武器(検証ツール)を使いこなし、「推測」を「事実」に置き換えていくプロセスです。今回は、僕が現場で「もっと早く知りたかった!」と感じたテクニックを厳選しました。
1. デバッグの基本は「期待」と「事実」のギャップを埋めること
デバッグで最も大切なのは、実はツールの知識よりも「思考のプロセス」です。 不具合が起きているとき、そこには必ず「期待している挙動(理想)」と「実際に起きている挙動(現実)」のズレがあります。
最短で解決するための3ステップ
- 現象の観察: 焦ってコードを直す前に、エラー文を「最後の一文字まで」じっくり読みます。
- 仮説の構築: 「もしかして、APIから空のデータが返ってきているのでは?」と言葉にしてみます。
- 事実の確認: ツールを使って、その瞬間のデータを「目視」し、裏付けをとります。
このステップを飛ばすと、偶然直ったとしても「なぜ直ったか分からない」ため、同じミスを繰り返してしまいます。「急がば回れやで」と先輩に幾度も口酸っぱく言われましたが、いまとなっては「デバッグにおいて最大の金言」だと思っています。
console.log は確かに万能感がありますが、大量のデータが出ると追いかけるのが大変です。そんな時に役立つのがこちら。
データの構造をパッと見抜く console.table()
「APIから返ってきたユーザーリスト、誰のroleが抜けてるんだ……?」と羅列された大量のログを追うのはもうやめましょう。
const users = [ { id: 1, name: "中川", role: "Developer" }, { id: 2, name: "田中", role: undefined }, // ここが原因か! { id: 3, name: "佐藤", role: "Manager" } ]; // 表形式なら、特定の項目の欠落を1秒で見つけられます console.table(users);
「なんとなく重い」を数字にする console.time()
「この処理、ちょっとモッサリしてない?」という感覚をチームに伝える時、数値ほど強い味方はありません。
console.time("データ加工の計測"); const result = heavyProcess(hugeData); // 重い処理 console.timeEnd("データ加工の計測");
3. プログラムの実行を制御する「ブレークポイント」
console.log が「過去の足跡」だとしたら、「ブレークポイント」は「現在進行形の時間を止める術」です。
やり方:
- 検証ツールの Sources タブで、気になる行番号をクリック。
- 青いマークがついたら、プログラムがその瞬間で「停止」します。
ここでの感動ポイントは、「止まった時点での変数の値がすべて見える」こと。console.log を10個並べるより、1つのブレークポイントの方が圧倒的に情報量が多いです。

4. 呼び出しの経緯を遡る「コールスタック」
「エラーの場所は分かった。でも、そもそも誰がこの関数を呼んだんだ?」 そんなときは Call Stack(コールスタック) の出番です。
- 実行の歴史を「タイムスリップ」するように遡れます。
- 呼び出し元を順にクリックしていくと、どの時点でデータが壊れたのかを特定できます。
「関数Aが呼んだ関数Bの、さらに先の関数C」で起きたミスも、効率的に追跡できます。

5. 境界線を引く「切り分け」の技術(ネットワークタブ)
フロントエンド開発で一番悲しいのは、自分のコードが悪いと思って3時間調べた結果、実はAPIサーバー側が止まっていた……というパターンです。
調査の前に Network タブを開く癖をつけましょう。
- Status: 500系なら、すぐにサーバー側を確認するようにしましょう。「フロントエンドの問題じゃない」と分かれば、無駄な調査を即座に終了できます。
- Response: 期待通りのJSONが返ってきているか、真っ先に確認してください。
まとめ
デバッグは、不具合の「正体」を一つずつ暴いていく探偵のような仕事です。
- エラー文を友達にする: 解決のヒントは、常にエラー文が教えてくれます。楽しむくらいの気持ちで読んでみましょう。
- 仮説を独り言にしてみる: 「ここが怪しいんだよな」と呟くと、思考が整理されます。(結構大事です。)
- ツールで「事実」を見る: 自分の推測を疑い、ツールで証拠を掴みます。
検証ツールを使いこなせるようになると、デバッグは「苦痛な作業」から「知的な推理ゲーム」に変わります。明日からのデバッグが、ほんの少しだけ楽しみになれば幸いです。 今日から、お祈りデバッグを卒業して、スマートにバグを対処していきましょう!
執筆者
中川 拓哉(NTT西日本 デジタル革新本部 デジタル改革推進部所属) NTT西日本のWebアプリケーションの開発・運営に従事。 好きな技術スタック:TypeScript, Vue.js, GraphQL, Laravel
参考文献
商標
- 「Google Chrome」は、Google LLCまたはその関連会社の商標もしくは登録商標です
- その他、本記事に記載されている会社名、製品名、サービス名等は、各社の商標または登録商標です。