第4部:サポート Step 17 / 20

よくあるエラー集

開発中によく遭遇するエラーと、その解決方法をまとめました。エラーが出たらまずここを確認してください。

まず知っておくべきこと:デバッグツール

エラーが出たとき、闇雲に直そうとするのではなく、まずエラーの内容を正確に読むことが大切です。そのために使うのがブラウザの「開発者ツール(DevTools)」です。

ブラウザのDevToolsを開く

Windows / Linux

F12 または Ctrl + Shift + I

Mac

Cmd + Option + I
Console

JavaScriptのエラーメッセージが表示される。赤いテキストのエラーを探す。

Network

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がインポートされていない

解決法

ファイルの先頭に以下を追加:

import { useState, useEffect } from "react";

なぜ起きる? React 17以前は自動インポートされていたが、TypeScript + Next.jsの環境ではHooksを明示的にインポートする必要がある。

You're importing a component that needs useState / useEffect...

Client Componentの指定がない

解決法

ファイルの1行目に以下を追加:

"use client";

なぜ起きる? 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

ネットワークエラー。サーバーに接続できない

解決法(上から順に確認)

  1. バックエンドサーバーが起動しているか確認
  2. http://localhost:8000/docs にブラウザでアクセスして確認
  3. APIのURLが正しいか確認(http://localhost:8000
  4. ポート番号が合っているか確認

なぜ起きる? フロントエンドがバックエンドにHTTPリクエストを送ろうとしたが、接続先が存在しない。バックエンドが起動していない、URLが間違っている、またはファイアウォールでブロックされている可能性がある。

404 Not Found

指定したエンドポイントが存在しない

解決法

  • URLのパスが正しいか確認(/todos vs /todo など)
  • /docs でエンドポイント一覧を確認
  • 末尾のスラッシュの有無を確認(/todos vs /todos/

なぜ起きる? リクエストしたURLに対応するエンドポイントがバックエンドに定義されていない。タイプミスが多い。FastAPIの/docsページで定義されているエンドポイントと見比べると発見しやすい。

解決しない場合は

Claude Codeに質問する

エラーメッセージをそのままコピーして、Claude Codeに質問しましょう。状況の情報が多いほど正確な回答が得られます。

以下のエラーを修正してください:

[エラーメッセージをここに貼り付け]

発生状況:
- いつ発生するか(ページ表示時、ボタンクリック時など)
- 何をしたら発生したか(コードのどこを変更したか)
- 再現手順(毎回出るか、たまに出るか)

ヒント:Claude Codeはターミナル上で動作するため、エラーが出た場所のファイルを自動的に読んで修正してくれます。Cursorの場合はエラーが出ているファイルを開いた状態でChat(Ctrl+L)に質問するとスムーズです。

前へ:Todoアプリ連携編 次へ:次のステップ