putsメソッドはなぜどこでも使用することができるのか

Rubyにおいて、プログラムのどこでも使用できるputsメソッド、ppメソッドなどは、どこで定義されており、なぜ使用することができるのか。

結論

putsメソッド、ppメソッドなどは、Kernelモジュールで定義されている。 Kernelモジュールは、Objectクラスでincludeされている。 Rubyのクラスはすべて、Objectクラスを継承しているので、すべてのクラスでputsメソッドが使用できる。

Karnelモジュール

↓Kernelモジュールの、リファレンスマニュアル
https://docs.ruby-lang.org/ja/latest/class/Kernel.html

Objectクラス

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

ruby