紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Rubyもくもく会】Saitama.rb#25 に参加して Shoryuken gemやActiveJobについて学びました

f:id:yokoyantech:20200119155806p:plain

はじめに

1月18日に開催された Saitama.rb#25 に参加してきました。

Saitama.rb とは

埼玉に住んでいるRubyistのコミュニティです。詳細は以下をご覧ください。

saitamarb.connpass.com

参加した感想

自分以外の人がいる状態のもくもく会は非常に集中できる環境だと感じています。家の外で集中して勉強できる場があるのはとても有難いです。 10年以上Railsに携わっている方から、現在Rubyを学習中の方まで幅広い参加者がいらっしゃいました。

もくもく会の成果

今回は Shoryuken gemの検証や、ActiveJob、ActionMailer の仕様について深く学ぶことができました。

Shoryuken gem

github.com

ActiveJobのperform_laterとperform_nowの違い

(perform_laterは)ジョブをキューに入れ、キューが空き次第ジョブを実行する。(To enqueue a job to be performed as soon as the queuing system is free) (perform_nowは)キューに入ることなく即座に実行される。(A job can also be processed immediately without sending to the queue) もう少し簡単にいうと、perform_laterは非同期的に実行され、perform_nowは同期的に実行されます

qiita.com

ActionMailerのdeliver_laterとdeliverの違い

deliver_later

edgeapi.rubyonrails.org

Active Jobを介して配信される電子メールをキューに入れます。 ジョブを実行すると、deliver_now を使用して電子メールが送信されます。

やってみたいこと

  • Railsアプリのメール送信処理を非同期にしたい
  • ActiveJobのキューはAWS SQSを使ってみたい
  • 図にするとこんな感じ?

f:id:yokoyantech:20200119155701p:plain

非同期処理後にメールを送信する際の実装イメージ

  • このケースは、非同期処理後にメールを送る場合
      • 業務アプリのバックアップ取得後にメールを送る
      • なにかのデータを集計後にメールを送る
  • RailsアプリからActiveJobをSQSにキュー登録
class hogeController < ApplicationController
  def index
    HelloJob.perform_later
  end
  • Shoryuken workerがSQSのキューをポーリング
  • Shoryuken workerがActiveJobを実行
  • SESからメール送信
class HelloJob < ActiveJob::Base
  queue_as 'hello'
  def perform
    ApplicationMailer.welcom_email.deliver_later
  end

非同期でメールを送りたいだけならこれでOK

  • RailsのControllerからメール送信のActiveJobをSQSにキュー登録
class hogeController < ApplicationController
  def index  
    # Active Jobを使用して後でメール送信したい場合は#deliver_laterを使用
    ApplicationMailer.welcom_email.deliver_later
    # 内部的には、ActionMailer::DeliveryJobが動く
    # DeliveryJob.perform_later
  end
end
  • Shoryuken workerがSQSのキューをポーリング
  • Shoryuken workerがActiveJobを実行

まとめ

主催していただいたタケユーウェブの竹内さんに感謝です。いつもありがとうございます! 次回はメタプログラミングRubyの学習で参加したいと思います。