よくあるエラー集
開発中によく遭遇するエラーと、その解決方法をまとめました。エラーが出たらまずここを確認してください。
まず知っておくべきこと:デバッグツール
エラーが出たとき、闇雲に直そうとするのではなく、まずエラーの内容を正確に読むことが大切です。そのために使うのがブラウザの「開発者ツール(DevTools)」です。
ブラウザのDevToolsを開く
Windows / Linux
F12 または Ctrl + Shift + I
Mac
Cmd + Option + I
JavaScriptのエラーメッセージが表示される。赤いテキストのエラーを探す。
API通信の状況を確認。リクエストのステータスコード(200, 404, 422, 500など)や送受信データを見る。
エラー解決の3ステップ: (1) エラーメッセージを読む → (2) エラーの原因を特定する → (3) 修正する。エラーメッセージを読み飛ばさず、1行目に「何が問題か」のヒントがあります。
環境構築のエラー
'node' は認識されていません / command not found: node
Node.jsがインストールされていない、またはPATHが通っていない
解決法
- Node.jsを公式サイトから再インストール
- インストール後、ターミナルを閉じて再度開く(またはPCを再起動)
node --versionで確認
なぜ起きる? インストーラがPATH(コマンドの検索場所)を設定するが、すでに開いていたターミナルには反映されない。ターミナルを開き直すことで新しいPATHが読み込まれる。
'python' は認識されていません / command not found: python
Pythonがインストールされていない、またはPATHが通っていない
解決法
- Pythonを再インストール時に「Add Python to PATH」にチェック(最重要)
- Macの場合は
python3を試す(Macではpython3がデフォルト名) - ターミナルを閉じて再度開く、またはPCを再起動
なぜ起きる? WindowsではPythonインストール時にPATH追加のチェックがデフォルトでオフ。チェックを忘れるとコマンドラインからPythonが見つからない。
npm ERR! code ENOENT
package.jsonが見つからない
解決法
- 正しいディレクトリにいるか確認(frontendフォルダ内か)
ls(Mac)やdir(Windows)でpackage.jsonがあるか確認cd frontendで移動してから再実行
なぜ起きる? npmはカレントディレクトリのpackage.jsonを探す。プロジェクトのルートではなく、フロントエンドのフォルダ内で実行する必要がある。
pip install でエラーが出る
Permission denied、または仮想環境関連のエラー
解決法
- 仮想環境を有効化してからインストール:
venv\Scripts\activate(Windows)/source venv/bin/activate(Mac) - ターミナルの先頭に
(venv)が表示されていれば有効化済み - 有効化していない状態でインストールするとシステム全体に影響するのでNG
なぜ起きる? 仮想環境(venv)を使うと、プロジェクトごとにパッケージを分離できる。有効化せずにpip installすると、権限不足やバージョン競合の原因になる。
Next.js開発中のエラー
Module not found: Can't resolve '...'
インポートしようとしているモジュールが見つからない
解決法
- ファイルパスが正しいか確認(
@/は src/の意味) - 外部パッケージなら
npm install パッケージ名 - ファイル名の大文字小文字を確認(Linuxでは区別される)
- ファイルの拡張子(.ts / .tsx)を確認
なぜ起きる? import文のパスとファイルの実際の場所が一致していない。新しいファイルを作った後にこのエラーが出たら、パスのスペルミスが多い。
useState/useEffect is not defined
React Hooksがインポートされていない
解決法
ファイルの先頭に以下を追加:
なぜ起きる? React 17以前は自動インポートされていたが、TypeScript + Next.jsの環境ではHooksを明示的にインポートする必要がある。
You're importing a component that needs useState / useEffect...
Client Componentの指定がない
解決法
ファイルの1行目に以下を追加:
なぜ起きる? Next.js App Routerでは、デフォルトがServer Component。useState/useEffect/onClickなどのブラウザ機能を使うコンポーネントは"use client"でClient Componentにする必要がある。
Hydration failed / Text content does not match
サーバーとクライアントでレンダリング結果が異なる
解決法
- Date.now()などランダムな値を直接レンダリングしていないか確認
- useEffectで初期化するか、suppressHydrationWarningを使用
- ファイル先頭に
"use client"を追加
なぜ起きる? Next.jsはまずサーバーでHTMLを生成し、ブラウザで同じ内容を再生成して「突き合わせ」する。Date.now()のように毎回変わる値はサーバーとブラウザで一致しないためエラーになる。
TypeError: Cannot read property 'map' of undefined
undefinedに対してmapを呼んでいる
解決法
- 初期値を空配列
useState<Todo[]>([])にする - オプショナルチェイニング
data?.map()を使う - ローディング状態を追加して、データ取得前はリストを表示しない
なぜ起きる? API通信は非同期なので、データが届く前にコンポーネントが表示されようとする。その時点ではデータがundefinedなのでmapが呼べない。
FastAPI開発中のエラー
ModuleNotFoundError: No module named 'fastapi'
FastAPIがインストールされていない
解決法
- 仮想環境が有効になっているか確認(ターミナルに
(venv)が表示されているか) pip install fastapi uvicornを実行- それでもダメなら仮想環境を作り直す:
python -m venv venv
なぜ起きる? 仮想環境が有効化されていない状態でuvicornを実行すると、システムのPython環境を参照する。そこにFastAPIがインストールされていないためエラーになる。
422 Unprocessable Entity
リクエストのバリデーションエラー
解決法
- 送信しているJSONの形式がPydanticモデルと一致しているか確認
- 必須フィールドが含まれているか確認
- Content-Type: application/jsonヘッダーを確認
/docsで直接テストして正しいリクエスト形式を確認
なぜ起きる? FastAPIはPydanticを使ってリクエストデータを自動バリデーションする。送られたデータが定義した型・形式と一致しないと422エラーを返す。/docs画面で「Try it out」するとレスポンスにどのフィールドが不正か詳細が書かれている。
IndentationError: unexpected indent
Pythonのインデントが不正
解決法
- タブとスペースが混在していないか確認
- スペース4つで統一する
- エディタ(VS Code等)の設定で「Insert Spaces」をオン、タブサイズを4に
なぜ起きる? Pythonは他の言語と違い、インデント(字下げ)でブロックの範囲を決める。タブとスペースが混在すると見た目は同じでもPythonには別物として見えるためエラーになる。
ERROR: [Errno 48] Address already in use
ポートが他のプロセスに使われている
解決法
- 前回起動したサーバーが残っていないか確認(ターミナルを閉じ忘れていないか)
- 別のポートで起動:
uvicorn main:app --reload --port 8001
なぜ起きる? 同じポート番号で2つのサーバーは起動できない。前回のサーバーがまだ動いているか、別のアプリが同じポートを使っている。
フロント・バック連携時のエラー
CORS policy: No 'Access-Control-Allow-Origin'
CORSエラー。異なるオリジン間の通信がブロックされている
解決法
FastAPIにCORS設定を追加:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:3000"],
allow_methods=["*"],
allow_headers=["*"],
)
なぜ起きる? ブラウザのセキュリティ機能で、異なるオリジン(ドメイン+ポート番号の組み合わせ)間の通信はデフォルトでブロックされる。localhost:3000とlocalhost:8000はポートが異なるので「別のオリジン」扱い。バックエンド側で明示的に許可する必要がある。
Failed to fetch / NetworkError
ネットワークエラー。サーバーに接続できない
解決法(上から順に確認)
- バックエンドサーバーが起動しているか確認
- http://localhost:8000/docs にブラウザでアクセスして確認
- APIのURLが正しいか確認(
http://localhost:8000) - ポート番号が合っているか確認
なぜ起きる? フロントエンドがバックエンドにHTTPリクエストを送ろうとしたが、接続先が存在しない。バックエンドが起動していない、URLが間違っている、またはファイアウォールでブロックされている可能性がある。
404 Not Found
指定したエンドポイントが存在しない
解決法
- URLのパスが正しいか確認(
/todosvs/todoなど) /docsでエンドポイント一覧を確認- 末尾のスラッシュの有無を確認(
/todosvs/todos/)
なぜ起きる? リクエストしたURLに対応するエンドポイントがバックエンドに定義されていない。タイプミスが多い。FastAPIの/docsページで定義されているエンドポイントと見比べると発見しやすい。
解決しない場合は
Claude Codeに質問する
エラーメッセージをそのままコピーして、Claude Codeに質問しましょう。状況の情報が多いほど正確な回答が得られます。
以下のエラーを修正してください: [エラーメッセージをここに貼り付け] 発生状況: - いつ発生するか(ページ表示時、ボタンクリック時など) - 何をしたら発生したか(コードのどこを変更したか) - 再現手順(毎回出るか、たまに出るか)
ヒント:Claude Codeはターミナル上で動作するため、エラーが出た場所のファイルを自動的に読んで修正してくれます。Cursorの場合はエラーが出ているファイルを開いた状態でChat(Ctrl+L)に質問するとスムーズです。