Slide 1

Slide 1 text

2024/09/05 omotesando.rb #101 株式会社タイミー 新谷哲平 いつか使えるObjectSpace @euglena1215

Slide 2

Slide 2 text

自己紹介 Shintani Teppei(@euglena1215) ● 株式会社タイミー ● バックエンド テックリード ● 最近は Ruby よりも日本語を 書いています

Slide 3

Slide 3 text

最初に質問 ObjectSpace 知ってる方 󰢧

Slide 4

Slide 4 text

こんな方向け ● ObjectSpace 知らない・触ったことない → これまでできなかったことができるようになるかも?

Slide 5

Slide 5 text

ObjectSpaceってなに? ObjectSpace は Ruby の組み込みライブラリ https://docs.ruby-lang.org/ja/latest/class/ObjectSpace.html

Slide 6

Slide 6 text

ObjectSpaceってなに? ObjectSpace は Ruby の組み込みライブラリ https://docs.ruby-lang.org/ja/latest/class/ObjectSpace.html

Slide 7

Slide 7 text

ObjectSpaceってなに? ObjectSpace は Ruby の組み込みライブラリ https://docs.ruby-lang.org/ja/latest/class/ObjectSpace.html 🧙🔮🧙

Slide 8

Slide 8 text

ObjectSpaceってなに? 今回は ObjectSpace モジュールに定義されているメソッド3つを紹介 ● ObjectSpace._id2ref ● ObjectSpace.count_objects ● ObjectSpace.each_object

Slide 9

Slide 9 text

ObjectSpace._id2ref

Slide 10

Slide 10 text

ObjectSpace._id2ref オブジェクトIDからオブジェクトを取得する

Slide 11

Slide 11 text

ObjectSpace._id2ref Q. どんなときに使える?

Slide 12

Slide 12 text

ObjectSpace._id2ref Q. どんなときに使える? A. Rails 6より前の ActiveSupport Instrumentation API の sql.active_record では connection_id を受け取っていた。id から connection を取得するために必要。

Slide 13

Slide 13 text

ObjectSpace._id2ref Q. どんなときに使える? A. Rails 6より前の ActiveSupport Instrumentation API の sql.active_record では connection_id を受け取っていた。id から connection を取得するために必要。 おそらく現代において使うことはほとんどないのでは...?

Slide 14

Slide 14 text

ObjectSpace.count_objects

Slide 15

Slide 15 text

ObjectSpace.count_objects オブジェクトの種類ごとに現時点で生成されている個数を返す

Slide 16

Slide 16 text

ObjectSpace.count_objects 例:blockとして渡した処理で生成されたHashオブジェクトの個数を返すメソッド

Slide 17

Slide 17 text

ObjectSpace.count_objects 例:blockとして渡した処理で生成されたHashオブジェクトの個数を返すメソッド

Slide 18

Slide 18 text

ObjectSpace.count_objects Q. どんなときに使える?

Slide 19

Slide 19 text

ObjectSpace.count_objects Q. どんなときに使える? A. メモリを意識したコードを書きたくなったとき...?

Slide 20

Slide 20 text

ObjectSpace.count_objects Q. どんなときに使える? A. メモリを意識したコードを書きたくなったとき...? Model.where(...).map(&:user_id) と Model.where(...).pluck(:user_id) の 生成オブジェクト数の違いを見てみると面白いかも

Slide 21

Slide 21 text

ObjectSpace.each_object

Slide 22

Slide 22 text

ObjectSpace.each_object 全てのオブジェクトもしくは任意のクラスのオブジェクトに繰り返し処理を行う

Slide 23

Slide 23 text

メタプログラミング Ruby の時間です クラスは全て Class クラスのインスタンス(オブジェクト)

Slide 24

Slide 24 text

メタプログラミング Ruby の時間です クラスは全て Class クラスのインスタンス(オブジェクト) ObjectSpace.each_object(Class) を実行すると...

Slide 25

Slide 25 text

メタプログラミング Ruby の時間です クラスは全て Class クラスのインスタンス(オブジェクト) ObjectSpace.each_object(Class) を実行すると... 定義されている全クラスの一覧を取得できる 🔮

Slide 26

Slide 26 text

ObjectSpace.each_object 全クラスの一覧が取得できるなら、特定クラスを継承したクラス一覧も取得できる ApplicationRecord を継承したクラスの一覧、ApplicationJob を継承したクラスの 一覧とか出せると便利なことがたまにある

Slide 27

Slide 27 text

ObjectSpace知ってると便利なことが稀にある 良い Ruby プログラミングライフを!