8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Rails]sidekiq-scheduler使ってみた!ついでにEventBridgeとの使い分けも考えてみる

8
Last updated at Posted at 2025-07-07

はじめに

現在携わっているプロジェクトでは、AWSのEventBridgeを用いたイベント駆動型アプリケーションの開発を行っています。
EventBridgeめっちゃ便利やなあーと思いつつ、「これアプリケーション内でスケジュール管理完結できたりしないのか?そもそもインフラ側から制御することのメリットってなんだ?」といった感じで疑問が頭から湧いてきたわけです。
なので、そんな疑問を自己解決しようという試みでこの記事を書くに至りました。

アプリケーション内でスケジュール管理を行うには

結論、バキバキに実現可能でした^_^
手段は様々あるようですが、今回は面白そうなのでsidekiq-schedulerを用いた方法を試してみようと思います。

sidekiq-schedulerとは

sidekiq-scheduler は、Railsで非同期処理を実行する Sidekiq に、cron形式の定期ジョブ機能を追加する拡張ライブラリです。

OSのcronではなく、Rubyプロセス内でスケジューリングが完結するのがポイント。

👍 特徴まとめ

  • cronライクな表記でジョブを定期実行
  • Sidekiq Web UI から状態確認・手動実行が可能
  • OSのcronに依存しないので環境に左右されにくい

公式YARDドキュメント

実際に動かしてみる

Gemfileに追加

Gemfile
gem 'sidekiq-scheduler'

Jobを作成

app/jobs/greek_job.rb
class GreekJob
  include Sidekiq::Job
  def perform
    puts "Sidekiqスケジューラが起動しました: #{Time.current}"
    puts "Hello!"
  end
end

スケジュール定義(YAML)

config/sidekiq.yml
:schedule:
  greek_job:
    cron: '*/5 * * * *' # 5分ごとに実行
    class: GreekJob

基本的にはこれだけで動くようです。実際にローカルで動かしてみましょう。
image.png

おお、確かに5分ごとに動いてる、、すげえ

routes.rbに以下を加え、http://localhost:3000/sidekiq へアクセスすると、Sidekiq Web UIにアクセスできます。

config/routes.rb
require 'sidekiq/web'
require 'sidekiq-scheduler/web'

authenticate :admin do
 mount Sidekiq::Web => '/sidekiq'
end

image.png
おお、確かにスケジューリングされていますね。
この画面から手動でジョブを実行したり、無効化したりすることができます。楽しい。

じゃあアプリケーションとインフラ、どっちでイベント管理すればいいんや

このように、アプリケーション内でイベント制御が可能なわけですが、この方法と、EventBridge等を用いたインフラ側からの制御、どのように使い分けるべきなんでしょうか?
観点別にAIに聞いてみました。

観点 アプリ内(Sidekiqなど) インフラ側(EventBridgeなど)
導入の手軽さ ◎ Rails内で完結し導入しやすい △ AWSリソースや設定が必要
サービス連携 △ 同一アプリケーション内に限られる ◎ Lambda, SQS, SaaSなどと疎結合に連携できる
スケーラビリティ △ Sidekiqサーバー台数に依存 ◎ サーバレスで自動スケール可能
再試行・エラーハンドリング △ 自前でリトライ設計が必要 ◎ DLQやリトライポリシーが使える
モニタリング ◎ Sidekiq Web UIが使える ◎ CloudWatchやEventBusの可視化が可能

小規模〜中規模のアプリケーションで、処理がアプリ内で完結しているようなケースでは、Sidekiqなどを使ってアプリ側でスケジュール管理する方がシンプルで効率的だと感じました。
一方で、複数のサービスと連携したり、高い信頼性やスケーラビリティが求められるような場合は、EventBridgeのようなインフラ側の仕組みを活用するのが適していると思います。

今回開発しているプロダクトについても、スケーラビリティや信頼性、運用面での効率性を考慮すると、やはりEventBridgeを採用するのが妥当だよなあ〜と改めて感じました。

これは納得( ͡° ͜ʖ ͡°)

おわりに

ここまでお読みいただきありがとうございました。
選択肢がいくつもある中で、実際に比較しながら検討してみることで、納得感のある判断ができるのだと改めて感じました。

8
0
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
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?