Japanのサイトからの引用です。本書はRubyを使ったメタプログラミングについて解説する書籍です。メタプログラミングとは、プログラミングコードを記述するコードを記述することを意味します。前半では、メタプログラミングの背景にある基本的な考えを紹介しながら、動的ディスパッチ、ゴーストメソッド、フラットスコープといったさまざまな「魔術」を紹介します。後半では、ケーススタディとしてRailsを使ったメタプログラミングの実例を紹介します。4に対応し、ほぼすべての内容を刷新。Rubyを使ったメタプログラミングの魔術をマスターし、自由自在にプログラミングをしたい開発者必携の一冊です。引用:https://www.oreilly.co.jp/books/9784873117430/6章:コードを書くコードを写経し終えたので内容を振り返ってまとめてみました。ブロックコード文字列を扱うevalもブロックを扱うinstance_evalも同じように利用できる。どちらを使えばよいか?という問への解は「ブロック」である。evalには以下問題がある。"c"]evalの問題点:コードインジェクション攻撃コード文字列を用いるとエディタのシンタックスハイライトや自動補完が使えない問題点がある。大きな問題点はコードインジェクション攻撃である。以下はArrayクラスのメソッドを確認するために標準入力をevalで受け取って実行するコード例。配列に対する呼び出しの後に、同階層のファイル名を全て返す記述が書けてしまう。同じ方法でハードディスクの消去やプライベート情報の抜き出しなどが出来てしまう。同階層にある全てのファイル名が分かってしまう攻撃の対策1:動的ディスパッチ動的ディスパッチを利用する方法がある。これではウェブのインターフェイスからメソッドを渡せない。(NoMethodError)攻撃の対策2:オブジェクトの汚染Rubyは安全でないオブジェクトに自動的に汚染のマークを付けてくれる。安全でないオブジェクトとは、webフォーム・コマンドライン・システム変数の読み込み文字列など。メソッドで確認できる。いちいち汚染されているか確かめるのは手間。true攻撃の対策3:セーフレベルRubyはセーフレベルという概念をデフォルトで提供している。セーフレベルを設定すると、危険な操作を制限できる。(SecurityError)フックメソッド簡単な例Rubyでは、クラスが継承されたときやmoduleがミックスインされたときにコードを実行できる。これはJavaScriptのイベントハンドリングのようなもので、フックメソッドという。以下はクラスがStringクラスを継承したときにその通知を画面に印字するメソッドの例。定義されたクラスのアトリビュートを独自開発コードを記述するコードについて学ぶ為にadd_checked()を作成する。特定のクラスにのみ有効なアトリビュートとするためにModule#includedのフックメソッドを用い、妥当性確認機能のためにブロックを利用できるようにしている。Module#included内部で更にextendすることで、特定クラスのクラスメソッド(特異クラスのインスタンスメソッド)として定義するイディオムを活用している。人月の神話を読みました。技術評者社から出されている技術書で、以下は公式サイトからの概要引用です。Japanのサイトからの引用です。