statusCode / 100 != 2は賢いのか読みにくいのか?HTTPステータスコード判定の書き方を考える

目次

AIが書いた「割り算でステータス判定」が話題に

Claude Opus 4.7が生成したJavaのコードに、こんな一行がありました。

if (response.statusCode() / 100 != 2) {
    // エラー処理
}

これを見た開発者の反応は真っ二つに分かれました。「賢い、自分もよく使う」派「読みにくい、何やってるか一瞬わからない」派。エンジニアの間で大きな議論を呼びました。

そもそもこのコードは何をしているのか? HTTPステータスコードの基本から整理してみましょう。

そもそもHTTPステータスコードとは? ― 3桁の数字のルール

HTTPステータスコードは、サーバーがクライアントに返す3桁の数字で、リクエストの結果を伝えます。日常的に見る「404 Not Found」や「500 Internal Server Error」がそれです。

重要なのは、この3桁の「百の位」がカテゴリを表しているというルールです。これはHTTPの仕様(RFC 9110)で明確に定義されています。

百の位 カテゴリ 意味 代表例
1xx 情報 処理中、続けてください 100 Continue
2xx 成功 リクエストは正常に処理された 200 OK, 201 Created
3xx リダイレクト 別のURLに移動してください 301 Moved, 304 Not Modified
4xx クライアントエラー リクエストに問題がある 400 Bad Request, 404 Not Found
5xx サーバーエラー サーバー側で問題が起きた 500 Internal Server Error

つまり、ステータスコードが「成功」かどうかを判定したい場合、百の位が2であるかを確認すればいい。200でも201でも204でも、2xxならすべて「成功」です。

なぜ`/ 100`で判定できるのか

Javaの整数同士の除算は小数点以下が切り捨てられます。この性質を使えば、百の位だけを取り出せます。

200 / 100 = 2  ← 成功
201 / 100 = 2  ← 成功
204 / 100 = 2  ← 成功
301 / 100 = 3  ← リダイレクト
404 / 100 = 4  ← クライアントエラー
500 / 100 = 5  ← サーバーエラー

だからstatusCode() / 100 != 2「2xx(成功)でなければエラー処理する」という意味になります。200だけでなく201や204もまとめて「成功」と判定できるのがこの書き方の利点です。

ただし、言語によっては整数除算にならないことに注意。JavaScriptやPythonの/は浮動小数点の除算なので、200 / 1002.0になりますが、201 / 1002.01になって!= 2trueに。意図した動作になりません。

// JavaScript: / は浮動小数点除算
201 / 100         // → 2.01(2ではない!)
201 / 100 !== 2   // → true(成功なのにエラー扱いされる)

// 正しくやるならMath.floorで切り捨てる
Math.floor(201 / 100) !== 2  // → false(正しい)

Javaのような整数除算が保証される言語でのみ安全に使えるテクニックです。

他の書き方と比較

同じ「2xx判定」を実現する方法は複数あります。それぞれの可読性とトレードオフを見てみましょう。

書き方 可読性 正確性 備考
status / 100 == 2 △ 知ってれば一瞬 整数除算の言語のみ
status >= 200 && status < 300 ◎ 誰でも読める 最も明示的
status == 200 △ 201, 204を見逃す 厳密には不十分
response.ok(fetch API) JSのfetch限定
isSuccessful()(OkHttp等) ライブラリ依存

よくやりがちなstatus == 200は、実は不十分です。POSTリクエストで201(Created)が返ってきた時や、DELETEで204(No Content)が返ってきた時にエラー扱いになってしまいます。「成功判定は2xx全体で行う」のが正しいアプローチです。

結局どれを使うべき?

チームで統一するなら、以下の判断がおすすめです。

  • ライブラリに判定メソッドがあるなら、それを使う(response.okisSuccessful()等)。最も意図が明確
  • 自前で判定するならstatus >= 200 && status < 300が最も読みやすい。言語を問わず誰でも理解できる
  • / 100方式は間違いではないが、コメントを添えないとチームの可読性が下がる。個人プロジェクトやAI生成コードのレビュー時に「何をやっているか」を知っておくレベルでOK

議論の本質は「正しいか間違いか」ではなく、「チームで読みやすいか」です。どの書き方でも動作は同じ。大事なのは、チーム内でスタイルを統一して迷いをなくすこと。

コード品質の意識を高める関連記事

まとめ

  • HTTPステータスコードは百の位がカテゴリ。2xxが成功、4xxがクライアントエラー、5xxがサーバーエラー
  • statusCode / 100 == 2は整数除算で百の位を取り出し、2xx全体を判定するテクニック
  • 整数除算が保証される言語でのみ有効。JavaScriptではMath.floorが必要
  • status == 200だけでは不十分。201や204を見逃す
  • チームでの推奨はstatus >= 200 && status < 300。言語非依存で最も読みやすい

AI生成コードが増えるにつれて、「見慣れない書き方だけど合ってるの?」と立ち止まる場面は増えていきます。/ 100方式は正しい。でも可読性は好みが分かれる。大事なのは、仕組みを理解した上で「うちのチームではこう書く」と決めておくこと。コードスタイルの議論は正解探しではなく、チームの合意形成です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次