@kenmaroです。
普段は主に秘密計算、準同型暗号などの記事について投稿しています。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。
概要
Nodejs のドライバを使ってpostgresqlに接続するテストを行った際に、
どのようなドライバやライブラリ、フレームワークがあるのかを調べたので簡単に備忘録的にまとめてみます。
初めにまとめ
いくつかDBドライバ的なものは存在して、有名なものも幾つかありましたが、
この二つが中でも有名なようでした。
- Sequelize
DBへのORMをもったライブラリであり、簡単に接続したいのであればこれを使うのが良さそうです。
- Prisma
ライブラリというよりはフレームワーク的な感じでいろいろとフォルダ構成など必要になるようです。
ウェブアプリなどを構成する上でがっつりと開発するなら使ってみてもいいでしょう。
かなり人気が高まっているようです。
どちらも試してみたのですが、
私の場合目的がサクッと試すという目的だったため、Sequelize を最終的には主に使いました。
環境構築
postgresql はローカルに構築せず(してもいいですが、)、Docker を使ってサクッと開発環境を構築した方が簡単です。
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
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のライブラリについて調べてみましたが、
なかなか面白かったです。
他の言語のドライバについても調べてみようかな、、
今回はこの辺で。