\検証用のデータを用意するとき、だいたい同じところで止まりませんか。
テーブルは揃っている。FK もある。あとはテストデータだけあればいいのに、複数〜十数のテーブルに INSERT を手で書く必要があって、しかも親テーブルから順に書かないと制約で落ちる。件数を増やしたいだけなのに、コピペの修正に半日かかる、みたいな状況ってそこそこあると思います。
そういう場面用に SQL Data Creator という Web ツールを作りました。
制約の強めの会社でも使えるように、ブラウザだけで動きます。サーバーにスキーマを送ることもありません。
- SQL Data Creator: https://sqldatacreator.com
対応している DB
プロジェクト作成時(またはヘッダー)で、次の 6 つから選べます。
| DB | CREATE / INSERT の方言まわり |
|---|---|
| MySQL |
AUTO_INCREMENT、識別子の扱いなど |
| PostgreSQL |
SERIAL / UUID / TIMESTAMPTZ など |
| MariaDB | 基本は MySQL 寄り。UUID 型も選べる |
| Oracle | 識別子が大文字寄り、VARCHAR2 / NUMBER など |
| SQLite | 型の種類は少なめ。その分シンプル |
| SQL Server |
NVARCHAR / DATETIME2 / UNIQUEIDENTIFIER など |
選んだ DB に合わせて、画面上で選べる型や、出力される CREATE / INSERT の書き方が変わるようにしています。
このツールの使い方
ざっくり言うと、次の流れです。
- 対象 DB を選ぶ
- テーブルとカラムを定義する(手入力でも、DDL / ORM の貼り付けでも可)
- リレーションを確認する
- カラムごとの生成ルールを必要なら調整する
- CREATE / INSERT を出してコピー or ダウンロード
一番こだわったのは FK を考慮した順番で INSERT を出す ところです。親 → 子の並びを自分で直さなくていいようにしています。
フレームワーク付属の faker や factory と違うのは、「アプリのコードを書かずに、SQL として出力できる」点です。逆に、マスキング済みの本番ダンプが既にあるなら、そちらの方が早い場面もあります。このツールは ダンプが無い/まだスキーマ段階 のときに一層活躍できる、という視点で作りました。
具体例:DDL を貼って INSERT まで
たとえば手元にこういう DDL があるとします。
CREATE TABLE users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE posts (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT UNSIGNED NOT NULL,
title VARCHAR(200) NOT NULL,
body TEXT,
CONSTRAINT fk_posts_user FOREIGN KEY (user_id) REFERENCES users(id)
);
左の「スキーマ取込」で入力形式に CREATE TABLE (DDL) を選び、貼り付けてプレビュー → 取り込み、です。
対応している入力は DDL 以外にもあります。
- Prisma schema
- Rails の
schema.rb - TypeORM Entity
- Django models
ORM はバージョン差や方言があるので、すべてを完全には拾いきれません。なので、一通り実務で使える範囲はカバーしていますが、警告が出たら取り込み後の「テーブル定義」で直す想定にしています。
取り込んだあとは、テーブル定義で件数(何行出すか)を変えられます。たとえば users を 10 件、posts を 100 件、といった指定です。
DDL に FK があれば、「リレーション」定義も作成されます。リレーションは一覧と ER 図を切り替えられ、テーブルをつなぐ線をクリックすると編集できます。
ただし、取込直後の生成ルールはデフォルト(ランダム)のままです。user_id が親の users.id を参照するようにしたい場合は、「生成ルール」で該当カラムを「外部キー」に切り替えるか、リレーション画面から関係を追加・確定してください。
「SQL生成」を押すと、だいたいこういう感じの INSERT が出ます(値はランダムなので毎回違います)。
INSERT INTO `users` (`id`, `email`, `name`, `created_at`) VALUES
(1, 'aR9mK2xQp1', 'bT2nH8cL0w', '2024-03-12 08:14:22'),
(2, 'cU4pL9mN3s', 'dV5qJ1kR7y', '2023-11-01 19:02:05');
INSERT INTO `posts` (`id`, `user_id`, `title`, `body`) VALUES
(1, 2, 'eW6...', 'fX7...'),
(2, 1, 'gY8...', 'hZ9...');
メールらしい値が欲しければ、email カラムの生成ルールを「メールアドレス」に変えます。created_at を DB の現在時刻にしたいなら、生成ルールで DB関数(MySQL なら候補の now() や current_timestamp)に切り替えます。その場合は '2024-...' ではなく、選んだ式がそのまま SQL に入ります。
ポイントは次の 2 つです。
- INSERT の並びが親テーブルから先(リレーション定義がある場合)
- 外部キー生成ルールを付けたカラムは、親側で実際に生成された値を参照できる
手で書くと一番ミスしやすいところが、ここです。
生成ルールで「どんな値を出すか」を決める
テーブル構造は「テーブル定義」、値の出し方は「生成ルール」で決めていきます。左メニューの「生成ルール」を開くと、カラムごとにルール種別を選べます。デフォルトのままでも動きますが、検証で欲しい形があるならここで調整できます。
| ルール | 向いているもの | 補足 |
|---|---|---|
| ランダム | とりあえず埋めたい列 | 型に応じた適当な値(初期状態) |
| 連番 | 整数の id など | 1 から順に増える |
| リスト | ステータス、区分値 | 候補から選ぶ(種別として選択) |
| 正規表現 | 決まったフォーマットの文字列 | シンプルなパターン向け |
| メールアドレス | メール列 | ランダムなメールを生成 |
| 外部キー | FK 列 | 先にリレーション定義が必要。親の値を参照 |
| カスタム | 固定値や接頭辞付き | 値 + 任意で prefix / suffix。{index} で行番号 |
| DB関数 | 日付・時刻列 | 候補から関数を選ぶ(後述) |
データ型によって選べるルールが変わります。たとえば連番は整数向け、正規表現やメールは文字列向け、DB関数は日付・時刻向け、という具合です。
画面上で細かくいじりやすいのは カスタム と DB関数 です。それ以外は「ルール種別を選ぶ」が中心で、詳細パラメータの UI はまだ薄い部分があります。
カスタムの例
値に test、接頭辞に u-{index}- と入れると、
u-1-test
u-2-test
u-3-test
...
のように出ます。デモ用のユーザーコードや、識別しやすい文字列を作りたいときに使っています。
外部キー
リレーションを定義したうえで、子側カラムのルールを「外部キー」にします。親テーブルに無い id を勝手に埋め込まない、という挙動になります。スキーマ取込で FK があればリレーション定義までは自動で入りますが、値の参照ルールまでは自動では切り替わりません。生成ルール画面で「外部キー」を選ぶか、リレーション画面から関係を追加してください。
DB関数の対応度合いについて
各 DB ごとの関数は一部対応しています。日付・時刻系のカラム向け がメインで、対象 DB ごとに用意した候補から選ぶ形にしています(任意の関数を手打ちする方式ではありません)。
選んだ式は SQL にそのまま挿入されます(文字列としてクォートされないです)。
| DB | 選べる関数 |
|---|---|
| PostgreSQL |
now(), current_timestamp, clock_timestamp()
|
| MySQL / MariaDB |
now(), current_timestamp
|
| Oracle |
systimestamp, current_timestamp
|
| SQLite |
current_timestamp, datetime('now')
|
| SQL Server |
getdate(), sysdatetime(), current_timestamp
|
画面上の設定について
左メニューの構成は下記のようになっています。
| メニュー | 役割 |
|---|---|
| テーブル定義 | テーブル名・カラム・型・PK / UNIQUE / NULL・件数 |
| リレーション | FK のつながり。一覧と ER 図 |
| 生成ルール | 上で書いた値の出し方 |
| SQL確認 | CREATE / INSERT の確認、コピー、ダウンロード |
| データ確認 | 表形式で中身を眺める |
| 設定 | テーマ(ライト / ダーク)、利用ガイド |
プロジェクト名と DB 種別はヘッダーからも変えられます。保存は「プロジェクト保存」で、ブラウザの localStorage に保存されます。別 PC で作業したり共有したりしたい場合は、ヘッダーのエクスポート / インポートを使ってください。
右ペインの SQL プレビューは常時表示されます。CREATE は定義を編集するとすぐ追従し、INSERT は生成後に出てきます。
想定ユースケース
このツールが使えるのは、だいたい次のような状況を想定しています。
- 結合テスト用に、ある程度まとまった件数の INSERT が欲しい
- FK 付きのサンプル DB を、毎回手書きしたくない
- まず動くデータを置いてからアプリ側を進めたい
- 手元に DDL や Prisma / Rails / Django の定義がある
ぜひ、使ってみてください。
- SQL Data Creator: https://sqldatacreator.com





