Dev Study
NestJS コース

29. トランザクション

トランザクションは、複数の更新を「全部成功」か「全部失敗」のどちらかにまとめる仕組みです。代表例は送金で、口座Aから引く更新と口座Bに足す更新は、両方成功しなければ片方だけ反映されて残高がおかしくなります。途中で失敗したら開始時点まで巻き戻す(ロールバックする)ことで、データの一貫性を守ります。この All or Nothing の考え方は ORM や DB が違っても共通です。

TypeORM では DataSource.transaction(async (manager) => { ... }) を使うのが手軽で、コールバック内の処理がすべて成功すれば自動でコミット、例外が投げられれば自動でロールバックされます。より細かく制御したい場合は QueryRunner で開始・コミット・ロールバックを手動で書きます。下のコードはこの commit / rollback の挙動を、確定済みデータと作業用コピー・try/catch でプレーン TypeScript に再現したものです。

つまずきポイントは、トランザクションの外で更新してしまうことです。同じ処理でも別々のリポジトリ呼び出しに分けると、片方だけ成功して中途半端な状態が残ります。まとめて成功・失敗させたい一連の更新は、必ず1つのトランザクションの内側で実行する、という線引きを意識しましょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

TypeScript
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗