#17 Rubyで学ぶモジュールとパッケージの基本

Rubyのファイル整理は「モジュール」という仕組みが中心で、クラスとは少し違う役割を持っています。この記事では、Rubyにおけるモジュールの基本と、ミックスインという応用的な使い方までを解説します。

ファイルを分けて読み込む

# utils.rb def greet(name) puts "こんにちは、#{name}さん" end

# main.rb require_relative 'utils' greet("太郎")

`require_relative`は、今いるファイルから見た相対パスで別のファイルを読み込む書き方です。gemなど外部ライブラリを読み込む場合は、相対パスを使わない`require`を使います。

moduleという仕組み

Rubyの`module`は、関連する機能をひとまとめにする点でクラスに似ていますが、インスタンスを作ることはできません。名前の衝突を防ぐための「名前空間」として使われることが多い機能です。

module Utils def self.greet(name) puts "こんにちは、#{name}さん" end end Utils.greet("太郎")

大きなアプリでは、`module Shop; class Order; end; end`のようにモジュールをネストさせ、`Shop::Order`という形でクラス名を管理することもあります。同じ「Order」という名前のクラスが別の場所にあっても、名前空間が違えば衝突しません。

ミックスインという使い方

Rubyの`module`は、クラスに機能を「混ぜ込む」(ミックスイン)という、Rubyらしい応用的な使い方もできます。`include`を使うと、モジュールに定義したメソッドをそのクラスのインスタンスメソッドとして使えるようになります。

module Greetable def greet puts "こんにちは、#{name}さん" end end class User include Greetable attr_reader :name def initialize(name) @name = name end end User.new("太郎").greet

Rubyには1つのクラスしか継承できない(多重継承ができない)という制約がありますが、モジュールは複数`include`できるため、継承階層を複雑にせずに複数の機能をクラスへ追加する手段としてよく使われます。似た仕組みに`extend`があり、こちらはインスタンスメソッドではなく、クラスメソッドとして機能を追加したい場合に使います。

Rubyならではの注意点

最初はファイル分割や名前空間としての役割から理解し、慣れてきたらミックスインという発展的な使い方も学んでいくとよいでしょう。`module_function`というキーワードを使うと、`self.`を毎回付けなくてもモジュール関数として定義できる書き方もあり、標準ライブラリの`Math`モジュールなどで実際に使われています。

まとめ

Rubyのファイル整理は`require_relative`で読み込み、`module`で名前空間を作ります。`include`によるミックスインは、多重継承ができないRubyで複数の機能をクラスに持たせるための重要な手法なので、クラスとの違いとあわせて意識しておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Rubyをもっと学びたい方には「プロを目指す人のためのRuby入門[改訂2版]」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本