スキップしてメイン コンテンツに移動

クラスメソッドで静的

クラスメソッドで静的

Ruby基礎とクラスメソッドの概要

Rubyはオブジェクト指向言語であり、クラスとインスタンスが基本構成要素です。クラスメソッドはクラス自体に属し、インスタンスを生成せずに呼び出せる機能です。Rubyでは def self.foo という形で定義し、クラス名.メソッド名で呼び出します。クラスメソッドは、クラス単位で共通の処理をまとめる際に便利で、ユーティリティクラスとして頻繁に利用されます。

self.methodでクラス単位のユーティリティを作る

Ruby 2.7 以降、self.method を使うと、クラスメソッドを動的に取得・呼び出しできます。以下は簡単な例です。

class MathUtil
  def self.add(a, b)
    a + b
  end

  def self.method(name)
    if name == :add
      method(:add)
    else
      nil
    end
  end
end

# 呼び出し
MathUtil.method(:add).call(3, 5)  # => 8

このように self.method を利用すると、クラス単位でメソッドを動的に扱えるため、テストやメタプログラミングが容易になります。ユーティリティクラスはインスタンス不要で、クラスメソッドだけで完結する設計が一般的です。

インスタンス不要・インスタンス変数不可の静的メソッド設計

インスタンス不要でインスタンス変数を使わない設計は、状態を持たない純粋関数的なメソッドを作る際に有効です。Ruby では module を使って静的メソッドをまとめることもできます。以下はモジュールを使った例です。

module StringUtil
  def self.reverse(str)
    str.reverse
  end

  def self.camelize(str)
    str.split('_').map(&:capitalize).join
  end
end

# 呼び出し
StringUtil.reverse('hello')      # => 'olleh'
StringUtil.camelize('my_name')   # => 'MyName'

このようにモジュール内のメソッドはインスタンス生成せずに呼び出せ、インスタンス変数を持たないため、テストが容易で副作用がありません。静的メソッドとして設計することで、クラス単位での再利用性が高まり、コードベース全体の可読性と保守性が向上します。

この記事はAIによって作成されました。

コメント