【Ruby3.x】Ractor::store_if_absent()メソッドの使い方
store_if_absentメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
store_if_absentメソッドは、Ractorオブジェクト内のキーと値のペアを安全に格納するメソッドです。Ractorは、Ruby 3から導入された、複数の処理を並行して実行するための独立した実行単位であり、複数のRactorが共有するデータを安全に操作することが求められます。
このメソッドは、引数として格納したいキーと値を受け取ります。そして、指定されたキーが対象のRactor内部にまだ存在しない場合にのみ、そのキーと値を新しく格納します。もし、すでに同じキーがRactor内に存在していた場合は、新しい値は格納されず、既存のキーに対応する元の値がそのまま返されます。一方、キーが存在せず、新しい値が正常に格納された場合には、その格納された値が戻り値として返されます。
この操作は「アトミック」に行われます。アトミックであるとは、複数のRactorが同時に同じデータへのアクセスを試みた場合でも、処理が途中で中断されることなく、最後まで一貫した状態を保ちながら実行されることを意味します。これにより、並行処理において発生しうるデータ競合の問題を防ぎ、複数のRactor間で共有されるデータが予期せぬ不整合を起こすことなく、安全に管理されることを保証します。特に、あるキーがまだ設定されていない場合にのみ初期値を設定したいといったシナリオで、このメソッドはデータの整合性を保ちながら非常に有効に活用できます。
構文(syntax)
1result_when_absent = Ractor.current.store_if_absent(:product_id_123, { name: "Laptop", price: 1200 }) 2result_when_present = Ractor.current.store_if_absent(:product_id_123, { name: "Keyboard", price: 75 })
引数(parameters)
key, value
- key: 格納する値のキー
- value: 格納する値
戻り値(return)
Object
指定されたキーが存在しない場合のみ、そのキーと対応する値をRactorの内部ストレージに格納します。格納に成功した場合は格納した値、既にキーが存在していた場合は既存の値を返します。