【Rails】Active JobとWheneverでスクレイピングを自動化(#1 Active Jobの仕組み)

更新日:

プログラミング初心者の勉強ブログ #65

Railsの「Active Job」を使って、スクレイピングを自動化させてみようと思います。「スクレイピングを実行後、その内容をデータベースに保存する」Jobをコーディングし、Job管理テーブルにコーディングしたJobを登録する流れを解説します。今回はActive Jobの仕組みについてです。

 

目次

 

Active Jobとは

Active Jobの流れ

まずはじめに、Active Jobとは何かについて確認します。

定義を確認

Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。これらのジョブでは、定期的なクリーンアップを始めとして、請求書発行やメール配信など、どんなことでも実行できます。これらのジョブをより細かな作業単位に分割して並列実行することもできます。

Active Job の基礎 | Rails ガイド

Active Jobは、Rails 4.2以降で導入されているもので、これを利用すると、バックグラウンドでバッチ処理(定期処理)を実行することができます。

Active Jobは非同期処理を行うため、用途は今回の定期的なバッチ処理だけでなく、むしろ本来は、メール送信などの実行速度の遅い処理を、フロントエンドの実行タイミングと別で行い、ブラウザへの応答速度を上げ、UXの向上を図る際に使用するとのことです。

 

Active Jobを使用する理由

もともと、バックグラウンドで非同期にJobを実行してくれるgemが存在しており、具体的には、

  • Sidekiq
  • Resque
  • Delayed Job

の3つが存在します。(他にもあるかもしれません。)

これらのgemを使用すれば、Active Jobを利用しなくても同じようなことができます。

また、Active Jobを利用する場合も、これらのgemのどれかをインストールして使用することになります。

 

ではなぜ、わざわざActive Jobを使う必要があるのかという話になりますが、Active Jobは「Rails内でのJob管理のインフラ的存在」として用いるメリットが存在するためです。

 

上記のgemを直接使用した場合、当たり前ですが、それぞれ使い方が異なります。Active Jobを介せば、それらのgem毎の仕様の差異を、開発者が意識することなくJob設定を行うことができます。

そういったわけで、今回はActive Jobの練習も兼ねて、こちらでバッチ処理を実装していこうと思います。

 

まあ文章を読んだだけではよくわからないので、以下に「Active Jobが行う処理の流れ」をまとめ、Active Jobについて理解していきます。

 

Active Jobが行う処理の流れ

Actibe Jobの仕組み

 

コーディングの前に、Active Jobの処理の流れを簡単にまとめます。イメージとしては、「Job管理テーブル」というタスク管理表があり、「ワーカー」がそのタスク管理表を定期的にチェックし、エンキューされて溜まったJobを発見し、実行命令を出す、といった流れです。Job設定ファイルは実際のJobの内容が書き込まれたファイルです。

 

1、Job管理テーブルにJobが溜まる

Jobを実行するにあたって、参照されるのが「Job管理テーブル」と呼ばれるものです。このテーブルに格納された情報をもとに、Jobが実行される仕組みです。

指定のタイミングでJobを「Job管理テーブル」に登録していくことで、定期処理を行います。

またJobは、「キュー」の概念で溜まるので、、「Job管理テーブルにJobを登録する」ことを「エンキュー」と呼ばれております。

エンキューされたJobは、Job管理テーブルのレコードとなり、実行されるのを待ちます。

 

キューの概念

 

2、ワーカーがJob管理テーブルを定期巡回

Active Jobでは、「ワーカー」なるものがJob管理テーブルを巡回します。仕事が溜まっていないか数秒ごとにチェックするのがワーカーの役割です。

まだ処理が行われていないJobをワーカーが発見すると、ワーカーはJob管理テーブルに対しSQLでクエリを発行し、Jobが実行されます。

また、本番環境ではgemの「daemons」がワーカーの役割となります。

Github daemons

ワーカーの役割

 

3、Job設定ファイルの参照

実際のjob内容を書き込むのが「Job設定ファイル」です。Job管理テーブルは「タスク管理表」のような役割であるのに対し、Job設定ファイルは、仕事の「マニュアル」のようなイメージです。

ですので、実際のメソッドのコーディング等はJob設定ファイルで行います。

Job設定ファイル

 

ざっくり言うと、以上の流れでActive Jobは実行されていきます。この流れを掴まないと、設定の段階で何だかよくわからなくなります。

 

まとめ

今回はActive Jobについてまとめました。次回からはこれらを用いて、定期実行するスクレイピングの自動化を行い、データベースに保存するコーディングをしていきたいと思います。

以上ありがとうございました。

 

※続きはこちら

-プログラミング学習
-, ,

Copyright© s u p ? , 2019 All Rights Reserved.