Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】Module::class_exec()メソッドの使い方

class_execメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

class_execメソッドは、レシーバであるクラスまたはモジュールのコンテキストで、引数として渡されたブロックを実行するメソッドです。このメソッドを使用すると、ブロックの内部ではselfがレシーバであるクラスやモジュール自身を指すようになります。これにより、あたかもそのクラスやモジュールの定義本体に直接コードを記述しているかのように、メソッドや定数を定義することが可能になります。

具体的には、ブロック内でメソッドを定義すると、それはレシーバであるクラスのインスタンスメソッド、または特異メソッド(クラスメソッド)として追加されます。また、定数を定義した場合は、そのクラスの定数として登録されます。class_execに渡された引数は、ブロックのパラメータとしてそのまま利用できます。

この機能は、特にClass.newと組み合わせて、動的に新しいクラスを生成し、その場でそのクラス固有のメソッドや定数を定義する際に非常に強力です。例えば、特定のクラスの内部に一時的な振る舞いや、外部から直接アクセスさせたくないプライベートなロジックをカプセル化する目的で活用されます。

instance_execメソッドが特定のオブジェクトのインスタンスのコンテキストでブロックを実行するのに対し、class_execはクラスやモジュールという「型」のコンテキストで実行するため、クラスレベルの定義や変更に適しており、Rubyにおけるメタプログラミングの重要な要素の一つです。これにより、プログラムの動的な柔軟性と拡張性を高めることができます。

構文(syntax)

1class MyModule
2end
3
4MyModule.class_exec do
5  def my_method
6    "Hello from my_method!"
7  end
8end

引数(parameters)

*args, &block

  • *args: 任意の数の引数。class_exec ブロック内で self (実行対象のモジュールやクラス)のメソッドとして定義される際に、それらのメソッドに渡される引数となります。
  • &block: 実行するコードブロック。このブロックが、class_exec を呼び出したモジュールまたはクラスのコンテキストで実行されます。ブロック内で def を使用してメソッドを定義すると、そのメソッドは呼び出し元のオブジェクトに属します。

戻り値(return)

Object

class_exec メソッドは、メソッドが定義されたクラスのインスタンスを self として、ブロック内のコードを実行します。ブロックの最後に評価された式の結果を返します。

関連コンテンツ

関連プログラミング言語