エラーの原因を特定する
可能性を順位づけし、それぞれの確かめ方を示す
[技術スタックとバージョン]でこのエラーが出ました。[すでに試したこと]。次をお願いします:1)可能性の高い順に原因を挙げる;2)それぞれに確認方法(コマンド1つ、または最小の再現コード)を示す;3)すでに試したことは繰り返さない;4)判断するのに情報が足りなければ、何を追加すべきかをそのまま伝える。 ``` [エラーとスタックトレースを貼り付けてください] ```
使い方
まずエラーとスタックだけを貼り、コードは後回しにしましょう。コードを先に見せると、目に入る範囲へ推測が引っ張られます。
向いている場面
- エラーが安定して再現し、スタックトレースも揃っているのに、失敗しているフレームワークやライブラリの層に詳しくないとき。
- 2〜3 の修正を試してどれも効かず、当てずっぽうを続けるのではなく方向を絞ってほしいとき。
向いていない場面
- 本番でたまにしか出ず、ログにリクエスト id も入力値もない場合は、まずログを足します。そうしないと推測の一覧しか返ってきません。
- 実は直前に変更した数行が原因なら、git diff や git bisect のほうが速く終わります。
例
入力
TypeError: Cannot read properties of undefined (reading 'map')
at OrderList (src/components/OrderList.tsx:42:31)
at renderWithHooks (react-dom.development.js:14985:18)
Next.js 13.4 / SWR 2.2 / Node 18
試したこと:?. の追加、.next キャッシュの削除、node_modules の再インストール得られるもの
「API が loading かエラーのとき data は undefined なのに、コンポーネントがそのまま data.map を呼んでいる」を 1 位に、SWR に fallbackData がなくルート遷移で key が再利用される点を 2 位に、API 自体が空を返す可能性を 3 位に置きます。それぞれに確認手順(42 行目の前で data を出力する、mock で 500 を返して落ちるか見る)を付け、試済みの `?.` には触れません。
よくある誤用
- 最後の 1 行だけを貼り、スタックとバージョンを省くと、最も普及しているフレームワークのバージョンから推測するしかなくなります。
- 「試したこと」を省くと、すでに除外した方向をもう一度たどられ、1 往復が無駄になります。
こう変えると効く
- 「まず可能性の高い原因を 3 つと、それぞれの確認コマンドだけ。修正コードはまだ不要」と加えると、範囲を絞ってから手を入れられます。
- 「技術スタックとバージョン」を `package.json` や `pip freeze` の原文に置き換えると、バージョンに関する幻覚の多くが消えます。