はじめに
こんにちは、Webエンジニアの岩田史門(@SI_Monxy)です!
今回はLaravelのジョブとキューを使った非同期処理の実装について記事を書いてみました!
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです!
概要
Laravelはジョブとキューを利用することで、非同期処理を簡単に実装することができます。このガイドでは、ジョブとキューの基本的な概念から、具体的な実装方法、そして実際のサンプルコードまでを紹介します。
ジョブとキューの概要
ジョブとキューは、バックグラウンドで実行する処理を管理するための仕組みです。ジョブは特定のタスクを定義するクラスであり、キューはこれらのジョブを順次実行するための仕組みです。
ジョブ (Job): 実行するタスクを定義するクラス。
キュー (Queue): ジョブを管理し、バックグラウンドで実行するためのシステム。
非同期処理を利用することで、ウェブアプリケーションのレスポンスを高速化し、ユーザー体験を向上させることができます。
Laravelプロジェクトのセットアップ
まず、Laravelプロジェクトを新規に作成します。
composer create-project --prefer-dist laravel/laravel queue-example
cd queue-example
次に、データベースの接続設定を.envファイルに記載します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=queue_example
DB_USERNAME=root
DB_PASSWORD=
ジョブの作成
ジョブを作成するには、make:jobコマンドを使用します。
php artisan make:job ExampleJob
作成されたapp/Jobs/ExampleJob.phpを開き、handleメソッドに実行したいタスクを記述します。
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ExampleJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
// コンストラクタで必要なデータを渡すことができます
}
public function handle()
{
// ジョブの具体的な処理をここに記述します
\Log::info('ExampleJob is being processed');
}
}
キューの設定
次に、キューの設定を行います。Laravelは複数のキュー接続をサポートしていますが、ここではデフォルトのデータベースキューを使用します。
まず、キューのテーブルをマイグレーションします。
php artisan queue:table
php artisan migrate
次に、.envファイルでキューの接続設定を行います。
QUEUE_CONNECTION=database
キューの使用例
ジョブをキューに投入する方法は以下の通りです。例えば、コントローラーからジョブをディスパッチします。
namespace App\Http\Controllers;
use App\Jobs\ExampleJob;
use Illuminate\Http\Request;
class JobController extends Controller
{
public function dispatchJob()
{
ExampleJob::dispatch();
return response()->json(['message' => 'Job dispatched']);
}
}
キューの監視と管理
キューを処理するワーカーを起動するには、以下のコマンドを実行します。
php artisan queue:work
このコマンドを実行することで、キューに投入されたジョブが順次実行されます。
キューの監視や管理にはhorizonパッケージを利用することもできます。horizonはキューのモニタリングや管理機能を提供します。
composer require laravel/horizon
php artisan horizon:install
php artisan migrate
php artisan horizon