トランザクションとは?メリットや必要性は?初心者にもわかりやすく丁寧に

トランザクションとは?メリットや必要性は?初心者にもわかりやすく丁寧に プログラミング

プログラミングにおける「トランザクション」は非常に重要です。

  • トランザクションとは何か?
  • トランザクションにするメリットや必要性は?
  • 一緒によく出てくる「ロールバック」や「コミット」って?

初心者の方にもわかりやすく丁寧に解説します!

 



1.トランザクション(transaction)とは

もともとは「取引」の意味ですが、プログラムの業界では、そこから転じて「分割不可な一連の処理」のことを指します。要するに、「複数の処理をまとめてしたい」ってことです。

これは、もともとの「取引」から考えるとわかりやすいです。例えば「商品を渡して、代金を受け取る」という取引を考えてみると、必要な処理は次の2つです。

トランザクション(=取引)の例

  1. 商品を受け取る
  2. 代金を払う

これらは、どちらか片方だと取引が成立しません。片方では強盗や寄付になってしまいます。全て正しく処理するか、全てなかったことにするか、どちらかです。その一連の処理を「トランザクション」と言います。なら同時に行えば良いじゃないか、と思う気持ちもわかりますが、厳密に全く同時に行うというのは非現実的ですし、通常、お互い確認しながら順番に行いますよね。

プログラムも全く同様です。プログラムは、上から1行ずつ処理していくという大原則がありますから、なおさら、「ここからここまではワンセットでまとめて処理したい」という場合には、それらの一連の処理をトランザクションにする必要があります。

2.ロールバックとは(トランザクションの必要性)

でも、どうしてわざわざ「ワンセットだ!」と指定する必要があるのでしょうか? 商品を受け取って、代金を払って、取引成立でそれで良いではないか?

良い質問です。その答えがまさに、トランザクションの有難み、つまりメリットであり必要性です。

答えは、「途中で失敗した場合に、矛盾が生じる(取引が成立しなくなる)のを避けるため」です。トランザクションは、一連の処理が、どこか途中で失敗した場合に真価を発揮するのです。

どういうことか。例えば、先ほどの例で、

トランザクションが途中で失敗した例

  1. 商品を受取ろうとした→受け取った(成功)
  2. 代金を払おうとした→財布にお金が足りなかった→代金を払えなかった(失敗)

となったとします。たまにありますよね。ここで、1番目の処理は成功している、すなわち、商品は既に受け取っているわけですが、「一度は受け取ったんだから返さないよ!?」というわけにはいかんでしょう。お金が足りないなら商品を返すのが筋です。つまり、1番目の処理はなかったことになり、戻す作業が必要です。このように、「一連の処理が途中でひとつでも失敗したら、それまでに成功した処理を元に戻してなかったことにする」必要があるのです。

この後半部分、すなわち「それまでの処理を元に戻してなかったことにする」ことを、プログラムの世界では「ロールバック」と言います。

複数の処理をトランザクションにすることで、途中で失敗した場合に、全てをなかったことに出来るのです。一連の処理が途中でひとつでも失敗した場合に、適切にロールバックさせる。そのためにトランザクションにするのだと言っても過言ではありません。

3.コミットとは(トランザクション成功の処理)

別の視点で考えると、「一連の処理が途中でひとつでも失敗したら、それまでに成功した処理を元に戻してなかったことにする」のであれば、1番目の商品を受け取った時点では、その処理はまだ「仮」なわけですね。だって、その後どこかで失敗したら、その処理はなかったことにされるわけですから。全ての処理が正常に行われて初めて、晴れて全ての処理内容が正式に確定するわけです。この確定させる作業を「コミット」と呼びます。

トランザクションまとめ

以上より、トランザクションとは、

トランザクションとは、商取引のような、分割不可な一連の処理のこと。

トランザクション失敗→ロールバック
 = 途中でひとつでも処理が失敗したら、それまでの処理をなかったことにする。

コミット→トランザクション成功
 = 全て成功して初めて、全ての処理を確定させる。

なんなら、

「途中で失敗したときにどこまでロールバックするか、どこまで成功したらコミットするか」を決めておく役割

と言ってもいいかもしれません。

参考文献

こちらの記事を参考に、よりわかりやすく丁寧にまとめたつもりです。合わせて読むと、理解が深まるかと思います。

トランザクションとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
用語「トランザクション (transaction)」の意味を何となく説明しています。
「トランザクション」とは何か?を超わかりやすく語ってみた! - Qiita
2019/4/20 部分改訂 ========================================================- 0.はじめに 前々回の投稿「CPU使用率100%は悪なのか?」につきましては、...
はるすと
はるすと

最後まで読んでくださってありがとうございました!

画像提供:Darkmoon_ArtによるPixabayからの画像

この記事を書いた人
こもれびエンジニア

自然と自由を愛するエンジニア。2021年1月に、大手製造業設計からプログラマ(Rails, AWS)へ転職。動物や自然との触れ合いや、汗を流すのが好き。

/HSP(繊細さん)/18デリケートな象/ストレングスファインダー(1分析思考/2親密性/3学習欲/4調和性/5収集心)、テニス、合気道、登山、あいだみつを、ジブリ、ワンピース、ドラゴンボール、AWS、Ruby on Rails、アイミング

はるすとをフォローする
プログラミング
スポンサーリンク
SNSでシェア/コメントしていただけると、投稿の励みになります! ↓ 各ページへジャンプ ↓
はるすとをフォローする
「そんなか」サイト

コメント

タイトルとURLをコピーしました