[ruby]バッチ処理について


バッチ処理とは?


バッチ処理とは“一定量の(あるいは一定期間の)データを集め、一括処理するための処理方法”


私は、大量のデータを処理すること全般をイメージしてる。

引用元

https://www.imkk.jp/blog/what-is-batch-processing.html


バッチ処理のフロー

私の業務では、DBに一括登録するデータをスプレッドシートから取り組むバッチ処理でした。

以下では、データベースに商品を一括にスプレッドシートから取り込んで追加するという場合。

フローは以下の通り

まずrakeファイルにそのバッチ処理がどういったものなのかをdescにかく。

そのあと走らせる。

以下がそのコード


import_new_products_information.rake

namespace :batch do

desc '新規商品の追加'
task import_new_products_information: :environment do
require 'batches/import_new_products_information'
Batches::ImportNewProductsInformation.run
end
end


走らせるファイル。

一応シート内に商品名と商品コードというカラムがあることが前提。


import_new_products_informations.rb

require 'batch/base'

require 'google_spreadsheet'

module Batches
class ImportrProductsInformations < Batch::Base
SPREADSHEET_KEY = '追加する商品のスプレッドシートキー'.freeze
SHEET_NAME = '追加する商品一覧があるシートの名前 例)取り込み用など'.freeze

def execute(_args)
gs = GoogleSpreadsheet.new(SPREADSHEET_KEY)

gs.spreadsheet.worksheet_by_title(SHEET_NAME).tap do |sheet|
sheet.list.each do |row|
products_informations.create!(
product_name: row['商品名'],
product_number: row['商品コード']
)
end
end
end
end
end



google_spredsheet.rb

def worksheet_by_title(sheet_name)

spreadsheet.worksheet_by_title(sheet_name)
end