まえがき
実務でデータをcsvにまとめて、出力してほしいといわれた。
今回はPostというオブジェクトのデータをcsvに出力してみる。
使用技術
- CSV(Ruby組み込みライブラリ)
https://docs.ruby-lang.org/ja/latest/library/csv.html
手順
- rakeタスクの定義
- csv出力ロジックの製造
- タスク実行
1, rakeタスクの作成
以下コマンドでlib/tasks/csv.rake
が生成される。
$ rails g task ファイル名
$ rails g task csv
lib/tasks/csv.rake
の中身は以下のようになっている。
require 'csv'
namespace :csv do
end
試しにhelloを出力するだけのタスクを作成する。
desc "test"
task greet: :environment do
puts "hello"
end
タスクを実行して動作確認。
$ rake ネームスペース名:タスク名
$ rake csv:greet
# => hello
2, csv出力
同じようにタスクを定義。
# 組み込みライブラリを導入
require 'csv'
namespace :csv do
desc "postのデータを出力"
task output: :environment do
# csvファイルのパスを定義
csv_file_path = File.join(Rails.root, 'public', 'posts.csv')
# generateメソッドでcsvオブジェクトを生成
csv_data = CSV.generate do |csv|
# csvファイルの見出し列となるデータを作成
column_names = ["タイトル", "内容", "カテゴリー", "ユーザーID", "作成日時", "更新日時"]
csv << column_names
# Postの全データを取得
posts = Post.all
# Postの全データの値をcsvデータに追加
posts.each do |post|
column_values = [
post.title,
post.content,
post.category,
post.user_id,
post.created_at,
post.updated_at,
]
csv << column_values
end
end
# ファイルのパスとcsvデータを指定して、csvファイル作成
File.write(csv_file_path, csv_data)
end
end
3, タスク実行
タスクを実行するとcsvファイルが作成される。
$ rake csv:output
作成したファイルはgoogleスプレッドシートなどにアップロードして確かめるといい。
いい感じに行けた。以上。