スキーマ推論ツール

新しい連携はいつも同じように始まります。API が JSON のかたまりを返し、それを保持するためのモデルが必要になるのです。20 個のフィールドを手で打ち込むのは退屈でミスも起きやすい作業です。このツールはサンプルの JSON オブジェクトを解析し、各キーの列の型を推論し、お好みの形式で貼り付けてすぐ使えるスキーマを出力します。SQL CREATE TABLE、Mongoose スキーマ、または Sequelize のモデル定義です。

JSON からスキーマを推論する方法

  1. 1

    サンプルのオブジェクトを貼り付ける

    1 つの JSON オブジェクト、またはオブジェクトの配列を入力します(配列の最初のオブジェクトが読み取られます)。各列に型が付くよう、すべてのフィールドが埋まった完全なレコードを使ってください。

  2. 2

    出力形式を選ぶ

    SQL CREATE TABLE(Postgres / MySQL / SQLite 風)、MongoDB を使う Node.js アプリ向けの Mongoose、またはリレーショナルな Node.js アプリ向けの Sequelize。

  3. 3

    テーブルまたはモデルに名前を付ける

    SQL 出力ではテーブル名を、Mongoose と Sequelize の出力ではスキーマ名またはモデル名を設定します。

  4. 4

    生成されたスキーマをコピーする

    出発点として、マイグレーションやモデルファイルにそのまま貼り付けます。

型はどのように推論されるか

推論はあくまで最善の推測です。ツールは 1 つのサンプルオブジェクトの値を読み取り、目にした値に基づいて各キーの列の型を選びます。レコード同士を比較したり、どのフィールドが任意かを推測したりはしないので、完全で代表的なオブジェクトを渡してください。

型の対応表

JSON の値 SQL の型 Mongoose の型 Sequelize の型
42(整数) INTEGER Number DataTypes.INTEGER
3.14(小数) DECIMAL(10,2) Number DataTypes.FLOAT
"こんにちは"(短い文字列) VARCHAR(255) String DataTypes.STRING
255 文字を超える文字列 TEXT String DataTypes.STRING
"2026-04-18T10:00:00Z" TIMESTAMP Date DataTypes.DATE
"2026-04-18" DATE Date DataTypes.DATEONLY
true / false BOOLEAN Boolean DataTypes.BOOLEAN
null TEXT String DataTypes.STRING
[1, 2, 3](配列) JSON Object DataTypes.JSON
{ "nested": ... }(オブジェクト) JSON Object DataTypes.JSON

SQL 出力が追加するもの

SQL CREATE TABLE は必ず自動採番の主キーで始まります。

id INTEGER PRIMARY KEY AUTOINCREMENT,

Mongoose と Sequelize の出力は id フィールドを追加しません。どちらのライブラリも自動で 1 つ作成するためです。

覚えておきたい既定値と制限

  • 読み取られるのは 1 つのオブジェクトです。 配列を貼り付けても最初の要素だけが調べられるため、そのフィールドがスキーマ全体を決めます。
  • 存在しないキーは存在しない列です。 サンプルオブジェクトにないフィールドは、出力にまったく現れません。
  • 入れ子のオブジェクトや配列は 1 つの JSON 列になります。 ツールはそれらをサブテーブル、サブスキーマ、外部キーへ展開しません。
  • 制約は一切生成されません。 列は NOT NULL、一意性、インデックスなしで出力されるため、あなたが締め付けるまではすべて null を許容します。

より整った結果のためのヒント

  • 完全に埋まったレコードを使ってください。 サンプルで null になっているフィールドはテキスト/文字列型と推論されますが、それは望みどおりでないことが多いです。
  • 生成後は予約語を改名してください。 typeorderuser のようなフィールドは SQL で引用符が必要になります。
  • 出力は足場だと考えてください。 VARCHAR の長さや DECIMAL の精度を調整し、インデックスを追加し、列を NOT NULL に設定し、本番前に本当の主キーを選んでください。

よくある質問

入れ子のオブジェクトや配列は 1 つの JSON 列に対応づけられます(SQL と Sequelize では JSON、Mongoose では Object フィールド)。ツールは入れ子の構造をサブテーブルやサブスキーマへ展開しないため、必要であればあなた自身で平坦化または正規化してください。

いいえ。オブジェクトの配列を貼り付けても、調べられるのは最初のオブジェクトだけで、そのキーがスキーマを決めます。その最初のレコードに、気にするフィールドがすべて、それぞれ実際の値を伴って含まれているようにしてください。

いいえ。各列は型だけで出力されるため、出力には外部キー、一意性制約、インデックス、NOT NULL 句がありません。これらは手で追加してください。ツールがサンプルからは復元できない意図を表すものだからです。

リレーショナルデータベースのマイグレーションには SQL CREATE TABLE、MongoDB 上の Node.js アプリには Mongoose Schema、Sequelize ORM 経由でリレーショナルデータベース上に動く Node.js アプリには Sequelize Model を選んでください。

関連ツール

このツールは他の言語でも利用できます