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

みなさんこんにちは!

今回は、


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

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

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

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

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


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

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

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

レバテックフリーランス … 業界最大級の案件数業界トップクラスの高単価報酬を誇る最大手のサービスです。実績豊富なコーディネーターが丁寧な対応をしてくれるため、案件の無理な提案はありません。フリーランスで生きていくためにはまず登録しておきましょう。
MidWorks … フリーランス賠償責任保障生命保険の折半など、フリーランスでありながらも正社員並みの保障を受けられるのが特徴です。また、経験豊富なキャリアコンサルタントによる手厚いサポートも受けられるため、安定したフリーランス生活を送りたい方には特におすすめのサービスです。
ポテパンフリーランス … IT業界・技術に詳しいコンサルタントが担当してくれるため、こちらの要望をきちんと理解した上で案件を紹介してくれます。また、案件情報のみならず、フリーランスのイロハについても教えてくれるため、フリーランスとして初めて活動される方には特におすすめのサービスです。

レバテックキャリア … ITエンジニアが利用したい転職エージェントNo.1にも選ばれており、年収600万円以上のハイクラス求人を5,000件以上も保有しています。エンジニアが転職を考えた時にまず初めに登録しておくべきサービスです。
Tech Stars Agent … Tech Stars Agentでは、担当エージェントが全員エンジニア出身のため、スキルやキャリアを見据えたきめ細かな転職支援が受けられます。運営元の株式会社Branding Engineerは、独立支援サービス「MidWorks」も展開しているため、独立を視野に入れたサポートも受けられます
転職ドラフト … 年収UP率93.8%/平均年収UP額126万円と圧倒的な年収UP率を誇るイベント型のエンジニア向け 転職サービスです。毎月1回開催され、厳選された優良IT/Web系企業約150社からダイレクトスカウトを受け取ることができます。年収アップを目指す方は登録必須です。

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()メソッドが呼び出されるという順番です。

お仕事の途中ですが、少し一休みして、転職独立について考えてみませんか🙌?

現役エンジニアが選ぶおすすめの転職エージェント11選【成功談・失敗談もあります】

レバテックフリーランスの評判ってどう?【現役エンジニアが徹底解説します】

MidWorks(ミッドワークス)の評判ってどう?【現役エンジニアが徹底解説します】

日々の業務に追われて自分を見失わないよう、
定期的にキャリアを振り返るようにしておきましょう🤲

最後に

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

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

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

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

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

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