sequelize-cli の使い方 - Node.js

  • 作成日:
  • 最終更新日:2025/08/02

sequelize の初期化

以下のコマンドを実行し sequelize の初期化を行います。

sequelize init

コマンドを実行した後のディレクトリ構造は、以下のようになります。

  • example
    • config
      • config.json
    • migrations
      • file
    • models
      • index.js
    • node_modules
    • seeders
    • file
    • package-lock.json
    • package.json

config/config.jsonにデータベースの情報を設定します。

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

以下のようにファイルを編集します。

{
  "development": {
    "username": "root",
    "password": "password",
    "database": "myapp_db_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": "password",
    "database": "myapp_db_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": "password",
    "database": "myapp_db_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

以下のコマンドを実行するとデータベースが作成されます。--env オプションを指定しないと、"development"の内容が作成されます。

sequelize db:create

以下のようにコマンドを実行すると、"test"の内容のデータベースが作成されます。

sequelize db:create --env test

データベースを削除するには、以下のようにします。--env オプションを指定しないと、"development"の内容が削除されます。

sequelize db:drop

以下のようにコマンドを実行すると、"test"の内容のデータベースが削除されます。

sequelize db:drop --env test

モデルの作成

モデルを作成するには、以下のコマンドを実行します。

sequelize model:create --underscored --name user --attributes "name:string, age:integer"

migrations/<タイムスタンプ>-create-<テーブル名>.jsmodels/user.jsが作成されます。

--underscoredを指定するとモデル定義とデータベースの列名・テーブル名が camelCase から snake_case に自動変換されます。

sequelize model:generate --name UserProfile --attributes firstName:string,lastName:string --underscoredと実行すると以下のモデルが作成されます。

module.exports = (sequelize, DataTypes) => {
  const UserProfile = sequelize.define('UserProfile', {
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING
  }, {
    tableName: 'user_profiles',
    underscored: true
  });
  return UserProfile;
};

マイグレーションファイルの実行

以下のコマンドを実行するとマイグレーションファイルを実行します。

sequelize db:migrate

シードデータの作成

シードファイルを作成するには、以下のコマンドを実行します。

# 構文
sequelize seed:generate --name ファイル名

sequelize seed:generate --name users

上記のコマンドを実行すると、「 seeders 」の中に「 YYYYMMDDHHMMSS-ファイル名.js 」というファイルが作成されます。

作成されたシードファイルを以下のように編集します。

'use strict';

const data = [{
  name: "taro",
  age: 20
},{
  name: "hanako",
  age: 18
}];

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    data.forEach((each) => {
      each.created_at = new Date();
      each.updated_at = new Date();
    });
    await queryInterface.bulkInsert('users', data, {});
  },

  async down (queryInterface, Sequelize) {
    await queryInterface.bulkDelete('users', null, {});
  }
};

以下のコマンドを実行すると、シードデータを挿入することができます。

sequelize db:seed:all

シードデータを削除するには、以下のようにします。

# 一番最後に実行したデータの取り消し
sequelize db:seed:undo

# 指定したシードデータの取り消し
sequelize db:seed:undo --seed 20240504111214-users.js

# 「 seeders 」以下のすべてのシードデータの取り消し
sequelize db:seed:undo:all

データの操作

データの取得

const db = require('./models/');
const User = db.user;

(async () => {
  try {
    const users = await User.findAll();
    console.log(users.map(u => u.toJSON()));
  } catch (err) {
    console.error(err);
  } finally {
    await db.sequelize.close();
    console.log('接続を閉じました');
  }
})();

データの保存

const db = require('./models/');
const User = db.user;

(async () => {
  try {
    const result = await User.create({ name: "Jon", age: 30 })
    console.log(result.toJSON());
  } catch (err) {
    console.error(err);
  } finally {
    await db.sequelize.close();
    console.log('接続を閉じました');
  }
})();

データの更新

const db = require('./models/');
const User = db.user;

(async () => {
  try {
    const result = await User.update(
      { name: "Maria", age: 25},
      { where: { id: 1} }
    );
    console.log(result);
  } catch (err) {
    console.error(err);
  } finally {
    await db.sequelize.close();
    console.log('接続を閉じました');
  }
})();

result に入る戻り値は、配列になり更新されたレコード数が入っています。更新されなかった場合や、更新の対象がなかった場合は、0が戻り値になります。

データの削除

const db = require('./models/');
const User = db.user;

(async () => {
  try {
    const result = await User.destroy(
      { where: { id: 1} }
    );
    console.log(result);
  } catch (err) {
    console.error(err);
  } finally {
    await db.sequelize.close();
    console.log('接続を閉じました');
  }
})();

result に入る戻り値は、配列になり削除されたレコード数が入っています。更新されなかった場合や、更新の対象がなかった場合は、0が戻り値になります。

where 条件を省略すると全レコードが削除されます。