diary

I like Hatena Star with a text selection.

2025-04-10

zenn.dev

Ridgepole で StrongMigrations を使えるかどうか試していた。結果としては、StrongMigrations にちょっとパッチを当てると使うことができそう。

これ、真面目に使えるようにしてみても面白いかも知れない。


手動で発火できるTracePointがあったら面白いのではないかと夢想している。 次のような感じ。

# Set trace handler
trace = TracePoint::Manual.new(:my_event_name) do |tp|
    p [tp.lineno, tp.defined_class, tp.method_id, tp.event]
end

trace.enable


# Trigger the TracePoint
TracePoint::Manual.trigger(:my_event_name)

ActiveSupport::Notifications とかそういうのでいいじゃんとなりそうだけど、これの価値はTracePointであることであり、つまりハンドラ側でbindingを取ったりしていくらでも悪いことができて便利。

TracePoint::Custom としているのは、複数箇所からこれを使いたいケースを考えてのこと。TracePoint.new(:manual) do |tp|のようにmanualイベントを決め打ちで作る実装も考えられるけど(そしてそれならすぐ実装できる気がするけど)、その場合複数ライブラリから手動発火したくなった時にコンフリクトして困りそう。 なので既存のイベントとは完全に空間を分けたほうが良いのではと思っている。

で、具体的なユースケースがあるのかというと、全く思い浮かんでいない。