📌
[rails]fakerを使用しseed fileの作成 ・作成したseed fileと初期からあるseed.rb
seedの作成(ダミーデータ)
開発段階で動作確認用に初期データを入れるために使用されるもの。
処理が正しく動いているか確認するために、DBにデータを用意しておく際に使用する。
[場所]DBフォルダの中にseed.rbがある!
=> 処理の確認で、作成中に自分で作って確認することや、
rails cで作成して確認することは不可能ではないが、
手間がかかるし大きい処理になればなるほど、できなくもなってくる。
よって、seedを使用した初期dataの挿入がいい!!!
seedファイルの使用メリット
- 動作確認用に初期データを入れられる
- 大量に作成可能
- DBをリセットしてもseedに初期データがあるから使える
Faker
- faker公式はこちらから
- テスト用にダミーデータを生成するためのライブラリであり、Gemとして使用可能。
- Faker Gemを使用すると、名前、アドレス、電話番号、Eメールアドレス、テキストなど、さまざまな種類のダミーデータを生成することが可能。
fakerを使用するメリット
- ダミーデータを簡単に生成できるため、テストデータの作成が容易
- 生成されたダミーデータはランダム性があるため、テストの信頼性が高まる
- Fakerは、多くの言語に対応しているため、多言語対応のアプリケーションでテストデータを作成することができる
- テストデータを手動で作成する必要がないため、開発者の時間を節約できる
- Fakerはオープンソースのライブラリであるため、無料で利用することができる。
- 開発者がライブラリを拡張することもできる。
など!!
導入方法
1. gem fileにfaker追加
gem 'faker'
bundle install
実行。
2. seed fileの作成
- 初期からあるものとは別で、手動で作成していきます。
- DB folderの中に、seedfolderを作成、その中にカスタムseedfileを作成。記述。
-
Seed.rbに上記fileを記述
今回user.rbを作成したとすると、
require_relative "seeds/users"
-
require_relative
メソッド:
別のファイルに分割して記述した初期データを一つのファイルにまとめるために用いられる。
初期設定の seed file と、作成する seedfile の違い
どちらのファイルも、初期データをデータベースに挿入するために使用することは同じ!
手動で作成されたシードファイル:
カスタムの初期データを含むもの.特定のデータモデルの初期状態を設定する場合に使用。
ex. アプリケーションの特定の機能に必要なデータ
以下のように、"10個のランダムなユーザーと,それぞれに5つのランダムなポストを作成する"とか!
# db/seeds/users_posts.rb
10.times do
user = User.create(
name: Faker::Name.name,
email: Faker::Internet.email,
password: Faker::Internet.password(min_length: 8)
)
5.times do
user.posts.create(
title: Faker::Lorem.sentence,
body: Faker::Lorem.paragraph
)
end
end
- 初期からある
db/seeds.rbファイル
:
アプリケーションの基本的な初期データを含むもの。
ex. サイトの初期管理者アカウントの作成、初期ページやカテゴリーの作成
以下のように、管理者や初期の少数のカテゴリなど。
(⚠️これらのデータは、アプリケーションの開発者が手動で入力する必要がある)
# db/seeds.rb
# サイト管理者の初期アカウントを作成
User.create!(
name: "Admin User",
email: "admin@example.com",
password: "password",
password_confirmation: "password",
admin: true
)
# カテゴリーを作成
Category.create!(name: "Technology")
Category.create!(name: "Sports")
Category.create!(name: "Food")
# 初期ページを作成
Page.create!(
title: "Welcome to my app!",
body: "This is my first Rails app. Thanks for visiting!",
published_at: Time.now
)
Discussion