2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

csvファイルを作成し、初期データを挿入しよう[Rails]

Last updated at Posted at 2018-12-10

はじめに

railsで開発する際、あらかじめ用意しておいたデータをデータベースに挿入したい場面が多々あると思います。今回はその流れをまとめていきます。

Bookモデルを作成している前提で話を進めていきます。
rails g model book title:string

次の流れで進めていきます。

  1. seeds.rbファイルにアルゴリズムを作成する
  2. csvファイルを作成する
  3. コマンドを実行し、データをデータベースに挿入する

#流れ

1. seeds.rbファイルにアルゴリズムを作成する

seeds.rb
require "csv"

books_csv = CSV.readlines("db/books.csv")
books_csv.shift
books_csv.each do |row|
  Book.create(title: row[1])
end

1行目では、Rubyで用意されているcsvを扱うための、csvライブラリを呼び出しています。
requrireを利用すると外部ライブラリを利用することが可能になります

次に、readlinesメソッドを使って、、ファイル内容を全て読み込んで、その各行を要素として持つ配列を返します。

そして、shiftメソッドにより、配列の先頭の要素を取り出します。破壊的なメソッドであるため、メソッド適用後は、先頭要素が除外された配列となっています。

2. csvファイルを作成する

ここで、csvファイルの中身を作成します。

books.csv
id,"title","created_at","updated_at"
1,"3ステップでしっかり学ぶRuby入門","0000-00-00 00:00:00","0000-00-00 00:00:00"
2,"プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで","0000-00-00 00:00:00","0000-00-00 00:00:00"
3,"プログラミング言語Ruby","0000-00-00 00:00:00","0000-00-00 00:00:00"
4,"初めてのRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
5,"メタプログラミングRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
6,"たのしいRuby","0000-00-00 00:00:00","0000-00-00 00:00:00"
7,"Effective Ruby","0000-00-00 00:00:00","0000-00-00 00:00:00"
8,"たった1日で基本が身につくRuby on Rails超入門","0000-00-00 00:00:00","0000-00-00 00:00:00"
9,"基礎 Ruby on Rails","0000-00-00 00:00:00","0000-00-00 00:00:00"
10,"オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方","0000-00-00 00:00:00","0000-00-00 00:00:00"

見ての通り、一行目はフィールドの項目ですので必要ないですね。
eachメソッドからの流れはよく目にする文法ですので、ここでは割愛します。

3. コマンドを実行し、データをデータベースに挿入する

rails db:seed
_MySQL_5_6_39__localhost_model_practice_development_books.png

これでデータベースにデータをインサートすることができました。

補足

ついでに、csvファイルの各行を要素として収めた配列の中身を確認してみます。
console上でrubyコマンドを実行することにより確認することができます。
そこで、seeds.rbファイルを下記のように編集します。

seeds.rb
require "csv"

books_csv = CSV.readlines("books.csv")
books_csv.shift
books_csv.each do |row|
  # Book.create(title: row[1])
end

p books_csv

実行結果は次のようになります。

$ ruby seeds.rb
[["1", "3ステップでしっかり学ぶRuby入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["2", "プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["3", "プログラミング言語Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["4", "初めてのRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["5", "メタプログラミングRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["6", "たのしいRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["7", "Effective Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["8", "たった1日で基本が身につくRuby on Rails超入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["9", "基礎 Ruby on Rails", "0000-00-00 00:00:00", "0000-00-00 00:00:00"], ["10", "オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方", "0000-00-00 00:00:00", "0000-00-00 00:00:00"]]

非常に見にくい結果となっているので、ppライブラリをrequireで取り込みます。
次のように編集します。

seeds.rb
require "csv"
require "pp"

books_csv = CSV.readlines("books.csv")
books_csv.shift
books_csv.each do |row|
  # Book.create(title: row[1])
end

pp books_csv

再度rubyコマンドを実行します。

$ ruby seeds.rb
[["1", "3ステップでしっかり学ぶRuby入門", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["2",
  "プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで",
  "0000-00-00 00:00:00",
  "0000-00-00 00:00:00"],
 ["3", "プログラミング言語Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["4", "初めてのRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["5", "メタプログラミングRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["6", "たのしいRuby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["7", "Effective Ruby", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["8",
  "たった1日で基本が身につくRuby on Rails超入門",
  "0000-00-00 00:00:00",
  "0000-00-00 00:00:00"],
 ["9", "基礎 Ruby on Rails", "0000-00-00 00:00:00", "0000-00-00 00:00:00"],
 ["10",
  "オブジェクト指向設計実践ガイド - Rubyでわかる 進化し続ける柔軟なアプリケーションの育て方",
  "0000-00-00 00:00:00",
  "0000-00-00 00:00:00"]]

とてもわかりやすくなりました。
ppライブラリって便利ですね。

おわりに

Railsを構成しているファイルの大半は.rbファイルで構成されています。
つまりは、rubyで書けるファイルが大半であるとも言えますね。
この事実を今一度思い出して、適切にアルゴリズムを組んで、より幅広く処理ができるように勉強していきたいと思います。

少しでも役に立ったという方は、いいね、お願いします(^^)

seeds.rbファイル関連

seeds.rbファイルに本番環境に即した大量データ挿入アルゴリズムを簡単に書いてみた[Rails]

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?