2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ActiveJobと周辺知識についてまとめてみた

Posted at

はじめに

ActiveJobを使う上での前提知識や周辺知識を深めようと思いまとめてみました。
用語の定義、メリデメ比較、スタイルガイドなどを中心に書いています。
具体的な実装方法は書いていません。

ActiveJobとは?

Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。
Rails4.2から導入されました。

cf. Active Job の基礎 - Railsガイド

用語の整理

用語 説明
ジョブ 端末ごとに見た一連の処理
例:定期的なクリーンアップ、請求書発行やメール配信
キュー 先に入れたものを先に出すというルールのデータ構造の1つ
先入先出(FIFO)と書かれることもある
エンキュー キューに要素を追加すること
デキュー キューから要素を取り出すこと
キューイング キューを用いて要素の管理を行うこと
キューイングシステム(ライブラリ) キューを持っているシステム
メッセージ キューに流れるデータの1単位
メッセージキューイング 異なるソフトウェア間でデータを送受信する手法の一つ
直接データを渡すのではなく一旦第三者のソフトウェアに預けることで、送信側も受信側も好きなタイミングで送受信処理をおこなうことができるようにする方式

参考

キューイングライブラリ(一例)

  • delayed_job
  • sidekiq
  • Resque

ActiveJobを使う/使わない場合のメリデメ比較

ActiveJobあり ActiveJobなし
メリット キューイングライブラリへの依存が減る
- ライブラリ固有のコードを書かずに済む
- ライブラリ変更時にビジネスロジックの書き換えが不要
ライブラリ固有の機能を使える(ものもある)
デメリット ライブラリ固有の機能が使えない ライブラリ変更時にコードの修正範囲が広い

参考

リリースノート

スタイルガイド

Rails: Active Jobスタイルガイド(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

※ 以下のリストは、実装・レビュー時にチェックしやすいように、スタイルガイドの項目を質問文に言い換えたものです

  • 引数に(idではなく)ActiveRecordモデルを渡しているか?
  • 引数を破壊的に変更していないか? 処理待ちのジョブがキューに残っていないか?
  • 引数は十分少ないか?
  • タスクの緊急度に応じたキューを指定しているか?
  • 重い処理や緊急でない処理を、緊急性の高いキューに入れていないか?
  • 優先度の高いキューを通常(の優先度)のキューに入れていないか?
  • 冪等性は保証されているか? あるいは許容できる理由はあるか?
  • デプロイ中にジョブが実行されても問題ないか?
  • 原子性は保証(成功 or 何もしないように実装)されているか?
  • ジョブ中で(利用厳禁である)スレッドを使っていないか?
  • ジョブのリトライメカニズムを(隠蔽・切り出しせず)ジョブ中に書いているか?
  • バッチ処理にリトライは付いているか?
  • トランザクションのコミットが完了したジョブのみキューに入れているか?
  • ビジネスロジックをジョブ中に書いていないか?
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?