RubyのModuleクラスはすべてのモジュールの母であり同時にすべてのクラスの父である!

Moduleクラスはすべてのモジュールの生成クラスである
だからModuleクラスに定義されたinstanceメソッドmは
すべてのモジュールで定義されたモジュールメソッドself.mになる

  class Module
    def m
      'm'
    end
  end
  Module.new.m # => "m"
  Kernel.m # => "m"
  Enumerable.m # => "m"
  Math.m # => "m"

またModuleクラスはClassクラスのスーパークラスでもある
だからModuleクラスに定義されたinstanceメソッドmは
Classクラスで定義されたinstanceメソッドmになる

  Class.new.m # => "m"

ここでClassクラスはすべてのクラスの生成クラスである
だからClassクラスのinstanceメソッドとなったmは
すべてのクラスのクラスメソッドself.mになる

  Object.m # => "m"
  Array.m # => "m"
  class MyClass
  end
  MyClass.m # => "m"

この中には当然Moduleクラスも含まれているから
Classクラスのinstanceメソッドmは
Moduleクラスのクラスメソッドself.mにもなる

  Module.m # => "m"

ところがModuleクラスはClassクラスのスーパークラスだから
Moduleクラスのクラスメソッドになったself.mは
Classクラスのクラスメソッドself.mにもなる

  Class.m # => "m"


整理しよう
Moduleクラスが1つのinstanceメソッドmを持つと
それがすべてのモジュールのモジュールメソッドself.mとなり
Classクラスのinstanceメソッドmとなり
ModuleクラスおよびClassクラスを含む
すべてのクラスのクラスメソッドself.mとなる


Moduleクラスはモジュールの生成クラスである
だからClassクラスがすべてのクラスを生み出すように
Moduleクラスはすべてのモジュールを生み出す
そして生み出されたすべてのモジュールは
Moduleクラスの特性に依存する


そうClassクラスがすべてのクラスの母であるなら…


Moduleクラスはすべてのモジュールの母だ!


加えてModuleクラスはClassクラスのスーパークラスである
だからModuleクラスに定義されたすべてのメソッドは
Classクラスで使える
すべてのクラスは
その生成クラスであるClassクラスの影響を受けるので
結果すべてのクラスはModuleクラスの影響を受けることになる
つまりModuleクラスはClassクラスによるクラス生成において
それを支援する極めて重要な役割を担っている


要するにModuleクラスは
すべてのクラスの母であるClassクラスを支える…


すべてのクラスの父なんだ!


そうModuleクラスは
一方で各モジュールの母として彼らを生み出し
他方で各クラスの父としてClassクラスを支えるという
父と母の2つの顔を持った実体だったんだ!


関連記事:RubyのObjectクラスは過去を再定義するタイムマシンだ! - hp12c