Rubyにおけるクラスメソッド、インスタンスメソッドの違い

2025/07/31

メソッドは、一連の処理に名前をつけてまとめたもの。

クラスメソッドは、クラスオブジェクトから実行可能なメソッド。
インスタンスメソッドは、クラスのインスタンスから実行可能なメソッド。

class Book
  @@book_count = 0

  def initialize(title, author)
    @title = title
    @author = author
    @@book_count += 1
  end

  # クラスメソッド
  # メソッド名の前に`self.`をつけて定義
  # インスタンスをまたいで、クラス自体に関する情報の処理(変更、参照等)が可能
  def self.book_count
    @@book_count
  end

  # 以下の書き方も可能
  # class << self
    # def book_count
      # @@book_count
    # end
  # end

  # インスタンスメソッド
  # 個別のインスタンスに関する情報の処理(変更、参照等)が可能
  def description
    "Title: #{@title}, Author: #{@author}"
  end
end

# インスタンスを作成
book1 = Book.new("The Catcher in the Rye", "J.D. Salinger")
book2 = Book.new("To Kill a Mockingbird", "Harper Lee")

# インスタンスメソッドを呼び出す
puts book1.description
puts book2.description

# インスタンスを作成してすぐにインスタンスメソッドを呼び出すことも可能
puts Book.new("1984", "George Orwell").description

# クラスメソッドを呼び出す
puts Book.book_count # => 3

参考