【Ruby入門】クラスメソッドとインスタンスメソッドの使い方まとめ

クラスの中で定義できるメソッドには、クラスメソッドとインスタンスメソッドがあります。

以下から Ruby のクラスメソッドとインスタンスメソッドの使い方を解説していきます。

 

クラスメソッドとインスタンスメソッドの違い

クラスメソッドとインスタンスメソッドは、どちらもクラスの中に書きますが、以下のように呼び出し元に違いがあります。

  • クラスメソッドは、クラスから実行できる。
  • インスタンスメソッドは、インスタンスから実行できる。
メモ

クラスとインスタンスの関係について詳しくはこちら

 

そのため、クラスメソッドは クラスから直接呼び出すことができるのに対して、インスタンスメソッドは クラスからインスタンスを生成しないと呼び出すことができません。

 

以下からクラスメソッドとインスタンスメソッドについて、ひとつずつ詳しく解説していきます。

 

クラスメソッド

クラスメソッドの特徴

  • クラスメソッドは、クラスから実行できるメソッド。
  • メソッドは、クラス内で def self.メソッド名 〜 end で定義できる。
  • クラス名.メソッド名で呼び出せる。

 

プログラム例 その1

以下はクラスメソッドを定義し、それを呼び出す例。

プログラム
class User
  def self.hello
    p "こんにちは"
  end
end

User.hello
実行結果
"こんにちは"

User.hello で、クラス内のメソッドが呼び出せることが確認できました。

 

プログラム例 その2

メソッドを class << self 〜 end で囲むと、メソッド名の先頭に self. をつけない形でクラスメソッドを作ることもできます。

プログラム
class User
  class << self
    def hello1
      p "こんにちは1"
    end

    def hello2
      p "こんにちは2"
    end
  end
end

User.hello1
User.hello2
実行結果
"こんにちは1"
"こんにちは2"

 

クラスメソッドの用途

クラスメソッドは、クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利です。

例えば「User」クラスを作成した場合を例にするなら、ユーザー一覧の表示や、ユーザー全体で共有して使うステータスを更新するメソッドを作成するときに使うと良いでしょう。

 

インスタンスメソッド

インスタンスメソッドの特徴

  • インスタンスメソッドは、インスタンスから実行できるメソッド。
  • メソッドは、クラス内で def メソッド名 〜 end で定義できる。
  • インスタンス.メソッド名で呼び出せる。

 

プログラム例

以下はインスタンスメソッドを定義し、それを呼び出す例。

プログラム
class User
  def hello
    p "こんにちは"
  end
end

user = User.new
user.hello
実行結果
"こんにちは"

user = User.new で「User」クラスからインスタンスを作成し、「user」変数に代入しています。

次に user.hello でインスタンスからメソッドが呼び出せることが確認できました。

ちなみに今回定義した「hello」メソッドはインスタンスメソッドなので、User.hello のようにして、クラスから呼び出すことはできません。

 

インスタンスメソッドの用途

インスタンスメソッドは、個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利です。

例えば「User」クラスを作成した場合を例にするなら、特定のユーザーインスタンスのプロフィールを表示したり更新したりするメソッドを作成するときに使うと良いでしょう。

 

まとめ

以上、Ruby のクラスメソッドとインスタンスメソッドの使い方でした!

 

ここまでの内容をまとめておきます。

  • クラスメソッドはクラスから実行でき、インスタンスメソッドはインスタンスから実行できる。
  • クラスメソッドは、クラス内で def self.メソッド名 〜 end で定義することができ、クラス名.メソッド名 で呼び出せる。
  • インスタンスメソッドは、クラス内で def メソッド名 〜 end で定義することができ、インスタンス.メソッド名 で呼び出せる。
  • クラスメソッドは クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに、インスタンスメソッドは 個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利。