2
1

More than 1 year has passed since last update.

Nodejs の postgresql ドライバ (Sequelize, Prisma) を少し触ってみた。

Posted at

@kenmaroです。
普段は主に秘密計算、準同型暗号などの記事について投稿しています
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

概要

Nodejs のドライバを使ってpostgresqlに接続するテストを行った際に、
どのようなドライバやライブラリ、フレームワークがあるのかを調べたので簡単に備忘録的にまとめてみます。

初めにまとめ

いくつかDBドライバ的なものは存在して、有名なものも幾つかありましたが、
この二つが中でも有名なようでした。

  • Sequelize

DBへのORMをもったライブラリであり、簡単に接続したいのであればこれを使うのが良さそうです。

  • Prisma

ライブラリというよりはフレームワーク的な感じでいろいろとフォルダ構成など必要になるようです。
ウェブアプリなどを構成する上でがっつりと開発するなら使ってみてもいいでしょう。
かなり人気が高まっているようです。

どちらも試してみたのですが、
私の場合目的がサクッと試すという目的だったため、Sequelize を最終的には主に使いました。

環境構築

postgresql はローカルに構築せず(してもいいですが、)、Docker を使ってサクッと開発環境を構築した方が簡単です。

docker-compose.yml
version: "2"
services:
  mysql:
    restart: always
    image: mysql:latest
    ports: ["3306:3306"]
    environment:
      MYSQL_DATABASE: 'test'
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_USER: 'postgres'
      MYSQL_PASS: 'password'
    volumes:
      - /mnt/data/mysql:/var/lib/mysql
  pgdb:
    container_name: pg_db
    image: postgres:latest
    ports: ["5432:5432"]
    environment:
      - POSTGRES_PASSWORD=password"
    command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]

このように mysql やpostgresql を簡単に構築できるdocker-compose.yml を
作っておくととても便利ですね。

このymlと同階層で、

$docker-compose up -d pgdb

で開発postgresqlを立ち上げましょう。

立ち上げたら、psqlというクライアントCLIライブラリを使って接続テストしてみます。
デフォルトでは postgres というユーザpostgres というデータベース が構築されており、
パスワードはdocker-compose で指定しているものです。

よって、接続コマンドは

psql -U postgres -h localhost -d postgres

となります。

このあと、自分で開発用のユーザを作ったり、開発用のデータベースを作ってもいいですし、
めんどくさければとりあえずデフォルトのユーザpostgres、データベースpostgres
を使ってもいいと思います。

psqlでいろいろDBをいじるコマンドは以前まとめたのでこの記事をご覧ください。

Sequelize

公式はこちらから

導入には以下を参考にさせていただきました。

コネクション確立のパラメターなどはこちらを参考に
https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-constructor-constructor

実際にコネクトしてみます。
フォルダ構成などは関係なく、index.jsだけで実質大丈夫なのでサクッと試せます。

mkdir nodetest
cd nodetest
npm init -y
npm install --save sequelize
npm install --save pg pg-hstore
touch index.js
index.js
const { Sequelize, Model, DataTypes, QueryTypes } = require('sequelize');
//const sequelize = new Sequelize('sqlite::memory:');
const sequelize = new Sequelize('postgres', 'user', 'password', {
  host: 'localhost',
  port: 8088,
  dialect: 'postgres',
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
});

class Test extends Model {}
Test.init({
  c1: DataTypes.STRING,
}, { sequelize, modelName: 'test' });

(async () => {
  await sequelize.sync();
  //const res = await Test.findAll();
  //const res = await sequelize.query(`SELECT * FROM "test"`, { type: QueryTypes.SELECT });
  const res = await sequelize.query('SELECT id FROM "test"', { type: QueryTypes.SELECT });
  console.log("here done");
  console.log(res);
  //const jane = await Test.create({
  //  username: 'janedoe',
  //});
  //console.log(jane.toJSON());
})();


node index.js

これでクエリ結果を受け取ることができるはずです。

Prisma

Prisma についてはまだそこまで記事が多くないイメージでしたが、
私は上二つの記事をフォローして触ってみるのが一番しっくりきました。

しかしながら、ちょっとサクッと試すにはステップが多いかなあと思いました。。

まとめ

最近は個人的にはfirebase をひたすら使っており、久しぶりにnodejsのライブラリについて調べてみましたが、
なかなか面白かったです。

他の言語のドライバについても調べてみようかな、、

今回はこの辺で。

@kenmaro

2
1
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
2
1