モジュールを使う時のrequireとincludeの違いがよくわからなかったので調べてみたまとめ
- requireはファイルの読み込みを行う命令。includeは、モジュール内のメソッドを継承チェーンに入れ込む、Moduleオブジェクトのメソッド。
- 外部モジュール内のメソッドを使うためには、requireしてかつincludeする必要がある。(includeしない場合は、Module::メソッドと名前空間から呼び出しが必要。)
- 組み込みモジュールは、あらかじめrequireされているから、includeだけで良い。
- クラス定義の中でincludeしたモジュールは、モジュール内でdef self.hogeと定義されたメソッドはクラスメソッドとして、def fugaと定義されたメソッドはインスタンスメソッドとして使うことになる。
- トップレベルでincludeしたモジュールは、上記の効果が全てのクラスで得られる様になる。ただし、メソッドチェーンの位置はObjectクラスの上位でKernelクラスの下位。