JSON → Elixir Ecto
Elixir & Phoenix Code Generation

JSONからElixir Ectoスキーマ&Changesetジェネレーター

生のJSONデータからElixir Ectoスキーマ、マイグレーション、Changeset、Dialyzer型仕様(typespec)を自動生成するためのアーキテクチャ設計仕様書。

100% クライアント側プライバシー
サーバー送信ゼロ
プリセット:
Ecto Architecture & Compiler Options
入力JSONデータ
defmodule MyApp.Orders.Order do
  @moduledoc """
  Ecto schema for `orders`.
  Generated automatically with ToolsAA 100% Client-Side Engine.
  """
  use Ecto.Schema
  import Ecto.Changeset

  @primary_key {:id, :binary_id, autogenerate: true}
  @foreign_key_type :binary_id
  @derive {Jason.Encoder, only: [:id, :order_id, :order_number, :customer, :shipping_address, :items, :subtotal, :tax_amount, :total_amount, :currency, :is_fulfilled, :payment_status, :notes, :placed_at]}

  @type t :: %__MODULE__{}

  schema "orders" do
    field :order_id, :binary_id
    field :order_number, :string
    embeds_one :customer, MyApp.Orders.Order.Customer, on_replace: :update
    embeds_one :shipping_address, MyApp.Orders.Order.ShippingAddress, on_replace: :update
    embeds_many :items, MyApp.Orders.Order.Item, on_replace: :delete
    field :subtotal, :float
    field :tax_amount, :float
    field :total_amount, :float
    field :currency, :string
    field :is_fulfilled, :boolean
    field :payment_status, :string
    field :notes, :string
    field :placed_at, :utc_datetime

    timestamps(type: :utc_datetime)
  end

  @required_fields [:order_id, :order_number, :subtotal, :tax_amount, :total_amount, :currency, :payment_status, :placed_at]
  @optional_fields [:is_fulfilled, :notes]

  @doc false
  def changeset(model, attrs) do
    model
    |> cast(attrs, @required_fields ++ @optional_fields)
    |> validate_required(@required_fields)
    |> validate_format(:order_id, ~r/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i, message: "must be a valid UUID")
    |> validate_number(:subtotal, greater_than_or_equal_to: 0)
    |> validate_number(:tax_amount, greater_than_or_equal_to: 0)
    |> validate_number(:total_amount, greater_than_or_equal_to: 0)
    |> cast_embed(:customer, required: true)
    |> cast_embed(:shipping_address, required: true)
    |> cast_embed(:items)
  end
end

defmodule MyApp.Orders.Order.Customer do
  @moduledoc """
  Embedded schema representing `MyApp.Orders.Order.Customer`.
  """
  use Ecto.Schema
  import Ecto.Changeset

  @derive {Jason.Encoder, only: [:customer_id, :full_name, :email, :phone_number, :is_vip]}
  @primary_key false
  embedded_schema do
    field :customer_id, :string
    field :full_name, :string
    field :email, :string
    field :phone_number, :string
    field :is_vip, :boolean
  end

  @doc false
  def changeset(struct_or_changeset, attrs) do
    struct_or_changeset
    |> cast(attrs, [:customer_id, :full_name, :email, :phone_number, :is_vip])
    |> validate_required([:customer_id, :full_name, :email, :phone_number])
    |> validate_format(:email, ~r/^[^s]+@[^s]+$/, message: "must have the @ sign and no spaces")
  end
end

defmodule MyApp.Orders.Order.ShippingAddress do
  @moduledoc """
  Embedded schema representing `MyApp.Orders.Order.ShippingAddress`.
  """
  use Ecto.Schema
  import Ecto.Changeset

  @derive {Jason.Encoder, only: [:street, :city, :state, :postal_code, :country_code]}
  @primary_key false
  embedded_schema do
    field :street, :string
    field :city, :string
    field :state, :string
    field :postal_code, :string
    field :country_code, :string
  end

  @doc false
  def changeset(struct_or_changeset, attrs) do
    struct_or_changeset
    |> cast(attrs, [:street, :city, :state, :postal_code, :country_code])
    |> validate_required([:street, :city, :state, :postal_code, :country_code])
  end
end

defmodule MyApp.Orders.Order.Item do
  @moduledoc """
  Embedded schema representing `MyApp.Orders.Order.Item`.
  """
  use Ecto.Schema
  import Ecto.Changeset

  @derive {Jason.Encoder, only: [:sku, :title, :quantity, :unit_price, :discount_rate, :in_stock]}
  @primary_key false
  embedded_schema do
    field :sku, :string
    field :title, :string
    field :quantity, :integer
    field :unit_price, :float
    field :discount_rate, :float
    field :in_stock, :boolean
  end

  @doc false
  def changeset(struct_or_changeset, attrs) do
    struct_or_changeset
    |> cast(attrs, [:sku, :title, :quantity, :unit_price, :discount_rate, :in_stock])
    |> validate_required([:sku, :title, :quantity, :unit_price, :discount_rate])
    |> validate_number(:quantity, greater_than_or_equal_to: 0)
    |> validate_number(:unit_price, greater_than_or_equal_to: 0)
    |> validate_number(:discount_rate, greater_than_or_equal_to: 0)
  end
end
検出されたEcto型
13 Attributes
PK: binary_id • Timestamps: utc_datetime
Changeset Cast&Embeds
3 Embedded Schemas
Strategy: embeds
データベースDDLステータス
table(:orders)
PostgreSQL & MySQL Migration Ready

100% クライアント側プライベート生成

サーバー送信やテレメトリは一切ありません。JSONペイロードや内部スキーマ設計はすべてブラウザメモリ内でのみ安全に処理されます。

イディオマティックなPhoenix & Ecto設計

Ecto 3.x標準に準拠したスキーマ、@derive {Jason.Encoder}、embedded_schema、cast/validate changeset、正規表現制約、タイムスタンプを自動生成。

フルスタック統合コード生成

Ectoスキーマ、埋め込みスキーマ、データベースマイグレーション、Dialyzer @type型定義、Phoenix ContextのCRUD関数を瞬時に一括生成。

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

Json To Elixir Ecto — リファレンスガイド

生のJSONデータからElixir Ectoスキーマ、マイグレーション、Changeset、Dialyzer型仕様(typespec)を自動生成するためのアーキテクチャ設計仕様書。

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

schemaMode'table' | 'embedded'

Ecto.Schemaを用いた永続化リレーショナルテーブルと、embedded_schemaによるステートレスな構造体モデルを切り替えます。

初期値: 'table'
primaryKey'binary_id' | 'id' | 'none'

ルートエンティティの主キー定義を制御します。UUID形式の@primary_key {:id, :binary_id, autogenerate: true}、整数自動増分、または無効化を選択します。

初期値: 'binary_id'
nestedStrategy'embeds' | 'map'

ネストされたJSONオブジェクトを再帰的なembeds_one/embeds_manyサブスキーマとして定義するか、スキーマレスな:map型として保持するかを指定します。

初期値: 'embeds'
timestamps'utc_datetime' | 'naive_datetime' | 'none'

マイクロ秒精度のUTCタイムスタンプ(:utc_datetime)、従来の:naive_datetime、またはタイムスタンプなしの生成を設定します。

初期値: 'utc_datetime'
smartValidationsboolean

サンプルの値パターンを検証し、メール・UUID・URL向けのvalidate_format/3や数値範囲向けのvalidate_number/3をChangesetに自動挿入します。

初期値: true
deriveJasonboolean

スキーマ定義直上に@derive {Jason.Encoder, only: [...]}を付与し、PhoenixのAPIレスポンス等で安全なJSONシリアライズを可能にします。

初期値: true

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

UTC日時型の厳格適用

JSON APIのペイロード処理では:naive_datetimeを避け、必ず:utc_datetimeを採用してください。PostgreSQLのtimestamptz列との完全な互換性が保証され、タイムゾーンの暗黙変換バグを防ぎます。

埋め込みChangesetの分離

embeds戦略を採用する場合、ネストされた構造体の検証関数を独立したモジュールまたは非公開関数に切り離し、cast_embed/3の:withオプションで呼び出すことでルートChangesetの肥大化を防ぎます。

Jasonエンコーダの漏洩防止

@derive Jason.Encoderでは構造体全体をシリアライズせず、明示的に:onlyリストを指定してください。内部の仮想フィールドや機密データのAPIレスポンス流出を確実に遮断できます。

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

埋め込みオブジェクトにnullをキャストした際にChangesetが無効化されるエラー

Ectoはデフォルトで必須埋め込みスキーマへのnull入力を拒絶します。cast_embed/3でrequired: falseを指定するか、親スキーマにデフォルト構造体を設定して安全に処理してください。

PostgreSQLマイグレーション実行時の外部キー型不一致エラー(コード42804)

主キーにbinary_idを使用する場合、マイグレーション側の外部キー参照定義にもreferences(:users, type: :binary_id)のように明示的な型指定を追加してください。

よくある質問 (FAQ)

入力したJSONデータが外部サーバーへ送信・解析されることはありますか?▼

一切ありません。JSONの構文解析、スキーマ推論、Elixir ASTコード生成処理はすべてブラウザのクライアント側JavaScriptランタイム上で実行されます。機密データやアクセストークンが外部ネットワークへ送信される心配はありません。

文字列、日付、UTC日時はどのような基準で自動判別されますか?▼

RFC 3339およびISO-8601の正規表現パターンに基づいて評価されます。タイムゾーンオフセット付きの完全な日時は:utc_datetime、暦日のみは:date、それ以外の一般的な文字列は:string型として推論されます。

複数の異なるデータ型が混在するJSON配列はどのように変換されますか?▼

Ectoスキーマは厳格な配列型({:array, :type})を要求するため、型が混在するリストは自動的に{:array, :map}または型制約のない:map型にフォールバックされ、Dialyzerのコンパイルエラーを防ぎます。

スキーマ定義と同時にマイグレーションスクリプトが生成される理由は何ですか?▼

Ectoではアプリケーション側のメモリ構造体(Ecto.Schema)とデータベースDDL(Ecto.Migration)が明確に分離されています。両方を同期生成することで、列の型、制約、NULL許容性がDBとアプリ間で完全に一致します。

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

すべてのツール →
JSON to Scala 3 & Scala 2 Case Class 変換ツール開発ツール

JSONペイロードを高精度に解析し、型安全なScala 3およびScala 2のケースクラスへ変換。Circe、Play JSON、zio-jsonコーデックの自動導出に対応。

ツールを開く→
JSON to PHP 8.2+ 型付き Readonly DTO ジェネレーター開発ツール

JSON データをコンストラクタプロモーションと fromArray デシリアライザを備えた最新の PHP 8.2+ readonly class DTO(データ転送オブジェクト)に変換します。

ツールを開く→
TypeScript to GraphQL SDL開発ツール

TypeScriptのインターフェース、型エイリアス、列挙型を本番環境向けGraphQLスキーマ定義言語(SDL)へ変換するための開発者リファレンス。

ツールを開く→
TypeScript インターフェースから Protocol Buffers proto3 への変換ツール開発ツール

TypeScriptのinterfaceやtype定義を、インクリメンタルなタグ番号を持つProtobuf 3構文のmessage、field、enumに変換します。

ツールを開く→
GitLab CI パイプライン生成リファレンス開発ツール

Node.js、Python、Go、Rust、Kaniko コンテナワークフローに対応した本番仕様の .gitlab-ci.yml パイプライン構築と最適化のための技術リファレンス。

ツールを開く→
Linux Supervisord (supervisord.conf) プログラム設定ジェネレーター開発ツール

自動再起動、プロセス並行数、ログ出力リダイレクト、環境変数、非特権ユーザー設定を含むSupervisordプログラム設定ブロックをブラウザ上で即座に生成します。

ツールを開く→