拓也Rubyガイドリフレクションとは、プログラムの(実行前ではなく)実行時にプログラムそのものの情報を参照・書き換えることができる特性を指します。encyclopediaRubyは豊富なリフレクション機能を持っています。今回の記事では関連メソッドを簡単に紹介して行きたいと思います。eval特に中心となるメソッドとして、evalが挙げられます。evalは"evaluate(評価する)"から名付けられた、文字列を引数として取り、文字列の内容をRubyコードとして実行するメソッドです。ふたつめの例ではヒアドキュメントで文字列をevalに渡し、文字列の内容を#{...}による埋め込みで書き換えつつ繰り返すことで、冗長なメソッド定義のコード量を抑えています。いう専用のメソッドもあります。コンテキストとself以下で「コンテキスト」という言葉を使っていきますが、これは「そのコードが"どこ"で実行されたものとみなすか」を指します。具体的には「XのコンテキストでコードCを評価する」とはコードC内のselfがXになるコードC内から参照可能な変数セット(環境)がXと同じになるという意味を持ちます。eval族evalは呼び出された箇所のコンテキストで文字列をRubyコードとして評価しますが、instance_eval、class_eval、module_evalを使うと、評価コンテキストを切り替えることが出来ます。例のようにinstance_evalを使うと、privateなメソッドを呼び出したり、アクセサの定義されていないインスタンス変数を参照することが出来ます。class_evalというメソッドもあります。これはクラスを引数に取り、文字列またはブロックをそのクラス定義のコンテキストで評価します。module_evalはclass_evalのエイリアスなので機能は同じです。文脈に応じて使い分けます。次のページでは、セッター/ゲッター系のメソッドとbindingについて説明します。About公式SNS日々の生活や仕事を楽しむための情報を毎日お届けします。