Rubyのモジュールによるミックスインの3つの方法


こんにちは。Tomoyuki(@tomoyuki65)です。

Rubyのモジュールはミックスインで使用しますよね。

ミックスインの方法としては3つ覚えておくと良いでしょう。

この記事では、ミックスインについて解説します。

 



ミックスインの3つの方法とは?

Rubyのモジュールのミックスインでは、以下の3つの方法があります。

  •  includeでミックスイン
  •  extendでミックスイン
  •  prependでミックスイン

 

includeでミックスイン

モジュールをインスタンスメソッドとしてミックスインしたい場合は、includeを使います。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  include Say_en

  def hello_jp
    puts "こんにちは"
  end
end

greeting = Say.new

# インスタンスメソッドを実行
greeting.hello_jp
greeting.hello_en

 

実行結果
こんにちは
Hello

 

extendでミックスイン

モジュールをクラスメソッドとしてミックスインしたい場合は、extendを使います。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  extend Say_en

  def hello_jp
    puts "こんにちは"
  end
end

# クラスメソッドを実行
Say.hello_en

 

実行結果
Hello

 



prepend

モジュールをインスタンスメソッドとしてミックスインする場合は、includeを使うのが一般的ですが、Ruby 2.0からはprependでミックスインすることもできます。

prependでミックスインした場合は、同名のメソッドがあった場合にミックスインしたクラスよりも先にモジュールのメソッドが呼ばれるため、既存メソッドの置き換えることができます。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end

  def hello_jp
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  prepend Say_en

  def hello_jp
    puts "こんにちは"
  end
end

greeting = Say.new

# インスタンスメソッドを実行
greeting.hello_jp
greeting.hello_en

 

実行結果
Hello
Hello

 

実行結果の通り、prependを使用することで既存メソッドの置き換えを簡単にすることができます。

例えばモンキーパッチ(自分が期待する挙動に変更すること)をあてる際に、以前は既存のメソッドを上書きにはエイリアスメソッド使用していましたが、prependを使用することで簡単にできるようになりました。

尚、includeした場合はクラス側のメソッドの置き換えはできませんが、クラス側でモジュールのメソッドを置き換える(上書きする)ことはできます。

 

まとめ

  •  インスタンスメソッドとしてミックスインする場合は、includeを使う(クラス側でモジュールのメソッドを上書き可能)
  •  クラスメソッドとしてミックスインする場合は、extendを使う
  •  includeの代わりにprependでミックスインすると、既存メソッドの置き換えが簡単にできる

 

  • 関連記事

【無料あり】Ruby入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

 

The following two tabs change content below.

Tomoyuki

SEを5年経験後、全くの未経験ながら思い切ってブロガーに転身し、月間13万PVを達成。その後コロナの影響も受け、以前から興味があったWeb系エンジニアへのキャリアチェンジを決意。現在はWeb系エンジニアとして働きながら、プロゲーマーとしても活躍できるように活動中。








シェアはこちらから


【2024年】おすすめのゲーミングPC

モンハンワイルズの発売日とPC版(Steam版)の推薦スペックが公開されたので、おすすめのゲーミングPCをご紹介!


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です