シンプルな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文を貼り付けるだけで本番対応のモデル定義を即座に取得できます。

試してみる — SQL to Sequelize Model

フルツールを開く