ホーム
SQLからTypeBox変換

SQL DDL to TypeBox TypeScript スキーマジェネレーター

SQLのCREATE TABLE文を解析し、Type.Object、Type.String、Type.Number、Type.Optionalを用いた@sinclair/typeboxランタイム検証スキーマとStatic型定義へ高速変換します。

Presets:
SQL方言:
Null処理方針:
日付モード:
命名規則:
SQL DDL 入力3 個のテーブルを検出
import { Type, Static } from '@sinclair/typebox';

UserRole {
  SUPERADMIN = 'SUPERADMIN',
  ORG_ADMIN = 'ORG_ADMIN',
  MEMBER = 'MEMBER',
  BILLING = 'BILLING',
  GUEST = 'GUEST',
}
UserRoleSchema = Type.Enum(UserRole);
UserRoleType = Static<typeof UserRoleSchema>;

SubscriptionStatus {
  TRIALING = 'TRIALING',
  ACTIVE = 'ACTIVE',
  PAST_DUE = 'PAST_DUE',
  CANCELED = 'CANCELED',
}
SubscriptionStatusSchema = Type.Enum(SubscriptionStatus);
SubscriptionStatusType = Static<typeof SubscriptionStatusSchema>;

/**
 * TypeBox Schema for SQL table "organizations"
 * Primary Key: [id]
 */
OrganizationSchema = Type.Object({
  id: Type.String({ format: 'uuid' }),
  slug: Type.String({ maxLength: 64 }),
  name: Type.String({ maxLength: 255 }),
  billingEmail: Type.String({ format: 'email', maxLength: 255 }),
  status: SubscriptionStatusSchema,
  settings: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
  isActive: Type.Boolean({ default: true }),
  createdAt: Type.String({ format: 'date-time' }),
  updatedAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
Organization = Static<typeof OrganizationSchema>;

/**
 * TypeBox Schema for SQL table "users"
 * Primary Key: [id]
 */
UserSchema = Type.Object({
  id: Type.String({ format: 'uuid' }),
  organizationId: Type.String({ format: 'uuid' }),
  email: Type.String({ format: 'email', maxLength: 255 }),
  fullName: Type.Optional(Type.String({ maxLength: 120 })),
  avatarUrl: Type.Optional(Type.String({ format: 'uri', maxLength: 500 })),
  role: UserRoleSchema,
  phoneNumber: Type.Optional(Type.String({ maxLength: 32 })),
  isVerified: Type.Boolean({ default: false }),
  lastLoginAt: Type.Optional(Type.String({ format: 'date-time' })),
  createdAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
User = Static<typeof UserSchema>;

/**
 * TypeBox Schema for SQL table "audit_logs"
 * Primary Key: [id]
 */
AuditLogSchema = Type.Object({
  id: Type.Integer({ minimum: 0 }),
  organizationId: Type.String({ format: 'uuid' }),
  actorId: Type.Optional(Type.String({ format: 'uuid' })),
  eventName: Type.String({ maxLength: 100 }),
  ipAddress: Type.Optional(Type.String({ format: 'ipv4' })),
  userAgent: Type.Optional(Type.String({ maxLength: 500 })),
  payload: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
  createdAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
AuditLog = Static<typeof AuditLogSchema>;
検出テーブル
3
処理済みカラム
27
TypeBoxスキーマ
14

クライアントサイド実行

すべての処理はブラウザのメモリ内で高速かつ安全に実行されます。

ゼロサーバー送信・完全なプライバシー

入力データはサーバーに一切送信されず、ローカルで完結します。

本番環境対応エクスポート

生成されたコードは即座に本番プロジェクトやAPIバリデーションに導入可能です。

技術リファレンス&アーキテクチャガイド

SQL DDLからTypeBox TypeScriptスキーマへの変換ツール — リファレンスガイド

SQLのCREATE TABLE文を解析し、Type.Object、Type.String、Type.Number、Type.Optionalを用いた@sinclair/typeboxランタイム検証スキーマとStatic型定義へ高速変換します。

主要パラメータ&設定項目

SQLダイアレクトEnum ('postgres' | 'mysql' | 'sqlite' | 'generic')

UUID、JSONB、ENUM、SERIAL、DATETIMEなどのDBMS固有の型マッピングルールを指定します。

初期値: 'postgres'
NULL許容値の変換モードEnum ('optional' | 'union-null' | 'optional-null')

NOT NULL制約のないカラムの変換方法を指定します(Type.Optional(T)、Type.Union([T, Type.Null()])、またはその複合)。

初期値: 'optional'
Static型定義の生成Boolean

TypeBoxのStatic<typeof Schema>ユーティリティを利用したTypeScriptの型エイリアスを自動付与します。

初期値: true
出力フォーマットEnum ('standard' | 'fastify' | 'elysia')

標準的なTypeBoxスキーマ出力、またはFastifyやElysia.jsのルートバリデーションに即時組み込める形式を選択します。

初期値: 'standard'

プロの活用テクニック&推奨設定

FastifyおよびElysia.jsへのダイレクト適用

TypeBoxスキーマはJSON Schema規格に準拠しているため、生成されたType.ObjectをFastifyのルーティング定義やElysia.jsのガードにそのまま渡すことで、ゼロオーバーヘッドの高速検証と型推論を両立できます。

JSON・JSONBカラムの厳格型付け

PostgreSQLのJSON/JSONBやMySQLのJSON型は、Type.Unknown()またはType.Record(Type.String(), Type.Any())として変換されるため、柔軟なデータ構造を保持しながら安全に扱えます。

BigIntと数値精度の安全対策

SQLのBIGINTやINT8はJavaScriptのNumber安全整数限界(2^53 - 1)を超える恐れがあるため、API通信時にはType.String({ pattern: '^[0-9]+$' })またはType.BigInt()として扱う構成が推奨されます。

よくあるトラブルと解決策

NOT NULL制約のないカラムが意図せずType.Optionalになる

SQL DDLではNOT NULL宣言がないカラムはすべてNULL許容となります。プロパティ自体は必須で値のみNULLを許容したい場合は、NULL変換モードを「union-null」に変更するか、DDL側にNOT NULLを明記してください。

PostgreSQLの独自拡張型や複合型のパースエラー

PostGISのGEOMETRY型やHSTORE、未定義のENUM型などは自動的にType.Unknown()へフォールバックされるか無視されます。変換前に標準SQL型(TEXT、JSONB、BYTEA等)へ置換してください。

よくある質問 (FAQ)

TypeBoxとは何ですか?ZodやYupとの違いは?▼

TypeBoxはTypeScript向けの高速なJSON Schema型ビルダーです。検証コードを純粋なJSON Schemaとして出力するため、AJVなどの超高速バリデータと親和性が高く、FastifyやElysia.jsで業界最速水準のランタイム性能を発揮します。

Static<typeof Schema>はどのようにTypeScriptの静的型を解決しますか?▼

TypeBoxはTypeScriptの高度な条件付き型機能を利用し、実行時スキーマオブジェクトから対応する静的インターフェース型を直接算出します。型定義とバリデーションルールの二重管理が不要になります。

SERIALやAUTO_INCREMENTなどの自動採番IDはどのように扱われますか?▼

自動採番主キーはType.Integer({ minimum: 1 })にマッピングされます。新規レコード作成用のInsertスキーマでは、Type.OptionalでラップしてIDの省略を許可する構成が一般的です。

入力したSQL DDLやデータベース構造が外部サーバーへ送信されることはありますか?▼

いいえ。すべてのSQL構文解析とTypeBoxコード生成はブラウザ内のJavaScriptエンジンで100%完結します。機密性の高いデータベース定義が外部へ漏洩する心配はありません。

関連するおすすめ開発ツール

すべてのツール →
cURL から Rust (reqwest & tokio) コードジェネレーター開発ツール

cURL コマンドを、reqwest、serde_json、カスタムヘッダー、Tokio 非同期ランタイムを活用した慣用的で安全な Rust HTTP クライアントコードへ瞬時に変換します。

ツールを開く→
cURL to Ruby (Net::HTTP & Faraday) コード生成ツール開発ツール

cURLコマンドをNet::HTTP、URI、Faraday、JSON解析を活用したクリーンで慣用的なRubyコードへ瞬時に変換します。

ツールを開く→
Kubernetes NetworkPolicy 生成ツール開発ツール

宣言的Kubernetes NetworkPolicyマニフェスト、ゼロトラストPod分離、名前空間インgress/egressルール、CIDR ipBlock、複数ポート定義を生成するための開発者向けガイド。

ツールを開く→
Kubernetes RBAC Role & ClusterRoleBinding YAML 生成ツール開発ツール

APIグループ、リソース操作(verbs)、Subject(ServiceAccount/User/Group)を指定して、Kubernetes RBACのRole、ClusterRole、RoleBinding、ClusterRoleBindingマニフェストを迅速に設計・生成します。

ツールを開く→
Kubernetes StatefulSet&Headless Service YAML ビルダー開発ツール

コンパニオン Headless Service、永続ボリュームテンプレート(volumeClaimTemplates)、レプリカ数、podManagementPolicy を備えた本番仕様の Kubernetes StatefulSet マニフェストを生成します。

ツールを開く→
Nginx Location優先順位テスター & マッチシミュレーター開発ツール

Nginx locationディレクティブのマッチングルール検証ガイド。修飾子優先順位(=、^~、~、~*)のリアルタイムシミュレーション。

ツールを開く→