LoginSignup
0
0

RubyでCSV出力

Posted at

まえがき

実務でデータをcsvにまとめて、出力してほしいといわれた。
今回はPostというオブジェクトのデータをcsvに出力してみる。

使用技術

手順

  • 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スプレッドシートなどにアップロードして確かめるといい。

スクリーンショット 2024-02-10 17.15.26.png

いい感じに行けた。以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0