3
2

More than 3 years have passed since last update.

sequelizeパッケージを初心者が使ってみる。

Last updated at Posted at 2019-11-23

sequelizeとは

Node.jsにはデータベースを利用するためのパッケージがたくさん存在します。
しかし、データベースを扱うにはSQLというデータベースを操作する言語が必要になります。
sequelizeというパッケージを使えば、SQLを知らなくても、Node.jsでデータベースを利用することができます。

さらに詳しく

sequlizeは公式によるとORM(Object-relational mapping, オブジェクト関係マッピング)と呼ばれるものらしいです。
以下は引用です。

オブジェクト指向の概念とリレーショナルデータベースの概念を橋渡しする役割がORMです。オブジェクト指向とリレーショナルデータベースの相性はそれぞれの概念が異なるため、相性が良くありません。なぜなら、オブジェクト指向では、データをオブジェクトとして扱うのですが、リレーショナルデータベースではデータを2次元の表として扱うためギャップが生じてしまいます。ORMを利用することによって、オブジェクトとデータベース問い合わせの相互変換を行います。
引用:ORMとは?

sequlizeはPostgreSQL、MySQL、MariaDB、SQLite、MicrosoftSQLServerに対応しているそうです。

sequlizeを利用してみる。

今回はsequlizeでpostgreSQLを利用してみます。

前提として以下を完了しておいてください。

① Node.jsのイントール
② Yarnのインストール
③ PostgreSQLのインストール 参考:https://lets.postgresql.jp/map/install

sequlizeを使う前にデータベースを作っておきます。
PostgreSQLのpsqlターミナルを起動し、以下のコマンドを入力してください。

$ create database rensyu;

データベース名は何でも構いません。
ここではrensyuとしておきます。

データベースが完成したら、sequelizeのインストールを行なっていきます。
以下のコマンドを入力してください。

$ yarn add sequelize
$ yarn add pg
$ yarn add pg-hstore

参照:sequelize入門

インストールが終わったら、
sequelizeを利用するためのJSファイルを準備し、
そのファイル内に以下を書き込みます。
今回はシンプルにIDと名前と年齢だけのデータベースを作っていきます。

post.js
'use strict';
const Sequelize = require('sequelize');
const sequelize = new Sequelize(
  'postgres://postgres:postgres@localhost/rensyu',
  {
    logging: false,
    define: {
      freezeTableName: true,
      timestamps: true
    }
  });
const Post = sequelize.define('Post', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  name: {
    type: Sequelize.STRING
  },
  age: {
    type: Sequelize.INTEGER
  }
});

Post.sync();
module.exports = Post;

解説をしていきます。

const sequelize = new Sequelize(
  'postgres://postgres:postgres@localhost/rensyu',
  {
    logging: false,
    define: {
      freezeTableName: true,
      timestamps: true
    }
  });

これは、sequelizeのインスタンスを作成しています。
その際に、接続するデータベースを先ほど作成したものに設定しています。
postgresql://{ユーザー名}:{パスワード}@{ホスト名}/{データベース名}というようになっています。自分で作ったPostgreSQLのユーザー名やパスワードを利用してください。
loggingはデータベースに接続する際、コンソールログを行わない設定です。
defineのfreezeTableName: trueはテーブル名を固定する設定です。
固定しないと、'Post'とテーブル名を定義しても、'Posts'というテーブル名に保存されることになってしまいます。つまり、勝手に複数形のテーブル名で保存されてしまうということです。
timestampは自動的にcreatedAtという作成日時とupdatedAtという更新日時を自動的に追加してくれる設定です。

const Post = sequelize.define('Post', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  name: {
    type: Sequelize.STRING
  },
  age: {
    type: Sequelize.INTEGER
  }
});

こちらはデータベースのテーブルやデータを定義し、Postというオブジェクトに代入しています。
'Post'はテーブル名です。
id, name, ageはテーブルの列です。
それぞれに数字であるのか、文字であるのかなどの設定がされています。
idのprimaryKey: trueというのは、データベースを操作する上で参照の対象となる主キーを、idに設定しているという意味です。

Post.sync();
module.exports = Post;

Post.sync();は、定義したPostというオブジェクトをデータベースに適用して同期を取っています。
module.exports = Post;は、オブジェクト自体をモジュールとして公開しています。

この他にもいろいろな設定オプションがあります。
https://sequelize.org/master/manual/getting-started.html

それでは、以上のデータベースを使ってみましょう。
適当なファイルを用意し、以下のような記述をします。

post-handler.js
const Post = require('./post');
Post.create({
    name: name,
    age: age
  });

const Post = require('./post');はモジュールをインストールしています。
Post.createでデータベースにデータを保存しています。
あとは、EJSやPugなどのテンプレートエンジンを使えば、nameとageに好きな値を入れて保存ができます。

以上です。

参考:sequelize APIリファレンス
参考:N予備校 プログラミングコース

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2