はじめに
LaravelとRailsは、それぞれPHPとRubyの主要なフレームワークとして知られていますが、非同期処理を扱う仕組みも強力です。Laravelのジョブとキュー、およびRailsのActive Jobの特徴を比較し、それぞれの使い方や適用例を見ていきましょう。
ジョブとキューの基本概念
ジョブとキューは、バックグラウンドで非同期処理を実行する仕組みです。例えば、メール送信や画像処理などのタスクをユーザーが待機することなく実行できます。
ジョブ:実行されるタスクの定義。
キュー:ジョブを管理し、スケジュール通りに実行するための仕組み
Laravelのジョブとキュー
基本的な仕組み
Laravelでは、キューは統合的なAPIで提供され、Queueファサードやartisanコマンドを使って操作できます。
ジョブの作成
php artisan make:job SendEmail
SendEmail
ジョブを作成すると、app/Jobs
ディレクトリにファイルが生成されます。
namespace App\Jobs;
use Mail;
class SendEmail implements ShouldQueue
{
public function __construct(private $email)
{
}
public function handle()
{
Mail::to($this->email)->send(new NotificationMail());
}
}
キューの設定
.env
ファイルで使用するキュードライバーを指定します。
例:
QUEUE_CONNECTION=database
ジョブのディスパッチ
SendEmail::dispatch('user@example.com');
キュードライバー
Laravelは複数のドライバーをサポートしています。
データベース
Redis
Amazon SQS
ワーカーの起動
artisanコマンドでワーカーを起動します。
php artisan queue:work
RailsのActive Job
基本的な仕組み
RailsではActive Jobが非同期処理を抽象化しています。バックエンドにはSidekiqやResqueなどを使用します。
ジョブの作成
rails generate job SendEmail
app/jobs/send_email_job.rb
が生成されます。
class SendEmailJob < ApplicationJob
queue_as :default
def perform(email)
UserMailer.notification_email(email).deliver_now
end
end
キューの設定
config/sidekiq.yml
やresque
などの設定ファイルを使用します。
ジョブのエンキュー
SendEmailJob.perform_later('user@example.com')
サポートするバックエンド
Sidekiq
Resque
Delayed Job
ワーカーの起動
バックエンドに応じたコマンドを実行します。
例:
bundle exec sidekiq
LaravelとRailsの比較
項目 | Laravel | Rails |
---|---|---|
ジョブの作成 | artisanコマンド | generatorコマンド |
キュードライバー | データベース、Redis、SQSなど | Sidekiq、Resqueなど |
ワーカーの起動方法 | artisan queue:work | バックエンド依存 |
コードの書き方 | PHP | Ruby |
まとめ
LaravelとRailsは、どちらも強力なジョブとキューの仕組みを提供しています。それぞれのフレームワークに慣れた開発者にとって使いやすい形に設計されています。選択する際は、プロジェクトの要件や既存のインフラに適したツールを選ぶことが重要です。