LoginSignup
2
1

【Ruby,Rails】クラスメソッドとインスタンスメソッドの違い

Last updated at Posted at 2024-02-13

どうもこんにちは。

今回は、初心に帰ってクラスメソッドとインスタンスメソッドについてまとめます。

まずは実行される時の形から覚える

クラスメソッド

クラスメソッドは以下のような形で実行されます。

Railsコンソール
# newメソッド
pry(main)> Sample.new
# createメソッド
pry(main)> Sample.create(name: 'サンプルA')
# findメソッド
pry(main)> Sample.find(1)
# allメソッド
pry(main)> Sample.all

インスタンスメソッド

インスタンスメソッドは以下のような形で実行されます。

Railsコンソール
# インスタンスを作成してから...
pry(main)> sample = Sample.new
# saveメソッド
pry(main)> sample.save
# updateメソッド
pry(main)> sample.update(name: 'サンプルB')

違いは...

これらの違いは、メソッドを実行するのが「モデル(クラス)に対して」なのか「インスタンスに対して」なのかです。

定義する時の違い

クラスメソッド

その1 メソッド名の前にselfを明示的に記述して定義する

class Sample
    def self.sample_method
        # 何かしらの処理
    end
end

selfはメソッドを定義する対象を指します。定義した箇所でのselfSampleなので、Sampleクラスに対してメソッドを定義したことになります。そのため、selfSampleに置き換えて定義しても問題ないです。

その2 特異クラスの中に定義する

class Sample
    class << self
        def sample_method
            # 何かしらの処理
        end
    end
end

特異クラスの説明をすると長いので省略しますが、特異クラスの中に定義してもクラスメソッドとして使用することができます。class << self; endの間では、複数のメソッドを定義することができます。

インスタンスメソッド

class Sample
    def sample_method
        # 何かしらの処理
    end
end

インスタンスメソッドの場合に何も考えずに、メソッドを定義すればOKです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1