クラス内で特に意識せずにメソッドを定義すると、それはインスタンスメソッドになる。インスタンスメソッドは各インスタンスに含まれるデータを読み書きするような場合に定義する。
一方、クラスに関係は深いが、各インスタンスのデータを使わないメソッドを定義したい場合には、self.
をつけてクラスメソッドを定義する。
具体的な使い方例は、下記が紹介されていた。
class User def initialize(name) @name = name end # .selfをつけてクラスメソッドを定義 def self.create_users(names) names.map do |name| User.new(name) end end # インスタンスメソッドを定義 def hello "Hello, I am #{@name}." end end names = ['Alice', 'Bob'] users = User.create_users(names) users.each do |user| puts user.hello end # => Hello, I am Alice. # => Hello, I am Bob.