Rubyのincludeには3つの使い方がある? | 機能の違いを理解しよう

みなさんこんにちは!

今回は、


悩める人
・Rubyのincludeの使い方を知りたい
・Rubyのincludeにはいくつか使い方があるって本当?

というお悩みを解決する記事になっています。

Rubyには、文字列の中に特定の文字列が含まれているか否かを検索するための、include?()メソッドが存在します。

しかし、文字列を検索する機能以外にも、Rubyではincludeと名の付いた、全く別の機能を持つメソッドが存在するのをご存知でしょうか?

今回は、Rubyにおいて「include」の名の付いた機能を3つ解説していきます。それぞれの機能の違いを理解することで、ソースコードをスムーズに読解できるようになるので、プログラミングスキルの向上にお役立てください。


傍楽たろう
なお、Rubyの魅力や特徴については以下の記事で詳しく解説していますので、こちらもぜひご覧くださいね。
おすすめ記事

みなさんこんにちは! 今回の記事は、 悩みを抱えた人 ・Rubyってどんなプログラミング言語なの?・Rubyを勉強すると将来役に立つかな?・Rubyのおすすめの学習方法が知りたい! というお悩みを解決する記事にな[…]

Rubyとは?その特徴や将来性、おすすめの学習方法まで網羅的にご紹介します

Rubyのincludeは3つの機能を持つ

Rubyの「include」というキーワードは以下の3つの意味を有しています。

  • 文字列を検索する機能
  • 配列内の要素を検索する機能
  • 外部モジュールを読み込む機能

文字列検索と配列内の要素検索については、それぞれStringクラスとArrayクラスで提供しているinclude?()メソッドを指しています。

対して、外部モジュールを読み込む「include」は、複数のソースコードで共通のプログラムを実行する際に必要となるキーワードです。次の節で、それぞれの機能の詳細を説明します。

文字列を検索する「include」

まずは、文字列の検索を行うinclude?()メソッドです。

Stringクラスで定義されているインスタンスメソッドで、引数で指定した文字列がレシーバの文字列の中に含まれているかを判定する機能を持ちます。

戻り値は2種類で、文字列がヒットした場合はtrueヒットしなかった場合はfalseを返します。

サンプルコードは以下の通りです。

# レシーバとなるテキスト
sample_text = "Are you good at programming?"

# 検索対象の文字列
search_str_1 = "program"
search_str_2 = "brogram"

# include?()メソッドで文字列を検索
result = sample_text.include?(search_str_1)

if result
  p "文字列がヒットしました:" + search_str_1
else
  p "文字列が見つかりませんでした:" + search_str_1
end

result = sample_text.include?(search_str_2)

if result
  p "文字列がヒットしました:" + search_str_2
else
  p "文字列が見つかりませんでした:" + search_str_2
end

上記サンプルコードの動作結果は以下の通りです。

"文字列がヒットしました:program"
"文字列が見つかりませんでした:brogram"
傍楽たろう
また、文字列を検索する際にはmatch()メソッドを使用することもできます。
こちらもぜひご覧くださいね。
おすすめ記事

Rubyで文字列処理を実装するうえで便利なのが、正規表現と呼ばれる文字列の表現方法です。正規表現は、元の文字列から該当する部分的な文字列を検索するのに用いられ、match()メソッドと呼ばれる文字列検索メソッドと併用することが多いです。 […]

プログラミングイメージ

配列を検索する「include」

2つ目は、配列内の要素を検索するinclude?()メソッドです。

こちらは、Arrayクラスで定義されているインスタンスメソッドで、Stringクラスのものとは厳密には別物です

文字列検索と同様に、引数に何らかのデータを指定することで、配列内に該当するデータが存在するかを判定します。

戻り値についても文字列の場合と同じく、要素がヒットしたときはtrueを返し、そうでなければfalseを返します。

文字列検索のinclude?()メソッドとは違って、配列検索向けのinclude?()メソッドは、配列の要素が文字列以外のものに対応しているのが特徴です。

サンプルコードは以下の通りです。

# レシーバとなる配列
sample_array = [5, 2, 6, "a", "b", [1, 2, 3], true]

# 検索対象の要素
# (配列で定義し、要素ごとに検索をかける)
search_element = [5, 4, "a", [1, 2, 3], true]

search_element.each do |element|
  # include?()メソッドで要素を検索
  result = sample_array.include?(element)
  
  if result
    p "要素がヒットしました:" + element.to_s
  else
    p "要素が見つかりませんでした:" + element.to_s
  end
end

実行結果は、以下の通りです。

"要素がヒットしました:5"
"要素が見つかりませんでした:4"
"要素がヒットしました:a"
"要素がヒットしました:[1, 2, 3]"
"要素がヒットしました:true"
傍楽たろう
また、Rubyにはinclude()?メソッド以外にも配列を検索するためのメソッドがたくさん用意されています。
以下の記事でまとめてありますので、ぜひこちらもご覧くださいね。
おすすめ記事

今回は、Ruby初心者の方々に向けて、配列内の要素を検索する際に知っておくと便利なメソッドをご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ず使用することとなるオブジェクトになります。 そのため、今回[…]

サイト分析イメージ

モジュール読み込みの「include」

最後に、外部モジュールを読み込むための「include」です。includeを理解するには、モジュールと呼ばれる仕組みについて理解する必要があります。

Rubyにおけるモジュールとは、簡単に言えばメソッドをグループ化するための仕組みのことです。グループ化したモジュールには名前を付与することができ、クラス内で呼び出すことで利用できます。

クラスについても、メソッドを複数定義・グループ化できる点で共通していますが、モジュールはクラスのようにインスタンスを生成する仕組みは持ちません。モジュールは、あくまでメソッドをまとめることが主目的です。

例として、引数に配列を指定し、要素ごとに金額を出力するメソッドを定義し、モジュール化したものを考えてみます。

以下のサンプルコードをご覧ください。

# モジュールを定義
module AmountModule
  # 配列に格納されている金額を順に出力する
  # メソッドを定義
  def displayAmount(amount_array)
    amount_array.each do |amount|
      p amount.to_s + "円"
    end
  end
end

例で挙げたメソッドが5行目から定義したdisplayAmount()メソッドで、module-endキーワードで囲むことでモジュール化できます。

続いて、モジュールを呼び出すためのクラスを作成します。以下のサンプルコードを追加してください。

# モジュールを読み込むためのクラスを定義
class Sample
  # モジュールの読み込み
  include AmountModule

  def sampleMethod(source_array)
    # モジュールで定義したメソッドを呼び出す
    displayAmount(source_array)
  end
end

# 出力対象の配列
source_array = [123, 456, 789, 1010, 1234, 2345, 5678]

# インスタンス生成
sample_instance = Sample.new

# インスタンスメソッド呼び出し
sample_instance.sampleMethod(source_array)

上記サンプルコードを実行した場合、以下のような出力結果が得られます。

"123円"
"456円"
"789円"
"1010円"
"1234円"
"2345円"
"5678円"

モジュールを読み込むためには、クラス内で「include [モジュール名]」の形で宣言しましょう。そうすれば、メソッド内で自由にモジュール内のメソッドを呼び出すことができます。

メソッドの実行順序を追うと、最初に生成したインスタンスsample_instanceをレシーバとして、sampleMethod()メソッドが呼び出されます。次に、sampleMethod()メソッド内のdisplayAmount()メソッドが呼び出されるという順番です。

最後に

今回は、Rubyの「include」について、3つの使い方をご紹介させていただきました。

文字列を検索する配列内の要素を検索するモジュールを読み込む、と3つの役割をもつ「include」ですが、それぞれ実際の開発でも頻繁に登場しますので、ぜひこの機会にマスターしておきましょう。

最後にもう一度、本記事の内容を確認しておきましょう。

  • 文字列を検索するinclude()?メソッド
    →検索したい文字列を引数に指定します
  • 配列を検索するinclude()?メソッド
    →検索したい対象(※文字列以外も可)を引数に指定します
  • モジュールを読み込むincludeメソッド
    →include [モジュール名]で読み込みます

このブログを通じて少しでも「傍(はた)を楽(らく)にする」ことができていれば嬉しく思います。

最後まで読んで頂きありがとうございました。