Knex.js や TypeORM を使って Node.js で PostgreSQL をさらに使いこなす
Node.js で PostgreSQL モジュールを適切に利用する方法
Node.js は、JavaScript で動作するバックエンド開発に人気の高いランタイム環境です。一方、PostgreSQL は、高性能でスケーラブルなオープンソースのデータベースです。これらの技術を組み合わせることで、Web アプリケーションやサーバーサイドアプリケーションの強力なバックエンドを構築できます。
Node.js 用 PostgreSQL モジュール
Node.js で PostgreSQL と連携するには、いくつかのモジュールを利用できます。最も人気のあるモジュールは pg です。pg は、非同期操作をサポートする高性能な PostgreSQL クライアントライブラリです。
pg モジュールのインストール
pg モジュールをインストールするには、次のコマンドを実行します。
npm install pg
pg モジュールの基本的な使い方
pg モジュールを使用して PostgreSQL データベースに接続するには、次のコードを使用します。
const { Client } = require('pg');
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'mydb',
password: 'mypassword',
port: 5432
});
client.connect();
このコードは、次のことを行います。
pg
モジュールからClient
クラスをインポートします。Client
クラスの新しいインスタンスを作成します。- インスタンスのプロパティを設定します。
user
: PostgreSQL ユーザー名host
: PostgreSQL サーバーのホスト名database
: 接続するデータベース名password
: PostgreSQL ユーザーのパスワード
connect()
メソッドを呼び出して、データベースに接続します。
データベースに接続したら、クエリを実行したり、データを取得したり、更新したりできます。
クエリの実行
クエリを実行するには、query()
メソッドを使用します。
client.query('SELECT * FROM mytable', (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res.rows);
});
このコードは、mytable
テーブルからすべての行を取得し、コンソールに出力します。
データの取得
クエリ結果からデータを取得するには、rows
プロパティを使用します。
client.query('SELECT * FROM mytable', (err, res) => {
if (err) {
console.error(err);
return;
}
const rows = res.rows;
for (const row of rows) {
console.log(row);
}
});
データの更新
データを更新するには、execute()
メソッドを使用します。
client.execute('UPDATE mytable SET name = $1 WHERE id = $2', ['John Doe', 123], (err, res) => {
if (err) {
console.error(err);
return;
}
console.log('Updated row:', res.rowCount);
});
このコードは、mytable
テーブルの id
が 123 の行の name
列を 'John Doe' に更新します。
データベースの切断
データベースとの接続を切断するには、end()
メソッドを使用します。
client.end();
このチュートリアルでは、Node.js で PostgreSQL モジュールの基本的な使い方について説明しました。pg モジュールを使用して、データベースに接続し、クエリを実行し、データを取得し、更新する方法を学びました。
- pg モジュール
- PostgreSQL データベースがインストールされ、実行されていること
- Node.js がインストールされていること
手順
- 次のコマンドを使用して、pg モジュールをインストールします。
npm install pg
- 次のコードを
app.js
という名前のファイルに保存します。
const { Client } = require('pg');
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'mydb',
password: 'mypassword',
port: 5432
});
client.connect();
// データの挿入
client.query('INSERT INTO users (name, email) VALUES ($1, $2)', ['John Doe', '[email protected]'], (err, res) => {
if (err) {
console.error(err);
return;
}
console.log('Inserted user:', res.rowCount);
});
// データの取得
client.query('SELECT * FROM users', (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res.rows);
});
// データの更新
client.query('UPDATE users SET name = $1 WHERE id = $2', ['Jane Doe', 123], (err, res) => {
if (err) {
console.error(err);
return;
}
console.log('Updated user:', res.rowCount);
});
// データの削除
client.query('DELETE FROM users WHERE id = $1', [123], (err, res) => {
if (err) {
console.error(err);
return;
}
console.log('Deleted user:', res.rowCount);
});
client.end();
- 次のコマンドを使用して、アプリケーションを実行します。
node app.js
- PostgreSQL データベースに接続します。
users
テーブルに新しいユーザーを挿入します。- データベースとの接続を切断します。
説明
このコードは、CRUD 操作の例を示すものです。実際のアプリケーションでは、独自の要件に合わせてコードをカスタマイズする必要があります。
- トランザクションを使用して、データの整合性を保つ必要があります。
- パラメータ化されたクエリを使用して、SQL インジェクション攻撃を防ぐ必要があります。
- エラー処理を適切に追加する必要があります。
PostgreSQL を使用する Node.js アプリケーションの他の方法
Node.js で PostgreSQL データベースと連携するには、pg モジュール以外にもいくつかの方法があります。以下に、いくつかの代替手段と、それぞれの利点と欠点について説明します。
knex.js
Knex.js は、JavaScript で SQL クエリを構築するためのライブラリです。Knex.js を使用すると、データベースに依存しないコードを記述できます。また、さまざまなデータベースとの互換性も備えています。
利点
- クエリをより簡潔に記述できる
- さまざまなデータベースとの互換性がある
- データベースに依存しないコードを記述できる
欠点
- pg モジュールほど高速ではない
- pg モジュールよりも複雑
TypeORM
TypeORM は、Object-Relational Mapping (ORM) フレームワークです。TypeORM を使用すると、JavaScript オブジェクトとデータベーステーブル間のマッピングを自動的に行うことができます。
- データベースとの複雑なクエリを簡単に実行できる
- JavaScript オブジェクトとデータベーステーブル間のマッピングを自動的に行える
- Knex.js や pg モジュールほど高速ではない
- Knex.js や pg モジュールよりも複雑
Sequelize
Sequelize は、TypeORM に似たもう 1 つの ORM フレームワークです。Sequelize は、さまざまなデータベースとの互換性と、豊富な機能を提供しています。
- TypeORM と同様の利点を備えている
- 豊富な機能を提供している
- TypeORM や pg モジュールよりも複雑
Native PostgreSQL Driver
Node.js のネイティブ PostgreSQL ドライバーを使用することもできます。これは、最も低水準な方法であり、pg モジュールよりも多くの制御を提供します。
- pg モジュールよりも多くの制御を提供する
- Knex.js や TypeORM などの ORM フレームワークの利点を備えていない
最適な方法は、特定のニーズによって異なります。pg モジュールは、シンプルで使いやすいので、初心者にとって良い選択肢です。Knex.js は、データベースに依存しないコードを記述したい場合に適しています。TypeORM や Sequelize は、複雑なデータモデルを扱う場合に適しています。ネイティブ PostgreSQL ドライバーは、パフォーマンスが重要で、より多くの制御が必要な場合に適しています。
javascript postgresql node.js