5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby on RailsでSidekiqを使ったバックグラウンドメール送信の設定方法 | Redis活用ガイド

Posted at

背景

個人開発で、ある機能を実装していた際に、一度に約40通のメールを送信する必要がありました。通常のコントローラーでメール送信を処理すると、すべてのメール送信が完了するまでリクエストが処理され続けるため、時間がかかりすぎるという問題に直面しました。このため、ユーザーへのレスポンスを早くするためにも、メール送信をバックグラウンドで行う必要がありました。

Redisとは

Redis は、高速で軽量なデータベースとして動作するインメモリ型のデータ構造ストアです。ジョブキューの管理にも利用され、リアルタイムアプリケーションやキャッシュとして広く使われています。Sidekiq のようなバックグラウンドジョブ処理システムのキュー管理にも使用され、ジョブの順序管理やステータスを効率的に処理します。

Sidekiqとは

Sidekiq は、Ruby on Rails アプリケーションのバックグラウンドジョブを処理するためのツールです。ジョブを並列処理できるため、メール送信やファイル処理などの重いタスクを別のスレッドで非同期に実行し、パフォーマンスを向上させることができます。バックエンドとしてRedisを使用し、スムーズにジョブ管理が行えます。

設定手順

ステップ1

Gemfileに sidekiq を追加し、インストール

gem 'sidekiq'

インストール後、bundle install を実行します。

ステップ2

ActiveJobの設定を開発環境に追加 config/environments/development.rb に以下の設定を追加します。

config.active_job.queue_adapter = :sidekiq

ステップ3

メール送信のバックグラウンド設定 メール送信箇所で deliver_now を deliver_later に変更します。

User.enabled.find_each do |user|
  EventMailer.participation(user, @event).deliver_later
end

ステップ4

Redisサーバーの起動 Sidekiq は Redis を利用するため、以下のコマンドで Redis サーバーを起動します。

redis-server

ステップ5

Redis CLIで接続確認 redis-cli コマンドを使用して、Redisが正しく起動しているか確認できます。

redis-cli

ステップ6

Sidekiqの起動 Sidekiq を起動するため、以下のコマンドを実行します。

bundle exec sidekiq

バックグラウンドジョブが正常に実行されるか確認 Sidekiq のログやWebインターフェース(localhost:3000/sidekiq)でジョブの処理状況を確認できます。

まとめ

バックグラウンドでメールを送信することで、処理時間を大幅に短縮し、ユーザーへのレスポンスが速くなります。ActiveJob と Sidekiq の設定は簡単で、メール送信の負荷が大きいアプリケーションでもスムーズに動作します。

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?