【でーたべーすしーでぃんぐ】

データベースシーディング とは?

最終更新:
💡 初期データやテスト用データを、用意して入れる

データベースへ初期データやテスト用データを入れる作業。マイグレーションとの関係、再実行時の重複対策、実行環境の確認を説明します。

📌 このページのポイント
シーディング:最初に使うデータを用意初期データ言語・通貨・テスト用データベース必要なデータを入れる投入先と、重複・上書きの扱いを確認
起動に必要なデータやテスト用データを投入する例。実行方法は製品によって異なります。
ひよこ ひよこ
シーディングは、テスト用のデータを入れること?
ペンギン先生 ペンギン先生
それも用途の一つだよ。アプリの起動に必要な言語や通貨などの初期データ、開発中に画面を確かめるサンプル、テストの条件を作るデータなどを入れる作業なんだ。
ひよこ ひよこ
マイグレーションとは、何が違う?
ペンギン先生 ペンギン先生
シーディングは入れるデータに注目する言葉。マイグレーションは、データベースの変更を管理して適用する仕組みだよ。テーブルの変更だけでなくデータを扱うこともあり、シーディングを組み込む方法も製品によって違うんだ。
ひよこ ひよこ
どのツールでも、自動で入る?
ペンギン先生 ペンギン先生
そうとは限らないよ。例えばPrisma ORM 7では、シード用のコマンドを明示的に実行する。一方、EF Coreには初期化やマイグレーションに合わせて呼ばれる仕組みがある。使う製品とバージョンの手順を確認しよう。
ひよこ ひよこ
何度実行しても、同じ結果になる?
ペンギン先生 ペンギン先生
作り方によるよ。毎回追加する処理なら、重複したり制約で失敗したりする。既存のデータを確認してから追加するなど、再実行時の扱いを決めておく。更新や削除を含めるなら、残したいデータへの影響も確認するんだ。
ひよこ ひよこ
ランダムなデータをたくさん入れれば、テストは十分?
ペンギン先生 ペンギン先生
量だけでなく、確認する条件が大事だよ。空の値や境界値、関連するデータの組み合わせも考える。Laravelにはモデルファクトリーでデータを作る方法があるけれど、目的に合う内容を用意する必要は残るんだ。
もっと詳しく知りたい人へ

本番環境でもシーディングを使う?

アプリに必要な初期データを入れる用途があります。ただし、開発用のサンプルをそのまま本番に入れる操作とは分けます。Laravelの公式資料も、本番への投入は既存データの変更や損失につながり得ると注意しています。

再実行で重複しない仕組みは、自動で付く?

シーディングという名前だけでは保証されません。EF Coreの公式例でも、既存レコードを調べてから追加する処理を書いています。キーや一意制約、存在確認、更新する条件などを、データと実行方法に合わせて決めます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「データベースシーディング」って出てきたら「データベースに、初期データやテスト用データを入れる作業」と思えばだいたいOK!
📖 おまけ:英語の意味
「Database seeding」 = データベースに種をまく
💬 Seedは種という意味です。これから使うデータベースへ、必要なデータをあらかじめ用意して入れることを、種まきにたとえています。

参考資料

← 用語集にもどる