LoginSignup
29

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-05

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のグローバル変数をトレースする

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
29