【すたっくとれーす】

スタックトレース とは?

💡 エラーに至る「関数の呼び出し道筋の記録」
📌 このページのポイント
スタックトレース(エラー追跡)の読み方 Error: Cannot read property 'name' of undefined at getUserName (user.js:15) at processOrder (order.js:42) at handleRequest (server.js:88) at Router.handle (router.js:120) at app.listen (index.js:5) ここがエラー原因! 最上位 = 直接の原因 呼び出し元をたどる 下に行くほど古い呼び出し 読み方のコツ 上から順にファイル名と 行番号を確認する エラー発生時の関数の呼び出し履歴。上から順に原因を追跡できる
スタックトレースのイメージ
ひよこ ひよこ

スタックトレースって何行もあって読めない…

ペンギン先生 ペンギン先生

まず一番下の行を見て。そこが「実際にエラーが起きた場所」。次にエラーメッセージを読む。この2つだけで原因の8割はわかる。中間の行は「どこ経由で来たか」の道筋で、最初は無視していい。

ひよこ ひよこ

自分のコードじゃなくてライブラリの中のエラーってどう読むの?

ペンギン先生 ペンギン先生

ライブラリの内部コードはバグが少ないので、「自分のコードがライブラリに何を渡したか」を疑う。スタックトレースで自分のファイル名が含まれる行を見つけて、そこで渡している引数の型や値を確認するのがポイント。

ひよこ ひよこ

よく見るNullPointerExceptionとかTypeErrorって何?

ペンギン先生 ペンギン先生

NullPointerException(Java)やTypeError(Python/JS)はエラーの種類を示す。「null(存在しないもの)を操作しようとした」「期待した型と違う型が来た」という意味。スタックトレースの最初の行に書いてあるエラークラス名を読む習慣をつけると上達が早い。

ひよこ ひよこ

本番環境のスタックトレースをユーザーに見せちゃいけないの?

ペンギン先生 ペンギン先生

絶対ダメ。ファイルパス・変数名・内部構造が全部バレるから、攻撃者へのヒントになる。本番ではユーザーには「エラーが発生しました」だけ見せて、スタックトレースはサーバのログにだけ出力する設計が正解。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
スタックトレースって出てきたら「エラーが起きるまでの関数呼び出しの記録」と思えばだいたいOK!
📖 おまけ:英語の意味
「stack trace」 = スタック(積み上げ)の追跡
💬 関数呼び出しは「コールスタック」に積まれていく。エラー時にそのスタックの中身を「trace(追跡)」したものがスタックトレース
← 用語集にもどる