重い処理を後ろに回す
画面のリクエストの中で全部をやると、利用者はその間ずっと待ちます。時間のかかる仕事は、キューに入れて裏で動かします。入口は性能とスケール「重い処理は裏に回す」にあります。ここでは、一段深く見ます。
どこで動かす? 考え方のヒント
勤怠のアプリの 8 つの仕事です(作り物)。その場で・キューで・定期処理で、のどれで動かすかを選んでください。
キュー・ワーカー・ジョブ
ジョブは、入れる → 待つ → 取り出す → 成功なら消える・失敗なら待ってやり直す → 回数を超えたら「失敗したジョブ」、と進みます。下のシミュレーターで、数を変えて流してみてください。
言葉
キューを流してみる 考え方のヒント
承認の知らせを、外のサービスに送るジョブだとします。ワーカーの数・失敗の割合・やり直しの回数と待ち時間を変えると、終わるまでの時間と、失敗したジョブの数が変わります。
Laravel のキュー
Laravel 13 では、ジョブのクラスに属性(#[Tries] など)で、回数や待ち時間を書きます。ジョブのクラスを置く場所はLaravel「どこに何を書くか」にあります。コードは Laravel 13・PHP 8.4・MySQL 8.4 で動かして確かめました(給与システムは作り物)。
ドライバーを選ぶ
よく使うコマンド
前の版の書き方(古い記事や AI の答え)
2 回動いても大丈夫に(冪等)
キューのジョブは、2 回動くことがあります。何回動いても結果が同じ(冪等)になるように作ります。言葉はWeb の仕組み「HTTP のやりとり」に、決済の冪等キーはよくある機能の作り方「決済の二重払いを防ぐ」にあります。
2 回動くのは、こんなとき
作り方
2 回動いたら、どうなる? 考え方のヒント
ジョブの中の 1 行です(作り物)。このジョブが 2 回動いたら、どうなるかを選んでください。
たくさんの処理(バッチとチェーン)
月末の締めで、全員分の勤怠を集計して CSV を作る例です。1 つのジョブで全員を処理すると長くかかり、途中で失敗すると最初からになります。小さく分けて、バッチとチェーンでつなぎます。
失敗したら、どうなる?
A・B・C の 3 つのジョブをつなぎます。形と、B が失敗するかを選ぶと、どのジョブが動き、どのコールバックが呼ばれるかが変わります。
定期処理(スケジューラーと cron)
「毎晩 2 時」「毎月 1 日」のように、時刻で動かす仕事です。基本はよくある機能の作り方「定期処理」に、cron の読み方の道具は「cron の読み方を試す」にあります。ここでは、キューとの関係と、重なり・台数を見ます。
前の回と重なったら かかる時間は作り物です
サーバーが何台もあったら
動かし続ける(ワーカーの運用)
ワーカーは、ずっと動き続けるプロセスです。止まったら起こし直す仕組み、デプロイのあとの入れ替え、詰まりと失敗の見張りが要ります。障害のときの動き方は運用「障害対応」にあります。
デプロイのあとに
時間の設定を確かめる
4 つの秒数を入れるか、例を押してください。合わない組み合わせだと、何が起きるかが出ます。
AI 時代AI の API とキュー
AI の API は、遅く、回数の上限があり、使った分だけ料金がかかります。キューで裏に回し、やり直しで二重に払わない作りにします。AI に書かせたジョブのコードも、見るところを決めておきます。
AI が書いたジョブを読む 考え方のヒント
見つけた問題
チェックリスト
キューを使う機能を作ったら、確かめたものにチェックを付けてください(この端末にだけ保存されます)。考え方のヒント