Queue
この単語を最近聞くようになり、用語として扱えていない、理解していない部分があるので、まとめておく。
Queue とは
Queue(キュー)は、コンピュータサイエンスにおいて非常に重要なデータ構造の一つ。Queueは、FIFO(First-In-First-Out)の原則に基づいて動作するコレクションのこと。
これは、最初に追加された要素が最初に取り出される。Queueは、日常生活で行列に並ぶことに似ている。最初に並んだ人が最初にサービスを受けるのと同じというイメージがいいか。
主な操作は以下の通り
Enqueue: Queueの末尾に要素を追加します。
Dequeue: Queueの先頭から要素を取り出し、それを返します。
Peek/Front: Queueの先頭の要素を見ますが、それをQueueから取り除きません。
IsEmpty: Queueが空かどうかを確認します。
Laravelで扱う時の例
Laravelでも、Queueを使って非同期タスクを処理することができる。これは、メール送信、データベースの大量のデータ処理、遅延API呼び出しなど、時間がかかる処理をバックグラウンドで実行するのに役立つ。LaravelのQueueシステムは、アプリケーションのパフォーマンスを向上させ、ユーザーエクスペリエンスを改善するのに非常に有効である。
Queueの設定
.env ファイルでQueueドライバーを設定できる。
Laravelは、sync、database、beanstalkd、sqs、redis、nullなど、複数のドライバーをサポートしている。
Jobクラスの作成
Queueで実行するタスクは、Jobクラスとして定義される。メール送信のjobを例に考えてみる。
php artisan make:job SendWelcomeEmail
namespace App\Jobs;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
// メール送信のロジック
}
}
Jobのディスパッチ
作成したJobをQueueに追加するには、dispatch メソッドを使用。
Modelクラスやcontrollerクラスで使用することが多い。
SendWelcomeEmail::dispatch($user);
Queueの実行
php artisan queue:work
例えば、ユーザー登録後にウェルカムメールを送信する場合、ウェルカムメールの送信をJobとしてQueueに追加し、バックグラウンドで処理することができる。
まとめ
Queueは、さまざまなシナリオで使用される。例えば、プリンタのタスク管理、コールセンターの呼び出し管理、オペレーティングシステムのプロセス管理などがある。仕組みを理解して、プロダクトの実装に落とし込んでいきた。