技術ブログ

プログラミング、IT関連の記事中心

Knex.js と TypeScript でのトランザクションの正しい取り扱い

目次

Knex.js と TypeScript でのトランザクションの正しい取り扱い

Knex.js は Node.js のための強力な SQL クエリビルダーで、トランザクションのサポートも充実しています。
しかし、トランザクションの取り扱いには注意が必要です。
この記事では、Knex と TypeScript を使用して、トランザクション内でのクエリの実行方法について説明します。

トランザクションの基本

Knex でのトランザクションは、transactionメソッドを使用して開始されます。
このメソッドはコールバック関数を引数として受け取り、このコールバック内で実行されるクエリは、同じトランザクションコンテキストで実行されます。

import Knex from 'knex';

const knex = Knex({
  // データベースの設定
});

await knex.transaction(async (trx) => {
  // ここでのクエリは同じトランザクション内で実行されます
});

明示的なコミットやロールバックの取り扱い

Knex のトランザクションは、提供されたコールバック関数内の処理が正常に終了した場合に自動的にコミットされ、エラーがスローされた場合に自動的にロールバックされます。
そのため、trx.commit()trx.rollback() を明示的に呼び出す必要はありません。

以下のようなコードは避けるべきです。

await knex.transaction(async (trx) => {
  try {
    // クエリの実行
    trx.commit();
  } catch (error) {
    trx.rollback();
  }
});

代わりに、エラーが発生した場合はエラーをスローするだけで十分です。
Knex がそのエラーを検出して、自動的にロールバックします。

await knex.transaction(async (trx) => {
  // クエリの実行
});

まとめ

Knex.js を使用すると、データベースのトランザクションを簡単に扱うことができます。
ただし、トランザクションの内部でのクエリの取り扱いや、明示的なコミットやロールバックの呼び出しには注意が必要です。
この記事を参考に、Knex でのトランザクションの取り扱いを正しく行いましょう。