rails でバッチ処理を行いたい時
業務だと時々バッチ処理を行う機会があるので その方法をメモしておきます
バッチ処理とは
- ひとまとまりのデータに一括で処理を行うこと
どんな時に行う
途中でロジック変更などを行った際に、バッチ処理を行い既にデータベースなどに保存されているデータを書き換える
応急処置のため、デプロイフローなどを省略してhotfix的に対処したい(弊社はこっちが多い)
方法
現在のプロジェクトの/tmp などに移動し
ruby vim batch.rb
などで行いたい処理を記述する保存する
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