0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelで500エラーや不具合が出たときに、実務で使っている原因切り分けの思考プロセス

0
Posted at

Laravelでエラー調査をする記事は多いですが、
「何をどういう順で見るべきか」という
原因切り分けの“思考プロセス”まで踏み込んだ記事はあまりありません。

私は PM/SE として、
様々なLaravel案件の不具合対応を行ってきましたが、現場では以下の2点が特に重要です。

  • 原因に辿りつくまでのスピード
  • 調査の優先順位を間違えないこと

この記事では、
「Laravelで不具合が起きたときに、どこから何を疑うのか」
という “判断軸” と “思考の順番” を整理します。

1. 最初に行うのは「原因の当たりをつけること」

エラー調査の7割は “どこが怪しいかの当たりをつける” ことで決まります。
私が実務で最初に確認するのは以下の4点です。

  • 再現条件(誰が / どの操作で / どの環境で発生するか)
  • ログが出ているかどうか(= Laravelまで来ているかどうか)
  • 本番だけか / STGでもか
  • 直近でリリース or env変更があったか

この4つの組み合わせで、原因の候補が半分に絞れます。

2. Laravelのログを確認するが、「出ていない場合」が危険

多くの調査記事は「laravel.logを見よう」で終わっていますが、
ログが出ていない場合のほうが致命的で、経験が必要です。

storage/logs/laravel.log が更新されていない場合
→ Laravel まで処理が到達していない合図

この場合、疑うポイントは以下。

  • Webサーバ(Nginx / Apache)で弾かれている
  • ルーティングが誤っていて目的の処理に到達していない
  • permissions(権限)でログが書けていない
  • php-fpm のキャッシュで古いコードが動いている
  • vendor が壊れている(本番でよくある)

ログが無い = 危険信号
これは実務経験が無いと気付けないポイントです。

3. Laravel特有の「キャッシュ残り」は毎回確認する

Laravelはキャッシュが強力ですが、
それゆえに “原因がそこじゃないのにキャッシュだけ疑う” 事故も多い。

以下は“セット”で実行するのが基本です。

php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear

とくに、

.env を変更したのに反映されない → 90%これ
.env を本番で手で変えたケース → 100%これ

キャッシュは単なる反射神経的な対処ではなく、
「キャッシュが影響している可能性があるか?」という判断基準 が必要です。

4. route:list は想像以上に強い武器

意外と軽視されがちですが、実務ではルーティングの衝突は頻発します。

php artisan route:list | grep 使いたいパス

ここで見るべきは

  • 似たパスが先に定義されていないか
  • GET/POSTが間違っていないか
  • middleware で弾かれていないか
  • 名前付きルートの上書き
  • prefix の二重定義

よくあるのは、

/items/{id}
/items/new

の順番が逆で、new に到達しないケース。

5. 衝撃的に多い「権限」と「シンボリックリンク」の問題

本番環境で“だけ”起きる不具合の原因として
permissions(権限)とシンボリックリンク がダントツに多い。

  • storage 配下に書き込み権限がない
  • deployごとに シンボリックリンク 切り替えが失敗
  • public/storage のリンクが壊れている
  • vendor ディレクトリのパーミッション違い
  • 一部だけ root で deploy してしまった

ローカルやSTGで動くのに本番だけ動かない……
この99%は 権限 です。

6. DBが原因でも「Laravel側のエラー」に見える

Laravelの例外は DBエラーを包むため、一見すると Laravelの問題に見えます。

典型例:

SQLSTATE[23000]: Integrity constraint violation

これは Laravelのせいではなく、以下を疑うべきです。

  • NOT NULL制約
  • 外部キー制約
  • 型が合っていない
  • STGと本番でテーブル構造が違う

7. 「本番だけ起きる問題」を見るときの判断軸

  • 本番だけHTTPS
  • 本番だけ .env が古い
  • PHPバージョン差
  • 本番だけ cron が動いている

「STGと本番の環境差分がどこにあるか」
これを把握していると、調査スピードが段違いになります。

まとめ:調査の“順番”と“判断基準”が最も大切

実務でLaravelを調査するときに大切なのは、
技術的な知識よりも「どこから疑うかの順番」です。

私の基本フローは以下です。

再現条件

Laravelログ

  1. ログが無い場合は Webサーバ or 権限
  2. Laravelのキャッシュ
  3. route:list
  4. DBエラー(SQLSTATE 系)
  5. 本番とSTGの環境差分
  6. デプロイ時の壊れ方(シンボリックリンク / vendor)

この順番で見ることで、調査の迷いがなくなり、
原因特定までの時間を大幅に短縮できます。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?