はじめに
ActiveJobを使う上での前提知識や周辺知識を深めようと思いまとめてみました。
用語の定義、メリデメ比較、スタイルガイドなどを中心に書いています。
具体的な実装方法は書いていません。
ActiveJobとは?
Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。
Rails4.2から導入されました。
用語の整理
用語 | 説明 |
---|---|
ジョブ | 端末ごとに見た一連の処理 例:定期的なクリーンアップ、請求書発行やメール配信 |
キュー | 先に入れたものを先に出すというルールのデータ構造の1つ 先入先出(FIFO)と書かれることもある |
エンキュー | キューに要素を追加すること |
デキュー | キューから要素を取り出すこと |
キューイング | キューを用いて要素の管理を行うこと |
キューイングシステム(ライブラリ) | キューを持っているシステム |
メッセージ | キューに流れるデータの1単位 |
メッセージキューイング | 異なるソフトウェア間でデータを送受信する手法の一つ 直接データを渡すのではなく一旦第三者のソフトウェアに預けることで、送信側も受信側も好きなタイミングで送受信処理をおこなうことができるようにする方式 |
参考
- 【一通りわかる】Linuxでのジョブの基本的な扱い方まとめ
- キュー (queue)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
- キュー(待ち行列)とは - IT用語辞典 e-Words
- メッセージキューイング(MQ)とは - IT用語辞典 e-Words
- ストリーム処理を支えるキューイングシステムの選び方
キューイングライブラリ(一例)
- delayed_job
- sidekiq
- Resque
ActiveJobを使う/使わない場合のメリデメ比較
ActiveJobあり | ActiveJobなし | |
---|---|---|
メリット | キューイングライブラリへの依存が減る - ライブラリ固有のコードを書かずに済む - ライブラリ変更時にビジネスロジックの書き換えが不要 |
ライブラリ固有の機能を使える(ものもある) |
デメリット | ライブラリ固有の機能が使えない | ライブラリ変更時にコードの修正範囲が広い |
参考
リリースノート
- Ruby on Rails 4.2 リリースノート - Railsガイド
- Ruby on Rails 5.0 リリースノート - Railsガイド
- Ruby on Rails 5.1 リリースノート - Railsガイド
- Ruby on Rails 5.2 リリースノート - Railsガイド
- Ruby on Rails 6.0 リリースノート - Railsガイド
スタイルガイド
Rails: Active Jobスタイルガイド(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社
※ 以下のリストは、実装・レビュー時にチェックしやすいように、スタイルガイドの項目を質問文に言い換えたものです
- 引数に(idではなく)ActiveRecordモデルを渡しているか?
- 引数を破壊的に変更していないか? 処理待ちのジョブがキューに残っていないか?
- 引数は十分少ないか?
- タスクの緊急度に応じたキューを指定しているか?
- 重い処理や緊急でない処理を、緊急性の高いキューに入れていないか?
- 優先度の高いキューを通常(の優先度)のキューに入れていないか?
- 冪等性は保証されているか? あるいは許容できる理由はあるか?
- デプロイ中にジョブが実行されても問題ないか?
- 原子性は保証(成功 or 何もしないように実装)されているか?
- ジョブ中で(利用厳禁である)スレッドを使っていないか?
- ジョブのリトライメカニズムを(隠蔽・切り出しせず)ジョブ中に書いているか?
- バッチ処理にリトライは付いているか?
- トランザクションのコミットが完了したジョブのみキューに入れているか?
- ビジネスロジックをジョブ中に書いていないか?