Node.js Sequelizeでトランザクションを実装




Node.jsで使えるORM

SequelizeはNode.jsで使えるORMです。DBとのやりとりを簡単にしてくれます。SequelizeはORMだけでなくDBのマイグレーションもできます。詳細は下記を参照してください。

関連記事:Node.js Sequelizeでマイグレーションを行う手順

トランザクションの実装

トランザクションも簡単に実現できます。実装はasync/awaitを使っているので適宜読み替えてください。

sequelizeはすでにインスタンス化済みのものです。そこからtransaction()を使うだけでトランザクションを開始できます。

同じトランザクションで処理したい関数はtransactionという引数にtxを渡してあげることで同じトランザクションで処理できます。

sequelize.transaction(async function(tx) {

    await User.destroy({
        where: {
            id: [1,2,3]
        },
        transaction: tx
    });

    await Item.destroy({
        where: {
            id: [1,2,3]
        },
        transaction: tx
    });
});

このソースコードを実行するとトランザクションを開始してから各クエリが同じトランザクションで実行されていることがわかります。ログのカッコの中身がトランザクションIDになっています。コミットは最後まで処理が完了すると自動で実行してくれます。

Executing (21df761f-be66-4908-a865-289b719d2902): START TRANSACTION;
Executing (21df761f-be66-4908-a865-289b719d2902): DELETE FROM `user` WHERE `id` IN (1,2,3)
Executing (21df761f-be66-4908-a865-289b719d2902): DELETE FROM `item` WHERE `id` IN (1,2,3)
Executing (21df761f-be66-4908-a865-289b719d2902): COMMIT;

トランザクションの途中でエラーが発生するとロールバックも自動で行ってくれます。

Executing (370f6e53-de11-4163-b46b-8e01aee1a332): START TRANSACTION;
Executing (370f6e53-de11-4163-b46b-8e01aee1a332): DELETE FROM `user` WHERE `id` IN (1,2,3)
Executing (370f6e53-de11-4163-b46b-8e01aee1a332): DELETE FROM `item` WHERE `id` IN (1,2,3)
Executing (370f6e53-de11-4163-b46b-8e01aee1a332): ROLLBACK;

まとめ

Sequelizeはトランザクションレベルも細かく決めれるのでNode.jsでは鉄板のORMになるんじゃないかなと思っています。扱い方も簡単ですし、マイグレーションもできたりと多機能だけどシンプルなAPIがいいのでオススメします。

おすすめ書籍

基礎から応用までサンプルコードを使って解説しており、Node.jsが初めての人でも読める技術書となっています。上級者向けにはExpressフレームワークを使った実用的な開発手法の解説もありこれからアプリケーションを開発する人の参考になると思います。現状では書き方が古くなっていますが、Node.jsの初心者から上級者で学ぶことの多い書籍です。

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です