SQL DDL → ORM モデル生成

CREATE TABLE 定義を Prisma、Drizzle ORM、TypeORM、SQLAlchemy のモデル雛形に変換します。生成されたフィールドと型マッピングを確認してください。

ブラウザ内でローカルに実行
このツールの処理はすべてブラウザ内で行われます。KivTools が入力内容をアップロード・保存したり、外部 API に送信したりすることはありません。
SQL DDLMySQL、PostgreSQL、SQLite、SQL Server の CREATE TABLE 文を貼り付けてください。テーブル、列、主キー、直接の REFERENCES 句を読み取ります。
生成されたモデル

CREATE TABLE 文を ORM モデルに変換する手順

CREATE TABLE 文を貼り付け、Prisma、Drizzle、TypeORM、SQLAlchemy のいずれかを選んで「モデルを生成」を押します。貼り付けた中の各テーブルを読み取り、列・型・NOT NULL・主キー・既定値・外部キーを反映したモデルブロックをテーブルごとに返します。コピーまたはダウンロードしてそのまま使えます。

処理はすべてページ内で完結します。検証では生成時にネットワーク要求が一切発生しなかったため、スキーマの内容がブラウザの外に出ることはなく、接続が切れても動作します。

  1. 「SQL DDL」欄に DDL を貼り付けるか、「サンプルを読み込む」で 2 つの小さなテーブルから始めます。
  2. 「生成対象」で Prisma、Drizzle ORM、TypeORM、SQLAlchemy のいずれかを選びます。
  3. 「モデルを生成」を押します。ステータス行に生成したテーブルモデルの件数が表示され、読み取れなかった定義があればその件数も示されます。
  4. 生成対象はいつでも切り替えられます。切り替えると出力が再生成されるため、表示中の ORM と出力が食い違うことはありません。
  5. 「コピー」または「ダウンロード」(SQLAlchemy では models.py、それ以外は models.ts)でコードを取り出し、「クリア」で両方の欄を空にします。CREATE TABLE が 1 つも見つからない場合は出力欄が空になり、「コピー」はコピーする内容がないと知らせます。

DDL の読み取り方と生成されるモデルの中身

パーサーが読み取るもの

テーブル名(スキーマ修飾の有無を問わず、app.accounts は accounts として出力)、バッククォート・二重引用符・角括弧で囲まれた列名、そして各列の型を読み取ります。NOT NULL の列は必須フィールドになり、NULL 可の列は任意になります。主キーは列レベルの PRIMARY KEY と、テーブルレベルの PRIMARY KEY (a, b) の両方から取得し、複合キーにも対応します。

自動採番は列名ではなく DDL から判断します。SERIAL、BIGSERIAL、AUTO_INCREMENT、GENERATED … AS IDENTITY、nextval(…) の既定値を認識し、単なる PRIMARY KEY は通常のキーとして扱います。DEFAULT CURRENT_TIMESTAMP と now() は各ターゲット固有の「now」既定値になります。外部キーは列レベルの REFERENCES とテーブルレベルの CONSTRAINT … FOREIGN KEY の両方から読み取ります。行コメント(-- と MySQL の #)およびブロックコメントは解析前に除去します。

各ターゲットの出力

Prisma: テーブルごとに 1 つのモデルを出力し、複数列のキーには @@id([...])、DDL で宣言された場合のみ @default(autoincrement())、現在時刻には @default(now())、UUID 列には @db.Uuid を付け、生成した名前が元の SQL 名を指すよう @map / @@map を付与します。

Drizzle ORM: Postgres 方言向けの pgTable 宣言を出力し、複合キーは primaryKey({ columns: [...] }) で表現します。TypeORM: 自動採番列にのみ @PrimaryGeneratedColumn、それ以外のキーには @PrimaryColumn を使い、デコレーターがスキーマと一致するようにします。SQLAlchemy: 2.0 形式の DeclarativeBase クラスに Mapped[...] 注釈と mapped_column() を使い、2 通りの外部キー記法はいずれも ForeignKey('テーブル.列') になります。インポート行には実際に使う名前だけを並べます。

そのまま使う前に確認すること

型の対応は意図的に粗くしています。varchar・char・text・citext はターゲットの文字列型、DECIMAL と NUMERIC は Decimal 注釈の小数型、JSON・JSONB・XML は汎用の JSON 型になり、対応表にない型は string にフォールバックします。出力からマイグレーションを起こす前に、代表的なテーブルを実際のスキーマと突き合わせてください。

列以外の要素はデータベース側に残ります。CHECK、UNIQUE、インデックス、ビュー、トリガー、シーケンス、照合順序、ストレージ句は変換せず、リレーションやナビゲーション用のプロパティも生成しません。外部キーは SQLAlchemy で ForeignKey が付く以外はどのターゲットでも通常の列のままです。Drizzle の出力は貼り付けた DDL の方言にかかわらず Postgres 方言です。

最近使ったツール: