6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby】モジュールについて(ネームスペースの活用)

Last updated at Posted at 2019-07-08

#はじめに
今回はモジュールによるネームスペース(名前空間)の作成に関してまとめました!

モジュールには様々な用途があります。
主に以下のような用途です。

・クラスにインスタンスメソッドを追加する(ミックスイン)
・クラスにクラスメソッドを追加する(ミックスイン)
・クラス名などの重複を防ぐためにネームスペース(名前空間)を作成する
・ミックスインせずにモジュール単体としてメソッドを定義
など。

今回はこれらの機能のうち、上から3つ目のネームスペースに関してのみまとめています。
1つ目及び2つ目の機能(ミックスイン)に関しては別記事にてまとめていますので、ぜひこちらでご覧ください:information_desk_person_tone2:
→ https://qiita.com/tomokichi_ruby/items/b348d7a44928262cc7e4

#ネームスペース(名前空間)とは
各要素に一意の異なる名前をつけた範囲のことです。
また要素の名前が衝突しても識別できるように、要素の集合に対して付与された名前のこと

例えば複数名で同じアプリケーションを作成する場合などは特に、クラス名やメソッド名が被ってしまう危険性があります。
この名前の衝突を防ぐために活用するのがネームスペースであり、モジュールにてこのネームスペースを作ることができます!

#モジュールによるネームスペースの付け方

test.rb
module Admin
 class User
  #メソッドなど
 end
end

module Guest
 class User
  #メソッドなど
 end
end

上記の例では、Userクラスが2つ存在していますが、区別するためにそれぞれAdminとGuestモジュール内に入れています。
このようにモジュール内のクラスを参照する場合はモジュール名::クラス名とすればOKです!
例えば、クラスからインスタンスを作成する時は

test.rb
Guest::User.new

このようにするだけです!

#ネームスペースの定義の応用
すでにモジュールが定義されている場合で、そのモジュール内にクラスを追加したい場合は、
以下のようにclass モジュール名::クラス名と宣言することもできます。

test.rb
module Admin
end

class Admin::User
  #メソッドなど
end

#さいごに
ネームスペースについて解説しました!
大規模なプロジェクトになるほど、モジュールによるネームスペースの活用は必要になってきます。
モジュールを有効活用していきたいですね:relaxed:
最後までご覧いただきありがとうございました!

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?