0Pricing
PHP Academy · レッスン

ジョブの作成とディスパッチ

Artisanでジョブクラスを生成し、コントローラーからディスパッチします

「ジョブの作成とディスパッチ」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

ジョブとは

ジョブは、キューに入れる処理の1単位をカプセル化したPHPクラスです。各ジョブはhandle()を実装し、キューワーカーがこのメソッドを呼び出してタスクを実行します。

ジョブの生成

Artisanを使用してジョブクラスを作成します。--queueフラグを付けるとキューに入れられるジョブになります(デフォルト)。

$ php artisan make:job SendWelcomeEmail

ジョブクラスの構造

ジョブにはhandle()メソッドがあり、コンストラクターを通じてデータを受け取れます。

<?php
namespace App\Jobs;

use App\Models\User;
use App\Mail\WelcomeEmail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\SerializesModels;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, Queueable, SerializesModels;

    public function __construct(private User $user) {}

    public function handle(): void
    {
        Mail::to($this->user)->send(new WelcomeEmail($this->user));
    }
}

ジョブのディスパッチ

アプリケーション内のどこからでもジョブをディスパッチできます。

<?php
// Dispatch to queue:
SendWelcomeEmail::dispatch($user);

// Dispatch with delay:
SendWelcomeEmail::dispatch($user)->delay(now()->addMinutes(10));

// Dispatch synchronously (bypass queue):
SendWelcomeEmail::dispatchSync($user);

ディスパッチヘルパー

dispatch()グローバルヘルパーも使用できます。

<?php
dispatch(new SendWelcomeEmail($user))
    ->onQueue("emails")
    ->delay(now()->addHour());

onQueue()

ディスパッチ時に、特定の名前付きキューを指定します。

<?php
SendWelcomeEmail::dispatch($user)->onQueue("emails");

onConnection()

特定のキュー接続を指定します(あるジョブにはSQS、別のジョブにはRedisを指定するなど)。

<?php
SendWelcomeEmail::dispatch($user)->onConnection("sqs");

モデルのシリアライズ

SerializesModelsトレイトにより、ジョブに渡されたEloquentモデルはIDでシリアライズされ、ワーカーによってデータベースから再取得されます。これにより、古いデータの使用を防げます。

afterResponse()

HTTPレスポンスをユーザーに送信した後にジョブをディスパッチします。ユーザーはディスパッチのオーバーヘッドを待つ必要がありません。

<?php
App::terminating(fn () => SendWelcomeEmail::dispatch($user));

ジョブのテスト

テストでQueue::fake()を使用すると、ジョブを実際には実行せずにディスパッチされたことを検証できます。

<?php
Queue::fake();
$this->post("/register", $data);
Queue::assertPushed(SendWelcomeEmail::class);

一意なジョブ

ShouldBeUniqueを実装すると、同じデータに対する重複ジョブがキューに溜まるのを防げます。

概要

Artisanでジョブを生成します。ShouldQueueとhandle()を実装し、::dispatch()でディスパッチします。onQueue()でキューを指定し、Queue::fake()でテストします。

クイックチェック

ジョブクラスをキューに入れられるようにするインターフェースはどれですか?

よくある質問

「ジョブの作成とディスパッチ」レッスンは無料ですか?

はい。「ジョブの作成とディスパッチ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「ジョブの作成とディスパッチ」で何を学びますか?

Artisanでジョブクラスを生成し、コントローラーからディスパッチします ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ジョブの作成とディスパッチ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. キューの概念とドライバー
  2. ジョブの作成とディスパッチ
  3. ジョブのリトライ、遅延、チェーン
  4. Laravel Horizonでキューを監視する
← PHP Academyに戻る