絶対に覚えておくべき「ステータスコードについて」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982981/4880cd58-0ffe-4d68-a598-813732a8e324.png)


# ステータスコードとは

Webブラウザとサーバーがやり取りをする際、返ってくるレスポンスには必ず **ステータスコード** という3桁の数字が含まれます。

HTTPステータスコードは「リクエストに対するサーバーの返事」を示す重要な役割を担っており、これを見れば結果がひと目でわかる仕組みになっています。

:::note warn 会話ブロック
🐬「ときどき `404` とか `500` って数字を見かけるんですけど、あれがステータスコードなんですねぇ？」

🐚「そうそう！正しいコードを使い分けると、開発・運用がずっと楽になるんですよ！」
:::


## ステータスコードの分類

HTTPステータスコードは、1桁目の数字でカテゴリーを示し、2桁目と3桁目の数字で詳細を表し、1xxや2xxなどのように合計3桁の数字で表現されます。

カテゴリーは5つに分かれています。


| カテゴリ               | 範囲       | 意味                                         |
|------------------------|------------|----------------------------------------------|
| **1xx (情報)**          | 100-199    | リクエストの受け取りを示す。                 |
| **2xx (成功)**          | 200-299    | リクエストが正常に処理されたことを示す。     |
| **3xx (リダイレクト)**  | 300-399    | 別のURLへ移動する必要があることを示す。       |
| **4xx (クライアントエラー)** | 400-499    | クライアント側に原因があるエラーを示す。       |
| **5xx (サーバーエラー)** | 500-599    | サーバー側に原因があるエラーを示す。          |

それぞれに意味合いがあるため、サーバー側はリクエストの内容や結果に応じて**適切なステータスコード**を選んで返す必要があります。

### HTTPステータスコードの代表例と使いどころ

具体的なステータスコードの例と使いどころは以下の通りです。

| ステータスコード | 意味                             | 使用例・補足                                                 |
|------------------|----------------------------------|-------------------------------------------------------------|
| **200 OK**       | 正常に処理が完了した             | 通常のGETやデータ取得、問題なく処理が終わった場合。         |
| **201 Created**  | 新規リソースの作成に成功した     | POSTなどで新しいリソースが作成された場合。                 |
| **204 No Content** | 処理成功したが返すデータがない | DELETEなどでコンテンツを返す必要がない場合。               |
| **400 Bad Request** | リクエストが不正             | パラメータが不足・形式不備など、クライアントエラー。       |
| **401 Unauthorized** | 未認証・認可エラー           | トークンや認証情報が無効・未設定など。                     |
| **403 Forbidden** | アクセス権なし                 | 認証済みだが操作する権限がないなど。                       |
| **404 Not Found** | リソースが見つからない          | ユーザーやページが存在しない場合。                         |
| **500 Internal Server Error** | サーバーエラー     | サーバー内部で予期しないエラーが起きた場合。               |
| **503 Service Unavailable** | サービス利用不可      | サーバーが過負荷・メンテナンス中などで一時的に利用不可。   |

> [HTTPステータスコード一覧表 -- MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Status)

:::note warn 会話ブロック
🐚「`404 Not Found` は有名ですよね。あれは 『そのURLのページは無いよ』 という意味です！」

🐬「リンク切れページに行ったときによく見かけますぅ！ `500` って 『サーバーで何か問題が起こった』 ということなんですねぇ…。」

🐚「そうですね。アプリのバグや一時的な不具合のときに返りがちだから、デバッグの手がかりになるんですよっ」
:::

## ステータスコードを正しく運用しよう

### 正しいステータスコードを返すメリット

ステータスコードは、**状況に応じて正確に使い分ける**ことが大切です。
そうすることで、クライアント側や他の開発者が原因や状況を素早く把握でき、結果的に**開発や運用の効率が向上**します。


1. **トラブルシューティングに役立つ**

   例えば `404` や `500` が出たときに、クライアント側のミスなのかサーバー側の問題なのかをすぐに判別できます。

2. **効率的なリダイレクト設定ができる**

    永久移動なら `301`、一時移動なら `302` のように正しいコードを返すことで、SEO的にも正しい評価が行われます。

3. **通信の流れが把握しやすくなる**

    どのコードが返っているかを知ることで、アプリケーションの『どこで何が起こっているのか』を俯瞰できます。

:::note warn 会話ブロック
🐚「コードで原因がわかるから、開発や運用がグッと楽になるんですよね！」

🐬「エラーってただの『嫌なもの』 だと思ってましたけど、実は『助けてくれる情報』 でもあるんですねぇ」
:::

### 正しいステータスコードでAPIをわかりやすく

HTTPステータスコードは、**サーバーとクライアントがスムーズに意思疎通**するために欠かせません。



次の3点を意識するだけで、APIの保守性、さらには信頼性が格段に上がります。

- **正しいステータスコード**を返して、状態を正確に示す
- **エラー時には詳細をレスポンスボディ**に載せて、状況を明示する
- **クライアントの期待**（JSON／XML／HTMLなど）を考慮して実装する

:::note warn 会話ブロック
🐚「新人エンジニアのうちからステータスコードを意識しておくと、あとあと本当に役に立ちますよ。API仕様書を書くときにも“正確なコードを返す”ってのは大事な視点ですっ」

🐬「はい！ これからは 『とりあえず200 OK』 に逃げず、ちゃんと4xxや5xxを使い分けますぅ！」
:::


## まとめ

HTTPステータスコードは、**サーバーからクライアントへの返事**を数値化したもの。
一見するとただの数字に見えますが、**どこが原因で何が問題か**を示すヒントが詰まっています。

下記ポイントを頭に入れておくと、エラーが発生したときにパニックにならず対処がスムーズに進みますよ。

:::tip ポイント
- ステータスコードは **1xx～5xx** の5カテゴリーに分類される
- **2xx** は成功、**4xx** はクライアントエラー、**5xx** はサーバーエラー
- `404 Not Found` や `500 Internal Server Error` など、よく見る数字は要チェック
- 正しいステータスコードを返すことで、**SEOやデバッグ、運用面**でもメリット大
:::

:::note warn 会話ブロック
🐬「今度エラー画面に出くわしたら、『何の番号かな？』 って冷静に見てみますぅ！」

🐚「そうそう、それがエンジニアとして大切な視点だね。慣れてくると『あ、404か…ページのパス間違ってるかな？』 ってすぐわかるようになりますよっ」
:::