👋

[Laravel]レンジで最後の10秒が待てないあなたに、非同期の勧め

2024/05/25に公開

非同期ってなんだ

レンジで最後の10秒が待てないこの記事を読んでいるあなた。そう、そこのあなた。突っ立ってるままじゃ厳しいって。自分から動けって。非同期しろって。(ジョージ)
導入はさておき、非同期とは何か反応を待たずに行動することです。チラッと聞いたことあるもののその具体的な実装方法は知らなかったので、今回は実装方法を見ながら自分が今作成中のLinebotと交えて書いていこうと思います。

ジョブとキューという概念

非同期処理の実装方法にはいろいろなものがあります。今回はジョブキューという概念を使っていきたいと思います。(調べた感じ多分一番手軽)
ジョブとはやらなきゃいけないもののことで、キューはそれが溜まっている箱のイメージです。前は急げでさっそく試していきやいと思います。

準備

まずはキューとなるテーブルを作成
php artisan queue:table

ジョブを作成
php artisan make:job NanikanoJob

ジョブ登録専用のプロバイダーを作成
php artisan make:provider JobServiceProvider

これで、先のキュー、ジョブができました。

プロバイダーの以下の部分にジョブを追加
public function register(): void
{
//
this->app->bindMethod(SendStatusJob::class.'@handle', function(job, $app) {
return $job->handle();
});
}

あとはジョブファイルのhandle()部分に非同期で行ってほしい処理を書きます。私は、作成中のLinebotに「非同期で処理」という文字が送られてきたら、

  1. 非同期処理を開始したよ
  2. 非同期処理中だよ
  3. 非同期処理が終了したよ

と送る処理をここに書きました。
最後に、非同期を行いたい部分に
NanikanoJobJob::dispatch();
return response('非同期します', 200);
こんな感じで書けば準備OK

レンジの終わりを待たない世界へ

実際に試してみようと思います。
前提として、「非同期で処理」と送られたら非同期処理をしている、それ以外の文字列が送られたらおうむ返しする、という仕様になっています。

伝わりますでしょうか?非同期処理中に、「おーいにおうむ返しをする」、という非同期とは違う処理が走っているけど、非同期処理はとまらずに行われ、おうむ返しも非同期処理の終了を待たずに行われています。これこそ非同期、、!!レンジのチンを待つ間にもできることはあるのです。最後の10秒が長いなーなんて言ってる暇あったらあなたの床に落ちているホコリの一つでも片付けるのです!!

ちなみに私は、これからも最後の10秒待たずにレンジを止めます。

Discussion