include, extend, module_functionの違いをわかりやすくまとめてみた!

どうも!
インストラクターのババです!

みなさんはモジュールを使っていますか?
僕はrubyを勉強したての時、モジュールって何かややこしいイメージを持っていて全然使わないでいました。

でもモジュールって以外と簡単に使えるんです。

今回はそんなモジュールを使うためのメソッド
「includeメソッド」「extendメソッド」「moduel_functionメソッド」について解説していきたいと思います!

目次

はじめに

shutterstock_403896286
よくincludeメソッドっとごっちゃになっるメソッドに「requireメソッド」があります。
requireメソッドは「ファイルを読み込むためのメソッド」です。

includeメソッド、extendメソッド、module_functionメソッドは「moduleを読み込む、使用するためのメソッド」です。
しっかりと区別をするようにしましょう!

includeメソッド

では初めはmoduleを使うための基本である「includeメソッド」から解説していきます。
moduleは定義するだけでは使用することができず、メソッドを用いて、使えるようにしてあげる必要があります。
そのためのメソッドが「includeメソッド」です。
実際にコードで見ていきましょう。

module Dog
  def name
    "ポチ"
  end
end

class Animal
  include Dog
end

animal = Animal.new
p animal.name
# => ポチ

DogモジュールをAnimalクラスにincludeすることで、Animalクラスのインスタンスメソッドとして、Dogモジュールのnameメソッドを定義できていることがわかります。

このようにインスタンスメソッドとして、読み込ませるのが「include」です。

extendメソッド

次に「extendメソッド」について見ていきましょう。
extendメソッドもincludeメソッドと同じように、モジュールのメソッドを使用するためのメソッドです。

module Dog
  def name
    "ポチ"
  end
end

class Animal
  extend Dog
end

p Animal.name

includeメソッドと同じようにメソッドが使用できていることがわかります。
includeメソッドとの違いは「クラスメソッド」としてモジュールがインクルードされる点です。

 

  • includeはインスタンスメソッド
  • extendはクラスメソッド

 

 

というように使い分けをきっちりできるようにしましょう。

module_function

shutterstock_394879966
基本的にモジュールはクラスに読み込ませて使うものですが、クラスに読み込ませなくても使う方法があります。
それが「module_functionメソッド」です。

module Dog
  def name
    "ポチ"
  end
  module_function :name
end

p Dog.name

module_functionメソッドを使用することで、このように普通にメソッドを使用できていることがわかります。

まとめ

今回はmoduleの使い方について「includeメソッド」「extendメソッド」「module_functionメソッド」の三つを解説していきました。
Rubyは書き方が自由な分、いろいろなメソッドがあり、使い分けが難しいことが多いです。
地道に自分でコードを書いて一歩ずつ覚えていきましょう!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次