【しーどでーた】

シードデータ とは?

💡 データベースに最初に「種をまく」ように投入する初期データ
📌 このページのポイント
シードデータ ― 初期データ投入のフロー シードファイル 都道府県マスタ カテゴリマスタ 初期ユーザー 実行 Seeder データを読み込み INSERT文を生成 (自動実行) データベース id | name 1 | 北海道 2 | 青森県 ... シードデータが必要な場面 開発環境の構築 テスト用データ準備 マスタデータの初期投入 db:seed コマンドで再現可能な初期状態を作れる
シードデータのイメージ
ひよこ ひよこ

シードデータって手動でINSERTするのと何が違うの?

ペンギン先生 ペンギン先生

シードデータはスクリプトとしてコードで管理するのがポイント。新しいメンバーが開発を始めるとき「db:seed」のようなコマンド1つで必要なデータが全部入る。手動だと「あのデータ入れた?」「入れてない」という事故が起きるけど、スクリプトなら再現性が保証される。

ひよこ ひよこ

どんなデータをシードに入れるの?

ペンギン先生 ペンギン先生

マスタデータ(都道府県、通貨コード、権限種別など)と、開発用のサンプルデータ(テストユーザー、ダミー商品など)の2種類が典型的。マスタデータは本番にも投入するけど、サンプルデータは開発・テスト環境だけに入れるように分けることが多い。

ひよこ ひよこ

おもしろい!シードデータとマイグレーションの違いは?

ペンギン先生 ペンギン先生

マイグレーションテーブルの構造(スキーマ)を管理するもので、シードはデータの中身を管理するもの。マイグレーションで「usersテーブルを作る」、シードで「管理者ユーザーを1件入れる」というように役割が違う。

ひよこ ひよこ

シードデータの管理で気をつけることは?

ペンギン先生 ペンギン先生

冪等性(何回実行しても同じ結果になる)の確保が大事。「すでにデータがあれば追加しない」「find_or_create_by」のような処理にしないと、2回実行するとデータが重複する。あと地味に厄介なのが、テーブル構造が変わったときにシードデータも追随しなければならないこと。マイグレーションカラムを追加したのにシードスクリプトを更新し忘れると、新規セットアップ時にエラーになる。CI/CDで「マイグレーション→シード→テスト」を毎回実行していれば早期に気づけるけど、そうしていないプロジェクトだとシードが壊れたまま何ヶ月も放置されることも珍しくないんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
シードデータって出てきたら「開発やテストのためにDBに投入する初期データ、種まきのようなもの」と思えばだいたいOK!
📖 おまけ:英語の意味
「Seed Data」 = 種(Seed)のデータ
💬 種をまく(seed)ように、最初にデータベースに初期データを植えるイメージ
← 用語集にもどる