🥞

Rails seedとは

2023/05/14に公開

はじめに

チーム開発中の初学者です🔰
開発段階のデータ作成方法では、実際にcreate機能を実装してからアプリを操作する方法やrails cからデータを作成する方法などありますが、大量のデータを作るのは大変ですよね。

そこで役立ちそうなseedについて調べてみました!

初期データとして管理者のデータも入れられるので、管理者が必須なアプリの場合は、使う場合が多いらしいです。

seedとは

初期データやテストデータのことで動作確認用データを登録する目的で使われる。
dbフォルダ配下に存在している!(プロジェクト新規作成時に作成されている)

ここにDBへのデータ投入の処理を追記していって、railsコマンドを実行することでデータベースに初期データとしてデータが投入される🙆🏻

使用メリットはいくつかある!

  • 開発段階で動作確認用に初期データを入れられる
  • 複数のメンバーで開発している場合、同じデータセットで作業することができ、バグの発見やデバッグが容易になる
  • 一度に大量に作成できる
  • DBをリセットしてもseeds.rbにあるので使える

seedでデータベースに初期データを投入

  1. db/seeds.rbの編集
  2. rails db:seedの実行

書き方

ベーシックな書き方はこれ

db/seeds.rb
# Userモデルのデータを作る
User.create!(
   email: 'test@test.com',
   name: 'テスト太郎',
   image: File.open('./app/assets/images/test.jpg')
)

create!メソッドの末尾の!は、もし何らかの理由でオブジェクトの保存が失敗した場合に例外を発生させることを意味する。これにより、保存の失敗を即座に検知し、問題を解決することができる。

seedファイルを編集した後は、下記を忘れずに行い、DBに反映させる!

rails db:seed

たくさん作りたい場合

timesメソッドを使うと一括でデータが作成できる。

timesメソッドとは

Integerクラスのインスタンスメソッドで、指定された数だけブロック内の処理を繰り返すために使用される。メソッドの名前が示す通り、ある特定の「回数」(times)だけ処理を繰り返すという動作を行う。

db/seeds.rb
# 一括で10個のユーザーデータを作成
# 10回繰り返し処理を行う
10.times do |n|
  User.create!(
    # n + 1で数字が重複しないようにする
    email: "test#{n + 1}@test.com",
    name: "テストユーザー#{n + 1}",
    password: "testhoge"
  )
end

これでUserが10個作成できる!
バリデーションでユニークを指定している場合はn + 1でデータが重複しないようにする!

seedファイルを編集した後は、下記を忘れずに行い、DBに反映させる!

rails db:seed

コマンド実行後、rails cで確認してみましょう。

$ rails c
001 > User.all
:

作成したデータが確認できたら反映できている🙆🏻‍♀️

faker

ダミーデータを作れるGemもあるみたいです。

README
https://github.com/faker-ruby/faker

参考にさせていただいたサイト

https://qiita.com/nakachan1994/items/433d663375309fadea4d
https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee
http://www.code-magagine.com/?p=8127
https://zenn.dev/airiswim/articles/4532e3403f7612

Discussion