Ruby でインスタンスメソッドが定義された時に処理をフックする

インスタンスメソッドが定義された時に処理をフックしたい場合、『クラスメソッド』に #method_added を定義します。

[コード]

class X
    # クラスメソッドに method_added を追加する
    def self.method_added name
        p name
    end

    # インスタンスメソッドを定義した時に .method_added が呼ばれる
    def homu
        
    end

    # define_method や alias_method で新しいメソッドを生成した時にも呼ばれる
    define_method :mami do
        
    end

    alias_method :mado, :mami

    # 特異メソッドの場合は呼ばれない
    def self.saya
        
    end
end

[出力]

:homu
:mami
:mado