JSON → Mongoose
MongoDB & Node.js 開発ツール

JSONからMongooseスキーマ&TypeScriptモデル生成ツール

JSONペイロードからMongoDB Mongooseスキーマ、TypeScript型定義(Document・DTO)、ネストされたサブドキュメント、タイムスタンプを推論・自動生成します。

100% クライアント側プライバシー
サーバー送信ゼロ
プリセット:
Mongooseコンパイラ設定
User•Separate Subdocuments
生JSON入力ペイロード
import mongoose, { Schema, Document, Model, Types } from 'mongoose';

// ============================================================================
// Subdocument TypeScript Interfaces
// ============================================================================
IProfile {
  firstName: string;
  lastName: string;
  avatarUrl: string;
  bio: string;
  website: string;
}

IAddress {
  label: string;
  street: string;
  city: string;
  state: string;
  zipCode: string;
  country: string;
  isPrimary: boolean;
}

IPreferences {
  theme: string;
  receiveNewsletter: boolean;
}

// ============================================================================
// Main Document Interface
// ============================================================================
IUserDocument extends Document {
  username: string;
  email: string;
  passwordHash: string;
  roles: string[];
  profile: IProfile;
  score: number;
  isActive: boolean;
  addresses: Types.DocumentArray<IAddress>;
  preferences: IPreferences;
  lastLoginAt: Date;
  createdAt: Date;
  updatedAt: Date;
}

// ============================================================================
// Nested Child Schemas
// ============================================================================
const ProfileSchema = new Schema<IProfile>(
  {
    firstName: { type: String, required: true, trim: true },
    lastName: { type: String, required: true, trim: true },
    avatarUrl: { type: String, required: true, trim: true },
    bio: { type: String, required: true, trim: true },
    website: { type: String, required: true, trim: true },
  },
  { _id: false }
);

const AddressSchema = new Schema<IAddress>(
  {
    label: { type: String, required: true, trim: true },
    street: { type: String, required: true, trim: true },
    city: { type: String, required: true, trim: true },
    state: { type: String, required: true, trim: true },
    zipCode: { type: String, required: true, trim: true },
    country: { type: String, required: true, trim: true },
    isPrimary: { type: Boolean, required: true },
  },
  { _id: false }
);

const PreferencesSchema = new Schema<IPreferences>(
  {
    theme: { type: String, required: true, trim: true },
    receiveNewsletter: { type: Boolean, required: true },
  },
  { _id: false }
);

// ============================================================================
// Root Document Schema
// ============================================================================
const UserSchema = new Schema<IUserDocument>(
  {
    username: { type: String, required: true, unique: true, trim: true },
    email: { type: String, required: true, unique: true, trim: true, lowercase: true },
    passwordHash: { type: String, required: true, trim: true },
    roles: [{ type: String, trim: true }],
    profile: { type: ProfileSchema, required: true },
    score: { type: Number, required: true },
    isActive: { type: Boolean, required: true },
    addresses: [AddressSchema],
    preferences: { type: PreferencesSchema, required: true },
    lastLoginAt: { type: Date, required: true },
  },
  {
    timestamps: true,
    versionKey: false
  }
);

// ============================================================================
// Model Export (Safe for Next.js Fast Refresh & Node.js Cluster)
// ============================================================================
User: Model<IUserDocument> =
  mongoose.models.User || mongoose.model<IUserDocument>('User', UserSchema);

export default User;
推論されたスキーマフィールド
26 プロパティ
ネストされたサブドキュメント
3 子スキーマ
検出されたBSON型
AddressSchema, Boolean, Date, Number, PreferencesSchema, ProfileSchema, String

100%ブラウザ内推論

JSONの構造解析と型推論はブラウザ内で完結し、サーバーへのデータ送信は一切行われません。

デュアルスタックコード生成

Mongooseスキーマ、TypeScript Document型、純粋なDTOインターフェース、Zodバリデーションスキーマを一括生成。

本番向けMongooseベストプラクティス

自動タイムスタンプ、ObjectId参照、文字列trim、インデックス設定、サブドキュメントの_id制御に対応。

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

JSONからMongooseスキーマ&TypeScriptモデル生成ツール — リファレンスガイド

JSONペイロードからMongoDB Mongooseスキーマ、TypeScript型定義(Document・DTO)、ネストされたサブドキュメント、タイムスタンプを推論・自動生成します。

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

モデル名String

MongooseモデルのコンパイルおよびルートTypeScript Documentインターフェースの識別子として使用される名称。

初期値: ExampleModel
タイムスタンプ自動付与Boolean

スキーマオプションに { timestamps: true } を追加し、createdAtおよびupdatedAtの日時フィールドを自動管理します。

初期値: true
サブドキュメント生成方式Enum (separate | inline)

ネストされたオブジェクトを独立した子スキーマとして分離定義するか、インラインオブジェクトとして埋め込むかを決定します。

初期値: separate
ObjectId自動検出Boolean

24桁の16進数文字列を自動検知し、mongoose.Schema.Types.ObjectId型としてスキーマにマッピングします。

初期値: true
文字列Trim適用Boolean

推論されたすべてのString型フィールドに trim: true を付与し、保存時の前後空白を自動除去します。

初期値: true

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

配列要素のスキーマ統合推論

プロパティ構成が異なる複数のオブジェクトを含むJSON配列を変換する際、全要素のキーの和集合(Union)を自動計算し、欠落フィールドのない安全なスキーマを構築します。

サブドキュメントの_id最適化

個別ドキュメントとしてのライフサイクル管理やインデックスが不要な埋め込み配列には、{ _id: false } を明示することでBSONストレージサイズとメモリ消費を削減できます。

デュアルスタック型定義の同期

生成される HydratedDocument<IModel>(Mongooseモデル用)とプレーンなDTOインターフェース(APIレスポンス用)を使い分けることで、フルスタックで厳格な型安全性を維持できます。

インデックス設計とパフォーマンス

メールアドレスや外部IDなど、クエリ頻度の高い検索キーには、生成コードのスキーマフィールド定義に直接 { index: true } や { unique: true } を追加してください。

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

複数型が混在する配列で厳格な型推論エラーが発生する

配列内に数値と文字列など異なるプリミティブ型が混在している場合は、[mongoose.Schema.Types.Mixed] を指定するか、事前にJSON配列の型を統一してください。

ISO 8601形式の日付文字列が通常のString型として推論される

日付文字列が標準的なISO 8601形式(例: 2026-10-17T00:00:00.000Z)に準拠していることを確認してください。エンジンが自動認識して mongoose.Schema.Types.Date を適用します。

循環参照や過度な階層ネストによるスキーマ肥大化

サブドキュメント生成方式を「separate」に設定して独立した子スキーマにモジュール化するか、入力JSONの不要な再帰階層をフラット化してください。

よくある質問 (FAQ)

JSONの値からどのようにMongooseのデータ型を判定していますか?▼

JavaScriptのプリミティブ型判定に加え、ISO 8601形式の日付や24桁の16進数ObjectId文字列を正規表現で検出し、配列やネストオブジェクトを再帰的に走査して最適なMongoose SchemaTypeを割り当てます。

HydratedDocumentと通常のTypeScriptインターフェースの違いは何ですか?▼

通常のインターフェース(DTO)は純粋なJSONデータのプロパティ構造のみを定義しますが、HydratedDocument<T>はMongooseの内部メソッド(.save()、.populate()、仮想プロパティ)やMongoDBの固有プロパティ(_id、__v)を含む完全なドキュメント型です。

分離スキーマ(Separate)とインライン埋め込みのどちらを選ぶべきですか?▼

ネストされた構造に独自のバリデーション、デフォルト値、ミドルウェア、または複数のモデル間でスキーマを再利用したい場合は「分離スキーマ(Separate)」が推奨されます。軽量な構造体であればインライン埋め込みが簡潔です。

MongoDBのコレクション名を明示的に指定することは可能ですか?▼

はい。Mongooseは通常モデル名を小文字複数形に自動変換しますが、mongoose.model('ModelName', Schema, 'custom_collection_name') のように第3引数にコレクション名を指定すれば任意の名前をバインドできます。

入力したJSONデータが外部サーバーに送信されるリスクはありますか?▼

一切ありません。JSONのパース、BSON型の推論、TypeScriptコードの合成はすべてブラウザのクライアント側JavaScript内で完結するため、安全に機密データを処理できます。

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

すべてのツール →
JSON to Yup バリデーションスキーマ生成ツール開発ツール

JSONサンプルを型安全なYupオブジェクト検証スキーマに変換し、yup.string()、yup.number()、yup.array()、必須ルールを自動生成します。

ツールを開く→
JSON から Joi オブジェクト検証スキーマ自動生成ガイド開発ツール

サンプル JSON データ構造から Joi.object()、Joi.string()、Joi.number()、Joi.array() などの制約を備えた Joi バリデーションスキーマを瞬時に自動生成します。

ツールを開く→
JSON から Apache Avro スキーマ (.avsc) 変換ツール開発ツール

JSONペイロードから、名前空間、プリミティブ型、論理型、null許容共用体型、スキーマ進化ルールを備えた本番仕様のApache Avroスキーマ(.avsc)定義を生成します。

ツールを開く→
GraphQL SDL to Zod バリデーションスキーマ生成開発ツール

GraphQL SDL の型定義、クエリ、入力を、Null 許容性を適切に制御したランタイム Zod バリデーションスキーマ(z.object、z.string、z.array)へ自動変換します。

ツールを開く→
GraphQL SDL to TypeScript 型・インターフェース変換ツール開発ツール

GraphQL スキーマ定義言語 (SDL) の type、input、enum をクリーンで依存関係ゼロの TypeScript インターフェースや型エイリアスにブラウザ上で直接変換します。

ツールを開く→
Kubernetes ConfigMap & Secret YAML ジェネレーター開発ツール

Base64データエンコード、stringData、TLS、Dockerレジストリ認証、およびimmutableリソースフラグに対応したKubernetes ConfigMapおよびSecretマニフェスト生成ユーティリティ。

ツールを開く→