シンプルなSQLテーブルをSequelizeモデルに変換する
基本的なSQL CREATE TABLE文をSequelizeのModel.init()定義に変換する方法を学びます。DataTypesマッピング、allowNull、tableNameオプションを解説します。
Basic Models
詳細な説明
CREATE TABLEからSequelize Model.init()へ
最も基本的な変換は、SQLのCREATE TABLE文をSequelizeのModel.init()呼び出しに変換することです。各カラムはDataTypes定数を持つフィールド定義になり、NOT NULLのような制約はallowNull: falseにマッピングされます。
SQLの例
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(320) NOT NULL,
age INTEGER,
is_active BOOLEAN NOT NULL DEFAULT true
);
生成されるSequelizeモデル
User.init({
id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false },
name: { type: DataTypes.STRING(255), allowNull: false },
email: { type: DataTypes.STRING(320), allowNull: false },
age: { type: DataTypes.INTEGER, allowNull: true },
is_active: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true },
}, {
sequelize,
modelName: 'User',
tableName: 'users',
});
主要なマッピングルール
| SQL要素 | Sequelizeの対応 |
|---|---|
| テーブル名 | tableNameオプション(元の名前)+ modelName(PascalCase単数形) |
| カラム名 | init()の属性オブジェクトのフィールドキー |
NOT NULL |
allowNull: false |
| Nullable | allowNull: true |
PRIMARY KEY |
primaryKey: true |
DEFAULT |
defaultValue: ... |
Modelクラス vs define()
SequelizeはクラスベースのModel.init()アプローチとsequelize.define()関数の2つのパターンをサポートしています。このコンバーターはクラスベースパターンを生成します。TypeScriptとの互換性が良く、アソシエーション用の静的メソッドをサポートし、Sequelize v6+で推奨されるアプローチだからです。tableNameオプションは常に明示的に設定され、正確なSQLテーブル名を保持します。modelNameは慣例としてPascalCase単数形を使用します。
ユースケース
既存のSQLデータベースがあり、新しいNode.js API用にSequelizeモデルを素早くスキャフォールドしたい場合。各モデルを手動で書く代わりに、CREATE TABLE文を貼り付けるだけで本番対応のモデル定義を即座に取得できます。