1
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 1 year has passed since last update.

昨日までの投稿を削除するバッチ処理

Posted at

記事の対象者

バッチ処理で投稿のデータを管理したい人

前提条件

Ruby 2.6.3
Rails 6.1.5

実装の流れ

1、削除プログラムの作成
2、gem【whenever】の導入

削除プログラムの作成

app/libの配下にbatchフォルダを作成します。
次に作成したbatchフォルダの中でdata_reset.rbファイルを作成して以下を記述して保存します。

app/lib/batch/data_reset.rb
class Batch::DataReset
  def self.data_reset
    @activity_points = ActivityPoint.all.where("date <= ?", Date.yesterday)
    @activity_points.delete_all
    p "前日の活動拠点を全て削除しました"
  end
end

コードの解説をします。
私は活動日が昨日になっているものを削除するプログラムを作成しました。
ActivityPointモデル内にあるdateカラムから日付が昨日のものを抽出します。
データ抽出の参考記事

app/lib/batch/data_reset.rb
    @activity_points = ActivityPoit.all.where("date <= ?", Date.yesterday)

gem【whenever】の導入

wheneverはcrontab管理を行なってくれるgemです。
crontabとは、cronという定期的に指定のプログラムを実行するスケジューラーの設定を編集するための管理コマンドです。viエディタで操作するのでviの操作に慣れておかなくてはなりません。
一方、wheneverはRailsでの記述をcrontabへ反映させてくれるので管理が便利になります。
wheneverの参考記事

config/schedule.rb
# 1日1回前日までのデータを削除
require File.expand_path(File.dirname(__FILE__) + "/environment")
rails_env = Rails.env.to_sym
set :environment, rails_env
set :output, 'log/cron.log'
every 1.day, :at => '4:30 am' do
  begin
    runner "Batch::DataReset.data_reset"
  rescue => e
    Rails.logger.error("aborted rails runner")
    raise e
  end
end

まとめ

昨日のデータを取り出して削除という簡単なプログラムですが、データの抽出方法に意外と時間を取ってしまいました。データ操作を考えるの楽しいです。もっと扱えるようになりたいです。

少しでも参考になれば幸いです。
最後まで読んでいただきありがとうございました。

1
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
1
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?