Rubyにおいて、プログラムのどこでも使用できるputsメソッド、ppメソッドなどは、どこで定義されており、なぜ使用することができるのか。
putsメソッド、ppメソッドなどは、Kernelモジュールで定義されている。
Kernelモジュールは、Objectクラスでincludeされている。
Rubyのクラスはすべて、Objectクラスを継承しているので、すべてのクラスでputsメソッドが使用できる。
↓Kernelモジュールの、リファレンスマニュアル
https://docs.ruby-lang.org/ja/latest/class/Kernel.html
Objectクラスは、Kernelモジュールをincludeしている。
puts Object.include?(Kernel) # true
すべてのクラスは、Objectクラスを継承している。
詳細に言うと、StringクラスやIntegerクラスは、Moduleクラスを継承しており、ModuleクラスはObjectクラスを継承しています。
"== Stringクラス =="
puts String.class # Class
puts String.class.superclass # Module
puts String.class.superclass.superclass # Object
"== Integerクラス =="
puts Integer.class # Class
puts Integer.class.superclass # Module
puts Integer.class.superclass.superclass # Object
またRubyにおいて、クラス構文に囲まれていない一番外側の部分をトップレベルといい、Objectクラスのインスタンスになっています。
puts self.class # Object
以上のことから、Rubyのプログラム内ではputsメソッドが使用できます。
プロを目指す人のためのRuby入門[改訂2版]
https://gihyo.jp/book/2021/978-4-297-12437-3