【でーたべーすしーでぃんぐ】
データベースシーディング とは?
最終更新:
💡 初期データやテスト用データを、用意して入れる
データベースへ初期データやテスト用データを入れる作業。マイグレーションとの関係、再実行時の重複対策、実行環境の確認を説明します。
📌 このページのポイント
- 起動に必要なデータやテスト用データを投入する
- マイグレーションと組み合わせる方法は製品による
- 繰り返し実行する場合は、重複や上書きを考慮する
- 投入先の環境と、データへの影響を確認する
シーディングは、テスト用のデータを入れること?
それも用途の一つだよ。アプリの起動に必要な言語や通貨などの初期データ、開発中に画面を確かめるサンプル、テストの条件を作るデータなどを入れる作業なんだ。
マイグレーションとは、何が違う?
どのツールでも、自動で入る?
何度実行しても、同じ結果になる?
作り方によるよ。毎回追加する処理なら、重複したり制約で失敗したりする。既存のデータを確認してから追加するなど、再実行時の扱いを決めておく。更新や削除を含めるなら、残したいデータへの影響も確認するんだ。
ランダムなデータをたくさん入れれば、テストは十分?
量だけでなく、確認する条件が大事だよ。空の値や境界値、関連するデータの組み合わせも考える。Laravelにはモデルファクトリーでデータを作る方法があるけれど、目的に合う内容を用意する必要は残るんだ。
もっと詳しく知りたい人へ
本番環境でもシーディングを使う?
アプリに必要な初期データを入れる用途があります。ただし、開発用のサンプルをそのまま本番に入れる操作とは分けます。Laravelの公式資料も、本番への投入は既存データの変更や損失につながり得ると注意しています。
再実行で重複しない仕組みは、自動で付く?
シーディングという名前だけでは保証されません。EF Coreの公式例でも、既存レコードを調べてから追加する処理を書いています。キーや一意制約、存在確認、更新する条件などを、データと実行方法に合わせて決めます。
まとめ:ざっくりこれだけ覚えればOK!
「データベースシーディング」って出てきたら「データベースに、初期データやテスト用データを入れる作業」と思えばだいたいOK!
📖 おまけ:英語の意味
「Database seeding」 = データベースに種をまく
💬 Seedは種という意味です。これから使うデータベースへ、必要なデータをあらかじめ用意して入れることを、種まきにたとえています。