Ruby

Ruby/RailsでCSV出力・ダウンロードする

RubyでCSVを出力するコードはいくつかパターンがありますが、個人的によく利用する汎用コード。

RailsのControllerでダウンロードさせる場合は予めencodingを指定しておく。(基本的に文字コードはExcelで開くことが想定される場合はSJIS、プログラムから読み込む場合はUTF-8を指定)

require "csv"

data = CSV.generate(encoding: "SJIS") do |csv|
  csv << ["column1", "column2", "column3"]
  records.each do |record|
    csv <<[
      record.column1,
      record.column2,
      record.column3,
    ]
  end
end

ダウンロードさせる場合はデータを作ってsend_dataでtext/csvにして返す。

send_data data, filename: "data.csv", type: "text/csv"

出力したデータをファイルに保存する場合は作成したデータを普通にファイルに書き込んでscpなどでダウンロードする。

File.open("/path/to/data.csv", 'w', encoding: Encoding::SJIS) do |f|
  f.write(data)
end