arait-code’s RC

もうすぐエンジニア転職して2年になります。

rails でバッチ処理を行いたい時

業務だと時々バッチ処理を行う機会があるので その方法をメモしておきます

バッチ処理とは

  • ひとまとまりのデータに一括で処理を行うこと

どんな時に行う

  • 途中でロジック変更などを行った際に、バッチ処理を行い既にデータベースなどに保存されているデータを書き換える

  • 応急処置のため、デプロイフローなどを省略してhotfix的に対処したい(弊社はこっちが多い)

方法

  1. 現在のプロジェクトの/tmp などに移動し ruby vim batch.rb などで行いたい処理を記述する

  2. 保存する

bundle exec rails r tmp/batch.rb 

バッチ処理記述の際

実際にデータを実行する前に下記の様に 確認と選択を行う様にするとミス防止に良いです

def yes_or_no
  puts "yes or no?"

  case gets.chomp
  when "yes"
    puts "スクリプトを実行します."
  when "no"
    puts "スクリプトを終了します."
    exit 1
  else
    puts "yes または no を入力して下さい.スクリプトを終了します."
    exit 1
  end
end

def main
  # 対象のデータを取ってくる処理
  target = Model名.Where(name: hoge)

  # 確認する
  p target.name

  yes_or_no

  # データベースなどに実際に行う処理など
  target.update!(name: huga)
end