紹介記事の最後になります。来年もやるのかな...。拡張の話から始めます。登録するための仕組みです。すべてのメソッド呼び出し、およびそのリターンをログに出力したい、というプログラムは次のように簡単に書くことができます。fooこのプログラムを実行すると、次のような出力が得られます。戻る、ということが見て取れます。出力が読みづらいですね。呼び出しレベルごとにインデントを付けるようにしてみましょう。`foo'@t.rb:1>ちょっと読みやすくなりました。2つに分けてみました。foo@t.rb:1どうでしょう。それっぽくなったでしょうか。使うようにしてみます。性能の問題があります。性能が気になる一番顕著な例はブレイクポイントの実装です。あるファイルのある行で実行を止める、ということを考えてみましょう。起動するなんてどうでしょうか。使うと、こんな感じで簡単に作ることができます。呼ぶようにしてみました。11行目だったと思ってください。用デバッガも、基本的にこんな感じで実装されています。性能に問題があります。この簡単なブレイクポイントの設置場所「とは関係ない」コードの実行時間を測ってみます。倍くらい遅くなっているのがわかります。実行している全ての行で上記(無駄な)チェックを行っているので、しょうがないといえばしょうがないかもしれません。7.406415)さらに遅いです。何もしない場合に比べ、80倍程度遅いようです。他にもいろいろな処理をしているんでしょうね。除く、といった要望は当然出てくると思います。無駄なフックを呼んでしまうことで性能上問題が生じる、ということをご紹介しました。10倍とか100倍遅くなってしまいました。メソッドに行うことにしました。キーワードを追加しました。行番号に、イベント発火を絞ることができます。イベントにだけ有効です。イベントのみと一緒に使うことをオススメします。この拡張を用いて、実際にちゃんと動くブレイクポイントを作ることができるか試してみましょう。メソッドの仕様を変更します。あるのに注意してください。ここでは、メソッドオブジェクトを渡します。