IT用語集

500エラーとは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

UnsplashMarkus Spiskeが撮影した写真 

Webサイトが突然「Internal Server Error」と表示され、ページが開けなくなる――その代表例がHTTPステータスコードの500(Internal Server Error)です。500は、サーバー側で想定外の状態が発生し、リクエストを正常に完了できなかったことを示す汎用的なエラーです。画面表示だけでは原因を特定できないため、運用や障害対応では切り分けの難しさが課題になります。本記事では、500の基本的な意味を押さえたうえで、起きやすい原因、調査・対処の手順、再発を防ぐための実務ポイントまでを整理して解説します。

500エラーとは何か

500エラーの定義と意味

500(Internal Server Error)は、HTTPステータスコードの一種で、サーバーが予期しない状況に遭遇し、リクエストを完了できなかったことを示します。具体的には、アプリケーションの未処理例外、設定不備、依存先(データベースや外部APIなど)の失敗、リソース枯渇といった要因により、サーバーが本来返すべきレスポンス(HTMLやJSONなど)を生成できなかった場合に返されます。

重要なのは、500というコード自体は「サーバー側で失敗した」という結果のみを示し、原因の詳細までは含まない点です。そのため、原因特定にはエラーログやアプリケーションログ、監視指標(CPU・メモリ・ディスク・DB接続数など)、直前の変更履歴(デプロイや設定変更)といった周辺情報を総合的に確認する必要があります。

HTTPステータスコードにおける500エラーの位置づけ

HTTPステータスコードは、Webサーバーがクライアントに返す応答の状態を示す3桁の数字で、意味ごとに分類されています。500は「5xx(サーバーエラー)」に属し、サーバー側の都合で処理できなかったことを示します。

  1. 1xx(情報):リクエストを受信し、処理を継続している
  2. 2xx(成功):リクエストが受理され、処理に成功した
  3. 3xx(リダイレクト):追加の操作(別URLへの移動など)が必要
  4. 4xx(クライアントエラー):リクエストの誤りにより処理できない
  5. 5xx(サーバーエラー):サーバー側の都合で処理できない

500は「サーバー側の処理失敗」を代表するコードですが、原因が幅広いため、そのまま返し続けていると障害対応が遅れたり、利用者の不信感につながったりします。運用では「どの層(Web/アプリ/依存先)で失敗しているか」を早く判断できる情報設計が重要になります。

500エラーが発生する一般的な原因

500エラーは「サーバー内部で何らかの処理が失敗した」状態の総称です。実務でよく見られる原因を整理すると、次のようなカテゴリに分けられます。

  1. アプリケーション例外(未処理例外、Null参照、型変換ミス、テンプレート変数の未定義、想定外入力によるエラーなど)
  2. 設定不備(環境変数の欠落、秘密情報の参照先誤り、権限設定ミス、ルーティングやリバースプロキシ設定の誤りなど)
  3. 依存先の失敗・遅延(DB接続上限超過、外部APIのタイムアウト、キャッシュ障害、ストレージ権限不備など)
  4. リソース枯渇(メモリ不足、CPU飽和、ディスク逼迫、ファイルディスクリプタやワーカーの枯渇など)
  5. デプロイ起因(互換性のないリリース、依存ライブラリ更新、マイグレーション失敗、ロールバック不備など)

原因特定では、「いつから」「どのURLや機能で」「どのユーザー条件で」「直前に何が変わったか」をセットで確認すると、調査範囲を効率的に絞り込めます。

500エラーとほかのエラーコードの違い

500は汎用的なコードですが、実務では状況に応じて別のステータスコードを返したほうが切り分けしやすい場合があります。代表的な違いを整理します。

エラーコード主な意味実務での見立て
400 Bad Requestリクエストが不正入力値や形式、JSON構文の誤りなど
401 Unauthorized認証が必要ログインやトークン不備、認証フローの問題
403 Forbiddenアクセス拒否権限設定、WAF、IP制限など
404 Not Foundリソースが存在しないURL誤り、ルーティング不備
500 Internal Server Errorサーバー内部の想定外の失敗アプリ例外、設定不備、依存先処理失敗の扱い不足
502 / 504上流の応答異常・タイムアウトリバースプロキシ配下の上流障害や遅延
503 Service Unavailable一時的に利用不可メンテナンスや過負荷による停止状態

本来は502や504で返すべき状況でも、アプリ側の例外処理が不十分だと500に集約されることがあります。切り分けしやすいステータス設計は、再発防止にも直結します。

500エラーが発生した際の対処法

500エラー対応では、「まず復旧させる一次対応」と「原因を潰す二次対応」を切り分けて進めることが重要です。以下では、現場で迷いにくい順序で対処の流れを整理します。

手順1:影響範囲と再現条件を切り分ける

  • いつから発生しているか
  • どこで発生しているか(特定ページ/全体/特定API)
  • 誰に起きているか(全ユーザー/特定条件)
  • 何をしたときに起きるか

再現条件を明確にできるほど、ログ確認や原因特定がスムーズになります。発生時刻や対象URLなどは、調査の基準点として記録しておくと有効です。

手順2:Webサーバーやリバースプロキシのログを確認する

次に、ApacheやNginx、ロードバランサ、リバースプロキシのログを確認します。ログには、時刻、対象URL、ステータス、上流への接続状況、タイムアウトなどの手がかりが残ります。

運用面で効果が高いのは、入口でリクエストIDを付与し、Webログとアプリログの双方に出力する設計です。これにより、処理の流れを横断的に追跡しやすくなります。

手順3:アプリケーションログと例外を確認する

500の直接原因がアプリケーション例外であるケースは少なくありません。例外メッセージやスタックトレースを確認し、「どの処理で」「どの条件で」失敗したかを把握します。

入力値の詳細をそのまま残すのではなく、サイズや種別など要点をログに残す設計にしておくと、再現性の確認と修正がしやすくなります。

手順4:依存先の状態を確認する

アプリ側に明確な手がかりがない場合は、データベースや外部API、ストレージなど依存先の遅延や障害を確認します。特定ページだけで500が出る場合や、アクセス集中時に発生する場合は、依存先の負荷やタイムアウトが引き金になっていることが多く見られます。

手順5:一次復旧を行う

原因特定に時間がかかる場合は、ユーザー影響を抑えるために一次対応を優先します。代表的な手段には、直前リリースのロールバック、リソース増強、問題機能の一時停止などがあります。復旧後は、必ず恒久対策につなげます。

500エラーを防ぐためのベストプラクティス

500の再発防止には、コード品質だけでなく運用設計の工夫が欠かせません。

例外処理とログ設計を整える

例外を握りつぶさず、適切に捕捉してログに残すことが基本です。ユーザー向け表示は最小限にとどめつつ、運用側が原因を追跡できる情報を確保します。

入力エラーと内部エラーを分けて扱う

入力不正は4xx、内部処理や依存先失敗は5xxと明確に分けることで、500の濫発を防ぎ、切り分けを容易にします。

監視・トレーシングを整備する

5xx率やレイテンシの分位点、例外の急増などを監視し、異常に早く気づける体制を整えます。平均値よりもp95やp99といった指標が有効です。

安全なデプロイと容量計画を行う

段階的デプロイやロールバック手順、負荷テストを通じて、「高負荷時にどこが壊れるか」を事前に把握しておくと、大量の500発生を防げます。

まとめ

500(Internal Server Error)は、サーバーが想定外の状態に陥り、リクエストを完了できなかったことを示す汎用的なHTTPステータスコードです。原因は多岐にわたるため、影響範囲の切り分け、ログ確認、依存先の確認を段階的に行うことが重要になります。例外処理やログ設計、監視体制を整えることで、原因特定と復旧のスピードを高め、500エラーの再発を抑えられます。

記事を書いた人

ソリトンシステムズ・マーケティングチーム