0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Queue を使ってみよう

Last updated at Posted at 2024-01-05

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は、さまざまなシナリオで使用される。例えば、プリンタのタスク管理、コールセンターの呼び出し管理、オペレーティングシステムのプロセス管理などがある。仕組みを理解して、プロダクトの実装に落とし込んでいきた。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?