プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「Active Job」でジョブを非同期実行する。(Side…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「Active Job」でジョブを非同期実行する。(Sidekiq)

12.07

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Active Jobとは?

Rails4.2から使えるようになりました。バックグラウンドジョブを共通的なインターフェースを使う仕組みです。ジョブをメモリに保持するためのキューイングの枠組を提供してくれます。(RailsのプロセスにキューイングしているのでRailsを再起動すると現在キューイングしているジョブは全て失われてしまうので注意が必要になります。)

ただ、実際に現場でよく行われている非同期処理はActive Jobだけでは行うことはできません。下記のようなバックグラウンドジョブ動かすためのツールをActive Jobと合わせて使う必要があります。

  • Sidekiq
  • Resque
  • DelayedJob

Sidekiqについて

複数のジョブをキュー管理して並列で実行できます。デフォルトで最大25個のジョブを並列で実行可能で設定を増減できます。マシンがクラッシュする可能性があるので最大50個までにするよう指定があります。

非同期処理ツール(Sidekiq)の導入

Gemfileに下記の記述を追加します。

1
gem 'sidekiq'

bundleします。

1
bundle

下記コマンドでsidekiqを起動します。

1
bundle exec sidekiq

config/environments/development.rbに下記記述を追加します。

1
config.active_job.queue_adapter = :sidekiq

Redisを導入する。

SidekiqはRedisというDBをデフォルトで使用しているのでSidekiqによる非同期処理を行いたい場合は必ず導入する必要があります。

1
brew install redis

redisの起動

1
redis-server

ジョブを作成する。

下記コマンドでジョブが作成されます。

1
rails g job ジョブ名

すると非同期に実行したい処理を「app/jobs/ジョブ名_job.rb」というファイルが自動生成されるのでここのperformメソッド内部に非同期で実行したい処理を記述をすることになります。

コントローラー側

上記のジョブを非同期で呼び出すメソッドを記述します。

ジョブをキューに登録する。

1
ジョブ名Jobクラス.perform_later

ジョブの実行を予約します。ただジョブの登録を行うだけでジョブの開始や完了を待つことはないです。他タスクで忙しくない等、処理が実行可能になったらバックグラウンドで処理が可能になります。

日時を指定して実行する。

1
ジョブ名Jobクラス.set(実行したい日時).perform_later

スポンサーリンク
  • 2019 12.07
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.24

    【Ruby on Rails】「rake」について

  2. 2020 12.12

    【Ruby on Rails】「プレゼンター(デコレーター)」について

  3. 2020 03.28

    【Ruby on Rails】「Flashメッセージ」について

  4. 2019 12.08

    【Ruby on Rails】「Turbolinks」によるページ遷移高速化

  5. 2019 12.05

    【Ruby on Rails】「Action Mailer」について

  6. 2019 11.30

    【Ruby on Rails】モデル同士を関連づけを便利に扱う機能

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】「ページング」の実装(k…

【Ruby on Rails】「Turbolinks」…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー