1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モジュールについて、2つの役割とライブラリ・クラスとの違い

Posted at

1. はじめに

Ruby を学んでいて「モジュールって何?クラスやライブラリと何が違うの?」と混乱しました。
違いと使い分けを整理してまとめてみました。
※Rubyの仕様に基づいています。


2. モジュールの持つ2つの役割

1) 名前空間(Namespace)として使う

他と名前が衝突しないよう グループ化 する枠。
イメージとしては「フォルダ分け」のようなもの。

title.rb
module Animals
  class Dog
    def bark
      'わんわん'
    end
  end
end

dog = Animals::Dog.new
puts dog.bark # => わんわん

Animals::Dog のように スコープ演算子 :: でアクセスします。


2) Mixin(継承を使わず機能を共有)として使う

モジュールを使うと、共通の機能を複数のクラスに簡単に組み込めます。
これを「Mixin(ミックスイン)」と呼びます。

Rubyでは、
• include → インスタンスメソッドとして取り込む
• extend → クラスメソッドとして取り込む

という2種類の使い方があります。

mixin.rb
module Walkable
  def walk
    'てくてく歩く'
  end
end

class Dog
  include Walkable       # ⇒ インスタンスメソッドになる
end

class Robot
  extend Walkable        # ⇒ クラスメソッドになる
end

puts Dog.new.walk  # => てくてく歩く
puts Robot.walk    # => てくてく歩く

3. クラス・モジュール・ライブラリの違い

概念 役割 インスタンス化 (new)
クラス オブジェクトの設計図(状態+振る舞い)
モジュール 名前空間 or 機能の束
ライブラリ / Gem 再利用するコードの集合体(クラスやモジュールを含む) △(呼び出して使う)

補足: モジュールにも定数は置けますが、インスタンス変数を持つ用途には向いていません。ライブラリ自体はインスタンス化しませんが、ライブラリ内のクラスからインスタンス化することはあります。


4. まとめ

  • モジュール … 名前空間 & 機能の箱(Mixin)
  • クラス … 状態+振る舞いを持つ設計図
  • ライブラリ … クラス/モジュールを束ねた再利用パッケージ
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?