兄弟たち、こんな夜を経験したことはないか?オフィスの明かりは全部ついていて、出前の箱は山積み、画面のエラーに手も足も出ず、頭の中はただ一つ——これ、一体どういう意味だ?
俺はよくわかる。先週の水曜日、俺が担当するプロジェクトが本番稼働した。午前2時、テストグループが突然騒ぎ出した。ユーザーからページが開けない、真っ白だという報告があった。すぐにバックエンドのログを開くと、目に飛び込んできたのは刺さるような数字:500。その瞬間、頭が真っ白になって、終わった、サーバーが落ちたと思った。それから俺はあれこれ試し始めた。サービス再起動、キャッシュクリア、CPU確認、2時間も無駄にして、結局問題は見つからなかった。最後にどうしようもなくて、ドキュメントを調べまくって、やっとデータベース接続プールの設定が間違っていることに気づいた。返ってきたのは実は503で、500ではなかった。
「500と503に何の違いがあるんだ?」と思うかもしれない。違いは大きい!これはお腹が痛くて医者に行くようなものだ。一人の医者は胃の病気だと言い、もう一人は腸炎だと言う。治療法は全く違う。500はサーバー内部エラーで、コードのロジックに問題がある。503はサービスが利用不可で、過負荷かメンテナンス中かもしれない。胃薬を腸炎に使ったら、悪化するだけだろ?
実はこれが一番ひどいわけじゃない。俺の友達はもっと悲惨だった。徹夜でバグを直そうとして、どうしても原因が見つからず、最後に404だとわかった。404って何だ?リソースが存在しないってことだ。彼はページがそこにあるのに、なぜ存在しないんだと思った。結果、設定のURLにスラッシュを一つ多く入れていた。たった一つのスラッシュで、4時間も残業することになった。
だから今日これを話すのは、HTTPステータスコードは一見簡単そうに見えて、実はすごく混同しやすいってことを伝えたいからだ。例えば301と302。一つは恒久リダイレクト、もう一つは一時リダイレクト。これを逆にすると、検索エンジンのインデックスに問題が出て、アクセスがガタガタ落ちる。さらに401と403。一つはログインが必要、もう一つはアクセス禁止。403を401として処理すると、ユーザーは無限ループに陥って、どうやっても入れなくなる。
これらのステータスコードは普段は目立たないけど、いざという時は本当に命取りになる。特に本番環境で問題が起きた時、調査の方向すらわからず、当てずっぽうでやるしかない。多くの人が深夜まで残業するのは、コードが下手だからじゃなく、エラーすら理解できずに無駄に試行錯誤しているからだ。
だから提案したい。この業界でやってるなら、時間を取ってこれらのステータスコードをしっかり整理すべきだ。丸暗記する必要はないけど、少なくとも各ステータスコードが大体何を意味するか知っておいて、問題が起きた時に素早く方向を判断できるようにしよう。例えば2xxは成功、3xxはリダイレクト、4xxはクライアント側の問題、5xxはサーバー側の問題。この枠組みがあれば、細かく分けるのは簡単だ。
本当に、ステータスコードはプログラマーの「モールス信号」だ。一目で理解できれば、問題調査のスピードは倍以上になる。他の人がまだログを調べている間に、君はもう問題を特定している。それが差だ。この差を軽視してはいけない。定時で帰れるか、朝まで残業するかを決めるかもしれない。
だから次にエラーに遭遇したら、慌てずにまずステータスコードを見て、それから適切な対処をしよう。これは本当に「小さなツール、大きな効果」だ。30分かけて理解すれば、無数の残業の夜を節約できる。兄弟たち、一緒に頑張ろう。