🤔

ジョブとバッチの違いを調べてみた

2024/07/24に公開

イントロダクション

ある日、Rails でジョブを使った非同期処理を実装していたところ、ふとジョブとバッチの違いや使い分けがよくわかっていないことに気づいたので、詳しく調べてみることにしました。

ジョブとは

ジョブは「ユーザーがコンピュータに依頼する仕事の単位」とのこと。

具体的には、一連のタスクや処理をまとめたもので、ユーザーの要求や特定のイベントが発生した際に実行する処理のことを指すようです。

Rails では、Active Job を利用してジョブを定義し、非同期で実行できます。
これにより、メールの送信やデータベースのバックアップ、計算の重い処理などをバックグラウンドで処理することが可能です。

https://railsguides.jp/active_job_basics.html

バッチとは

バッチは「一連のタスクをまとめて一度に処理する方式」とのこと。

一般的には、あらかじめ定められたスケジュールに基づいて自動的に実行される処理のことを指すようです。

バッチはデータベースの定期的なクリーンアップやレポートの生成、大量データの処理など、大量のデータやタスクをまとめて処理するのに適しているようです。

ジョブとバッチの主な違い

実行タイミング

  • ジョブ:
    • ユーザーの要求や特定のイベントが発生した際に即時実行される。
  • バッチ:
    • あらかじめ定められたスケジュールに基づいて自動的に実行される。

ユースケース

  • ジョブ:
    • メール送信や通知など、ユーザーの操作や特定のイベントに応じて非同期で実行する処理に適している。
  • バッチ:
    • 例えば「1 日に 1 回実施する必要があるレポートの生成処理や集計処理」のように、ユーザーの操作に関係なく定期的に実行する必要がある処理に適している。

まとめ

これまで、Active Job を用いたジョブの処理とバッチ処理を一括りに「非同期処理」と表現していましたが、今後はジョブの処理を「非同期処理」と表現し、バッチ処理とは区別して扱おうと思います。

また、それぞれの特徴やユースケースを知れたことで、今後のシステム設計や実装方針を検討する際に、最適な手法を選択できそうです。

GitHubで編集を提案

Discussion