Chapter 04

DB(PostgreSQL) - 操作編

is_ryo
is_ryo
2020.10.21に更新

DBを操作するための準備

sequelizepgを使ってDBを操作していきます。

まずnpmの初期化をします。この後に出てくる質問は全てそのままEnterでOKです。
package.jsonが生成されています。

$ npm init

pgをインストールします。

npm i sequelize sequelize-cli pg

package.jsonにコマンドを追記します。

package.json
...
  "scripts": {
    "sequelize": "sequelize", // add
    "test": "echo \"Error: no test specified\" && exit 1"
  },
...

sequelizeの初期化をします。

$ npm run sequelize init

実行するといくつかディレクトリが生成されていると思います。

データベースの作成

先ほど生成されたconfigディレクトリ内のconfig.jsonを下記のように編集します。

config.json
{
  "development": {
    "username": "root",
    "password": null,
    "database": "development",
    "host": "127.0.0.1",
    "dialect": "postgres"
  }
}

データベースを生成します。

npm run sequelize db:create

成功したらDBeaverで確認します。

モデル作成

TODOTaskというモデルを作成します。

$ npm run sequelize model:generate -- --name TodoTask --attributes uuid:uuid,title:string

成功したら、migrationsディレクトリにyyyymmddhhmmss-create-todo-task.jsとmodelsディレクトリにtodotask.jsが生成されていると思います。
yyyymmddhhmmss-create-todo-task.jsを下記のように修正します。

yyyymmddhhmmss-create-todo-task.js
'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('TodoTasks', {
      uuid: {
        allowNull: false,
        primaryKey: true,
        type: Sequelize.UUID
      },
      title: {
        allowNull: false,
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('TodoTasks');
  }
};

マイグレーション実行

マイグレーションを実行します。

$ npm run sequelize db:migrate

テーブルが生成されました。