第10回: HorizonでQueue監視 — 「ジョブが溢れている」に気づくのは障害から何分後ですか?
Queueのワーカーが死んでジョブが溢れている状態で、ユーザーから「メールが来ない」と見つかるまで数分かかることがあります。Laravel Horizonは、Queueの状態をリアルタイムで見るダッシュボードを提供し、そうした盲点を排除します。
Month
Queueのワーカーが死んでジョブが溢れている状態で、ユーザーから「メールが来ない」と見つかるまで数分かかることがあります。Laravel Horizonは、Queueの状態をリアルタイムで見るダッシュボードを提供し、そうした盲点を排除します。
外部APIへの接続が一時的に失敗したとき、ジョブがそのまま消えてしまう――これはジョブの 失敗設計がない 状態で起きる定番の事故です。「たまに失敗する」と「常に失敗する」の間にある状態を放置すると、運用後に大きな手戻りを召います。
「ログインしているのに自分の記事が削除できてしまった」「管理者のみ操作できるはずなのに他のユーザーも操作できた」――認可の実装漏れは進次的なセキュリティリスクを生みます。
「一覧画面を開くたびに遅い」「本番だとタイムアウトする」――注意してログを見ると、発行されているSQLが数百件、なんてことがあります。これがN+1問題です。「記事数だけSQLが発行される」状態で、テーブルが増えるほど効果が大きくなります。
APIレスポンスの形式がエンドポイントごとに微妙に差い、フロントエンドの頓いが増える――この問題は、レスポンス整形ロジックが Controllerやモデルに散らばっている ことから生まれます。
$request->validate([…]) が100行を越えている、あるいは条件付きルールや配列バリデーションがヨリにたってくる――Controllerの記述が膨らんできたとき、Form Requestがその解決策です。
Route::get(‘/posts/{id}/comments/{cid}’, …) のようなルートがファイル中に散らばっていないでしょうか?ルート定義とControllerが糸引っ張り合いの状態になると、新しいエンドポイントを追加するたびに全体を見回す必要が出てきます。
「認証ミドルウェアを設定したはずなのに、なぜかAPIが素通りする」「ログが二重に出力される」――こうした不具合の多くは、ミドルウェアの 順序や適用範囲の誤解 から生まれます。
プロジェクトが成長するにつれて、AppServiceProvider の register() がどんどん膨らんでいく――これは多くのLaravelプロジェクトで起きる「初期化処理の肥大化」です。依存登録・イベント購読・ポリシー登録が一か所に混在すると、変更のたびに影響範囲が読め…
app(PaymentGateway::class) と書くだけで、設定ファイルも書かず、new もせずにオブジェクトが降ってくる。これはなぜでしょうか?Laravelを深く使うほど「どこで何が解決されているのか」が分からなくなる瞬間が来ます。サービスコンテナを理解すると、その霧…