Rubyのミックスイン(Mixin)とは?モジュールで機能を共有する方法
Rubyには、「ミックスイン(Mixin)」という、モジュールを使って複数のクラスに共通の機能を追加する仕組みがあります。
これは、多重継承ができないRubyでコードの再利用を実現する方法です。
ミックスインの基本:モジュールを使う
module Greetable
def greet
puts "こんにちは!"
end
end
class User
include Greetable
end
user = User.new
user.greet # → こんにちは!
このように、モジュール(module)に定義したメソッドを、include
を使ってクラスに取り込むことで、インスタンスメソッドとして利用できます。
ミックスインのポイント
- Rubyのクラスは単一継承のみ
- モジュールを使えば複数の機能を追加できる
include
→ インスタンスメソッドとして追加
extend
→ クラスメソッドとして追加
extendを使ったミックスイン
module Logger
def log(message)
puts "[LOG] #{message}"
end
end
class App
extend Logger
end
App.log("アプリ起動") # → [LOG] アプリ起動
extend
を使うと、クラス自身に対してメソッドを追加できます。
複数のモジュールをミックスイン
module A
def hello
puts "Hello from A"
end
end
module B
def goodbye
puts "Goodbye from B"
end
end
class Person
include A
include B
end
p = Person.new
p.hello # → Hello from A
p.goodbye # → Goodbye from B
モジュールは複数同時にミックスインできるので、柔軟に機能を追加できます。
ミックスインと継承の違い
項目 | 継承 | ミックスイン |
構文 | < 親クラス | include モジュール名 |
数 | 1つだけ | 複数可 |
用途 | 共通の基礎機能 | 部分的な機能追加 |
ミックスインの活用例
- ログ出力・エラーハンドリング・バリデーションなど
- 複数のクラスで共通の処理をまとめるとき
- クラスの責務を整理・分離したいとき
まとめ
Rubyのミックスイン(Mixin)は、モジュールを通じてクラスに機能を追加する強力な手段です。
include
でインスタンスメソッド、extend
でクラスメソッドとして取り込めます。
「共通機能はモジュールにまとめて必要なクラスに取り込む」という設計を取り入れることで、コードの再利用性と保守性が向上します!