Ruby の module 内で include したかった

多分基本的なことなのだろうけどハマったので覚書。
さて、Ruby の module を書いている時に次のように include してメソッドにアクセスしたかったのですがこれだとうまく動作しませんでした。

module X
    def funcX
        :homu
    end
    module_function :funcX
end

module Y
    # module 内で funcY を使いたい
    include X

    def funcY
        funcX
    end
    module_function :funcY
end

# Error: undefined local variable or method `funcX' for Y:Module
Y.funcY

include ではなくて extend を使う

そもそもこの場合はインスタンスメソッドではなくてクラスメソッドとして取り込む必要があるので include ではなくて extend を使用する必要があります。

module X
    def funcX
        :homu
    end
    module_function :funcX
end

module Y
    extend X

    def funcY
        funcX
    end
    module_function :funcY
end

# OK
Y.funcY

こういう Ruby の細かい挙動はまだあまり慣れてないのではまりやすい…。