Help us understand the problem. What is going on with this article?

Ruby でフックできるイベント一覧

More than 1 year has passed since last update.

Ruby でフックできるイベントを調べてみました。



メソッド名 呼び出されるタイミング
method_missing 存在しないメソッドが呼び出された時
const_missing 存在しない定数を参照した時
respond_to_missing? respond_to? の結果が false の時
method_added メソッドが追加された時
method_removed メソッドが remove_method によって削除された時
method_undefined メソッドが undef_methodundef によって削除された時
singleton_method_added 特異メソッドが追加された時
singleton_method_removed 特異メソッドが remove_method によって削除された時
singleton_method_undefined 特異メソッドが undef_methodundef によって削除された時
prepend_features Module#prepend の実体
prepended Module#prepend した後
append_features Module#include の実体
included Module#include した後
extend_object Object#extend の実体
extended Object#extend した後
inherited クラスのサブクラスが定義された時
at_exit プログラム終了時

TracePoint イベント一覧

TracePoint でフックできるイベントは以下のようになっています。

イベント 説明
:line 式の評価
:class クラス定義、特異クラス定義、モジュール定義への突入
:end クラス定義、特異クラス定義、モジュール定義の終了
:call Ruby で記述されたメソッドの呼び出し
:return Ruby で記述されたメソッド呼び出しからのリターン
:c_call Cで記述されたメソッドの呼び出し
:c_return Cで記述されたメソッド呼び出しからのリターン
:raise 例外の発生
:b_call ブロックの開始
:b_return ブロックの終了
:thread_begin スレッドの開始
:thread_end スレッドの終了
:fiber_switch ファイバーの切り替え
:script_compiled スクリプトが ISeq に変換された後

TracePoint のサンプルコードについては Ruby の TracePoint について調べてみた#トレース出来るイベントの種類 を参照して下さい。

set_trace_func でも同様なイベントが取得可能ですが、 TracePoint に比べると取得出来るイベントの種類も少ない & 使い勝手が悪いので今はあまり使われていないかもしれません。


メソッド名 説明 備考
trace_var グローバル変数のトレース Rubyのグローバル変数をトレースする
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away