コード生成
ツールバーの Code Generator タブに切り替えます。タブの左側にはドキュメント全体のコードが、その右側には Code Generator という見出しのオプションパネルが表示され、そこで言語、データベース、名前のケース、一部の対象では括弧の種類を選びます。
タブを最初に開いたときにエディタの幅が 640 px 未満でなければ、パネルは自動的に開きます。パネル上部の Hide options で折りたたみ、コードの右上の Show options で再び表示します。開いているか折りたたんでいるかは、エディタを開いている間はタブを切り替えても保たれ、Schema SQL タブのパネルとは別に扱われ、ファイルに保存されることはありません。
コードを右クリックすると、コンテキストメニューが開きます。Language、Database、Table Name Case、Column Name Case、Bracket(Doctrine、JPA、SeaORM のみ)があり、それぞれ現在の値にチェックが付いたサブメニューを開きます。続いて、パネルを折りたたむか開き、パネルが表示されている間はチェックが付く Options panel と、Save file… があります。
このタブを開いている間は、クイック検索に Database、Bracket(Doctrine、JPA、SeaORM のみ)、Language、Table Name Case、Column Name Case、そしてパネルを折りたたむか開く Code Generator: Options panel が表示されます。

同じコード表示はテーブルのプロパティの Code Generator タブにもあり、そこではドキュメント全体ではなくそのテーブル 1 つ分のコードを生成します。そこにはオプションパネルがなく、コンテキストメニューは同じ設定を変更しますが、Options panel と Save file… はありません。
ドキュメント全体のコードがインポートやヘッダーで始まる場合、テーブル 1 つ分のコードは、PHP の <?php、Swift の import Foundation、JSON Schema の $schema のように、そのテーブルに必要なものから始まります。
コードはタブを開いたときに生成され、言語、データベース、名前のケース、括弧の種類のいずれかが変わるたびに書き直されます。タブを開いている間に共同編集者やコーディングエージェントなどがダイアグラムに加えた編集は、タブを離れて戻ったとき、またはこれらの設定のいずれかが変わったときに反映されます。
オプションパネル
パネルには、Saved in the document の見出しの下に Language、Database、Table Name Case、Column Name Case が並び、言語が Doctrine、JPA、SeaORM のいずれかの間は、その後に Bracket が続きます。どれもドロップダウンリストで、変更するとすぐにコードが書き直されます。
選択している言語が Database や名前のケースを使わない場合、それらは Not used by DBML のような注記を下に付けて淡い色でパネルに残り、変更することもできます。
パネルの下部には Save file と Copy があります。結果の保存とコピーを参照してください。
これらはダイアグラム自身の設定で、コンテキストメニューとクイック検索が変更するのも同じ設定です。Database は、ほかの編集と同じようにファイルに保存されます。
Language、Table Name Case、Column Name Case、Bracket は、設定タブでそれぞれのロック(Bracket の場合は Bracket Type)がオフの間だけ保存され、新しいダイアグラムではすべてのロックがオンになっています。ロックがオンの間は、変更すると画面のコードは書き直されますが、ファイルにはロックした値が残り、ダイアグラムはその値で開き直されます。パネルにはロックの状態は表示されません。選んだ値をファイルに残すには、そのロックをオフにします。ロックを参照してください。
言語
対応している対象は 22 種類で、言語、ORM、スキーマの 3 つのグループに分け、それぞれのグループをアルファベット順に並べています。パネルのリストとコンテキストメニューでは、グループの間に区切り線が引かれますが、グループの名前は表示されません。
| 対象 | グループ | リレーションシップ | インデックス | ON DELETE / ON UPDATE | 保存時の拡張子 |
|---|---|---|---|---|---|
C# | 言語 | — | — | — | .cs |
Go | 言語 | — | — | — | .go |
Java | 言語 | — | — | — | .java |
Kotlin | 言語 | — | — | — | .kt |
PHP | 言語 | — | — | — | .php |
Rust | 言語 | — | — | — | .rs |
Scala | 言語 | — | — | — | .scala |
Swift | 言語 | — | — | — | .swift |
TypeScript | 言語 | — | — | — | .ts |
Doctrine | ORM | ✓ | ✓ | ON DELETE のみ | .php |
Drizzle | ORM | ✓ | ✓ | ✓ | .ts |
JPA | ORM | ✓ | — | — | .java |
SeaORM | ORM | ✓ | ユニークのみ | ✓ | .rs |
Sequelize | ORM | ✓ | ✓ | ✓ | .ts |
SQLAlchemy | ORM | ✓ | ✓ | ✓ | .py |
TypeORM | ORM | ✓ | ✓ | ✓ | .ts |
AML | スキーマ | ✓ | ✓ | ✓ | .aml |
DBML | スキーマ | ✓ | ✓ | ✓ | .dbml |
GraphQL | スキーマ | ✓ | — | — | .graphql |
JSON Schema | スキーマ | — | — | — | .json |
Mermaid | スキーマ | ✓ | — | — | .mmd |
Zod | スキーマ | — | — | — | .ts |
既定値は GraphQL です。どの対象もカラムを出力し、✓ はそれ以外に何を出力するかを示します。
テーブルはキャンバス上の並びではなく名前順に出力し、インデックスはテーブルのプロパティの Indexes に一覧表示されたものを使い、その上にある Keys の行は使いません。SeaORM はユニークなインデックスだけを出力し、Mermaid はユニークなカラムに UK のマークを付けますが、インデックスは出力しません。
Java、AML、DBML、Mermaid 以外のすべての対象は、主キーのカラムを、Not Null が設定されているかどうかにかかわらず null を許容しないカラムとして出力します。Java はどのカラムにも null を許容するかどうかを示さず、AML、DBML、Mermaid はダイアグラムにあるとおりのフラグを保持します。
いくつかの対象が出力する内容は次のとおりです。
PHP: 型付きの public プロパティを持つプレーンなクラスで、<?phpとdeclare(strict_types=1);で始まります。Doctrine: 属性を使った Doctrine ORM 3 のエンティティで、DBAL 4.2 以降向けです。各カラムには、選択しているデータベースに合わせた DBAL の型とオプションが付きます。Rust: テーブルごとのpub structで、型はchrono::NaiveDateTimeやrust_decimal::Decimalのように完全なパスで書き、useの行はありません。SeaORM: dense 形式の SeaORM 2.0 のエンティティで、各テーブルをpub modにするため、テキスト全体を 1 つのファイルとしてコンパイルできます。Swift: テーブルごとのCodable、Hashable、Sendableな struct で、Swift 6.1 以降が必要です。TypeScript: 行を JSON として表すテーブルごとのexport interfaceで、Zodのスキーマと同じく、日付や時刻はstring、null を許容するカラムはT | nullになります。Zod: テーブルごとの Zod 4 の行スキーマと、そこから推論される型です。挿入用のスキーマとリレーションはありません。JSON Schema: JSON Schema draft 2020-12 のドキュメント 1 つで、$defsの下にテーブルごとの行スキーマがあります。Mermaid: GitHub が描画する種類のerDiagramです。各テーブルは、すべてのカラムをその型とPK、FK、UKのマークとともに並べるエンティティになり、各リレーションシップはその 2 つのテーブルを結ぶ線になります。
AML、DBML、GraphQL は往復できる形式です。いずれも読み込み元にもなります。ファイルの読み込みと書き出しを参照してください。ほかのスキーマである JSON Schema、Mermaid、Zod は出力のみです。
DBML は各テーブルの色を headercolor として出力し、ドキュメント全体のコードでは、テーブルを含む各テーブルグループについて、Ref の後に TableGroup ブロックを出力します。AML はテーブルの色を、AML の色名のうち最も近いものとして出力します。
ON DELETE と ON UPDATE
リレーションシップの ON DELETE と ON UPDATE のアクションは、そのリレーションシップのコンテキストメニューから設定します。ON DELETE と ON UPDATE を参照してください。
言語の表の ON DELETE / ON UPDATE 列に ✓ がある対象は、リレーションシップに設定したアクションを出力します。Not set のままのアクションは何も出力しません。
ORM の対象がどのアクションを残すかは選択しているデータベースによって決まりますが、AML と DBML はすべてを残します。データベースを参照してください。
Doctrineは ON DELETE だけを出力します。Doctrine には ON UPDATE がないためです。所有側のManyToOneまたはOneToOneの各#[ORM\JoinColumn]に、#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]のようにonDelete: 'CASCADE'を追加し、逆側のOneToManyまたはOneToOneには何も出力しません。主キーではないユニークなカラムへのリレーションシップは通常のカラムのままになり、Doctrine はこれを関連付けなしでマッピングするため、アクションを出力しません。Drizzleは小文字で出力します。.references()では{ onDelete: "cascade", onUpdate: "set null" }のようなオプションになり、複数カラムのキーに出力されるforeignKey()では.onDelete("restrict").onUpdate("no action")のようにチェーンでつなげます。SeaORMは子テーブルのbelongs_toリレーションに、ON UPDATE を先にして、SeaORM の名前NoAction、Cascade、SetNull、SetDefault、Restrictで、on_update = "Cascade", on_delete = "SetNull"のように出力します。親テーブルのhas_oneまたはhas_manyには出力しません。SequelizeはonDelete: "CASCADE"とonUpdateの項目を、hasManyまたはhasOneと、belongsToの両方の関連付けの呼び出しに出力します。複数カラムのキーには関連付けの呼び出しを出力しないため、Sequelizeはそのキーのアクションを出力しません。SQLAlchemyはondelete="CASCADE"とonupdateの引数を、1 カラムのキーではForeignKey()に、複数カラムのキーではForeignKeyConstraint()に渡します。TypeORMはonDelete: "CASCADE"とonUpdateのオプションを所有側の@ManyToOneまたは@OneToOneに出力し、逆側には出力しません。SET DEFAULTは常に省きます。TypeORM ではこれがDEFAULTと書き出され、どのデータベースもそれを受け付けないためです。DBMLは[delete: set null, update: no action]のような設定をRefに追加します。AMLは、アクションを持つリレーションシップをカラムにインラインで書くのではなく、{onDelete: cascade, onUpdate: "set null"}のようなプロパティを付けた独立したrel文として出力します。
JPA はアクションを出力しません。標準の JPA にはそのためのオプションがなく、コード生成は Hibernate の @OnDelete を使わないためです。Mermaid も出力しません。erDiagram の線にはアクションを書く場所がないためです。
テーブル 1 つを表示するテーブルのプロパティの Code Generator タブでは、DBML は Ref を、AML は rel 文を出力しないため、どちらもそこではアクションを表示しません。AML は、アクションを持つ 1 カラムのリレーションシップを、アクションを持たないものと同じようにカラムにインラインで残します。Mermaid はそこではリレーションシップの線をまったく出力しません。Doctrine と SeaORM は、そこでもドキュメント全体と同じエンティティを、アクションも含めて出力します。
名前のケース
Table Name Case と Column Name Case は、それぞれ Pascal、Camel、Snake、None に対応しています。
既定値はテーブル名が Pascal、カラム名が Camel です。None はダイアグラムに書かれているとおりの名前を出力します。
どのケースでも、対象の言語が予約している名前は、その言語でエスケープできる場合は C# の @class や Rust の r#type のようにエスケープし、エスケープできない場合は Java の class_ のように名前を変えます。
AML、DBML、Mermaid はどちらの設定も無視し、常にダイアグラムの名前をそのまま出力します。
SeaORM もこれらを無視します。フィールドとモジュールには、SeaORM が読み戻す形であるスネークケースで名前を付け、保存されている名前を table_name と、名前が異なる場合は column_name で示します。
これら 4 つの対象では、パネルの両方のリストが淡い色で表示され、その下に Not used by の注記が付きます。
データベース
データ型は選択しているデータベースに合わせて解決されます。データベースを参照してください。
このタブでは、パネルの Database のリスト、コンテキストメニューの Database、またはクイック検索から選ぶと、すぐにコードが書き直されます。これはダイアグラムの唯一のデータベースの設定で、キャンバスのコンテキストメニューや Schema SQL タブが設定するものと同じため、ここで変更するとそちらにも反映されます。
Drizzle は同じ設定から方言を決定します。PostgreSQL では pgTable、MySQL と MariaDB では mysqlTable、SQLite では sqliteTable、それ以外のデータベースでは pgTable を使います。
SeaORM は、PostgreSQL、MySQL、MariaDB、SQLite では、SeaORM がそのままでは別のカラムの型を作成する場合に column_type を出力し、SeaORM にバックエンドがない MSSQL、Oracle、Snowflake、Databricks では出力しません。
選択しているデータベースは、ORM の対象がどの ON DELETE と ON UPDATE のアクションを出力するかも決定します。
Doctrine、SeaORM、Sequelize、SQLAlchemy、TypeORM は、MySQL と MariaDB の SET DEFAULT、MSSQL の RESTRICT、Snowflake と Databricks の NO ACTION 以外のすべてのアクションのように、そのデータベースの Schema SQL が省くアクションを省くため、データベースの既定の動作が適用されます。すべての一覧は ON DELETE と ON UPDATE にあります。
Drizzle は代わりに、出力する方言に従います。mysqlTable のコードは SET DEFAULT を省き、pgTable と sqliteTable のコードはすべてのアクションを残します。MSSQL、Oracle、Snowflake、Databricks 向けに出力する pgTable のコードも同様です。
AML、DBML、Mermaid は例外です。データ型をダイアグラムに書かれているとおりに出力するため、データベースの設定は出力を変えず、パネルではこれらの対象の Database が淡い色で表示されます。AML と DBML はリレーションシップに設定したアクションをすべて出力し、Mermaid は何も出力しません。
Bracket
Bracket は、言語が Doctrine、JPA、SeaORM のいずれかの間だけ、パネル、コンテキストメニュー、クイック検索に表示されます。
Schema SQL タブの括弧の種類と同じ設定のため、ここで変更すると Schema SQL での名前の囲み方も変わります。Schema SQL を参照してください。選択肢は SingleQuote、DoubleQuote、Backtick、None で、最初は None です。
Doctrine:None以外の括弧の種類では、すべてのテーブル名、カラム名、結合カラム名をバッククォートで囲みます。これは Doctrine で引用符を付ける名前を示す方法で、#[ORM\Table(name: '`order`')]のようになります。Noneでは、データベースの予約語、単純な ASCII の識別子ではない名前、引用符で囲んで入力した名前のように、必要な名前だけを囲みます。JPA:None以外の括弧の種類では、予約語であるテーブル名を@Table(name = "\"user\"")のように@Tableの中で引用符で囲みます。Noneでは、Schema SQL と同じように囲まずにそのまま残します。SeaORM:Noneでは、名前をデータベースが保存するとおりに書きます。ドットを含むテーブル名はschema_nameとtable_nameに分け、PostgreSQL では引用符のない名前を小文字にします。それ以外の括弧の種類では、名前を書かれたとおりそのまま保ちます。
結果の保存とコピー
オプションパネルの下部の Save file、またはコンテキストメニューの Save file… は、表示されているコードをファイルとして保存します。
ファイルの名前はほかの書き出しと同じく <データベース名>-<時刻> に言語の表の拡張子を付けたもので、例えば shop-2026-10-12T04_05_06.ts のようになり、使っているホストでほかの書き出しと同じ場所に保存されます。書き出しを参照してください。Java と JPA は、タブに表示されているとおり、すべてのクラスを 1 つの .java ファイルに入れます。
Export メニューには Code Generator の項目はなく、テーブルのプロパティの Code Generator タブではファイルを保存できません。
コードをコピーするには、パネルの下部の Copy をクリックするか、コードにマウスを重ねて右上のコピーボタンをクリックします。テーブルのプロパティでは、コピーボタンが唯一の方法です。
チェックマークの付いた Copied! のトーストが 2 秒間表示されます。ブラウザやホストがクリップボードを拒否した場合は、代わりに警告マークの付いた Couldn't copy to the clipboard のトーストが表示されます。もう一度コピーすると、トーストが増えるのではなく置き換わります。
テキストは選択もできるため、必要な部分だけを取り出せます。