こんにちは。花粉症で鼻水が止まらない日々が続いている hilotter です。 同一レコードに対し複数ユーザ(もしくはバッチ処理等)から同時に更新される可能性がある場合、排他制御を行う必要があります。 今回はシンプルなポイント付与機能を例に、悲観的ロックを用いた排他制御のテストを書いてみたいと思います。 シンプルなポイント付与機能仕様 ユーザは他のユーザにポイントを送ることができる 今回のサンプルは以下の環境で確認しました。 Rails 5.1.4 MySQL 5.7.20 MySQLのトランザクション分離レベル REPEATABLE-READ(デフォルト設定) add_pointメソッドの実装 Userモデルにポイントを付与できるadd_pointメソッドを追加します transaction内でlock!を用いて悲観的ロックをかけています。 # app/models/user.rb cl