【Ruby入門】includeの使い方とrequireとの違いについて解説!

こんにちは!エンジニアのかい@dikxs118です。

今日はRubyのincludeについて見ていってもらえたらと思います。

プログラム初心者の方がまずつまづくところが、クラス、モジュールの概念だったり、このincludeの概念だったりします。

ここでしっかり分かっておくか置かないかで今後大きく変わっていきます。

そのため、まだ分かってない方はしっかり勉強していきましょう。

今日は、

・includeとは

ということをメインに

・クラスとはなにか
・モジュールとはなにか
・includeとrequireの違い

という部分をしっかりと説明していきます。

includeとは

そもそもincludeとはどのようなものなのでしょうか。

includeはモジュールの性質を他のクラスに追加するために使用されるメソッドとなります。

言い換えるならばincludeはモジュールをよぶためのメソッドです。

includeは以下のように記述します。

include モジュール名

では実際にincludeを使ってみましょう。

module Sayhello
  def hello
    p 'hello'
  end
end

class Sayhello_2
  include Sayhello
end

a = Sayhello_2.new
a.hello
“hello"

このように、定義したモジュールをクラスの中でincludeすると、インスタンスを立てることができます。

クラスやモジュールについての理解がないとincludeを理解することはできません。

そのため、次項では簡単にクラスとモジュールについても説明しておきます。

クラスとモジュールの違い

基本的にどちらもひとかたまりのデータをまとめたものなのですが、大きな違いはいかの2つです。

・どうやって継承させるか
・インスタンスを立てることができるか

他にも細かい違いやモジュールは名前空間を作れたりとあるのですが、本題ではないのでここでは説明しません。

モジュールについて詳しく知りたい方は以下の記事を読んでみてください。

クラスについて詳しく知りたい方はこちらの記事が参考になるでしょう。

では、違いを一つずつ見ていきましょう。

どうやって継承させるか

親クラスの機能を子に受け継がせることのできるのが「継承」ですが、クラスでは一つの親のみしか継承することができません。

そのため、クラスの継承は単一継承と言われています。

対して、モジュールは厳密には継承ではないのですが、Mixinという技術を用いて多重継承を可能としています。

モジュールでは継承できないという文献をよく見かけますが厳密に言えば正しいのですが、Mixinを用いて継承のようなことを複数できるため、そこまで厳密に考える必要はないでしょう。

簡単にお互いの使い方を見てみましょう。

クラスを継承してみよう!

ではクラスを継承してみます。

継承するときは<に続けてスーパークラス(親クラス)を定義します。

class Sayhello
  def hello
      p "hello_1"
  end
end

class Sayhello_2< Sayhello
  def hello_2
    p "hello_2"
  end
end

a = Sayhello_2.new
a.hello
a.hello_2
"hello_1"
"hello_2"

はい、Sayhello_2のインスタンスを立てたにもかかわらずそのインスタンスでhello_2を呼び出せていますね。

これが継承です。

クラスなので一つしか継承出来ません。

モジュールでMixinしてみよう!

では次は、モジュールの多重継承の例を見てみましょう。

モジュールの継承のさせかた(正しくはMixinという)は主にクラス内に呼び込むと言う形で使います。

どうやって呼び込むかというと、includeをつかって呼び込みます。

つまりイメージとしては、includeを使ってモジュールをクラス内に呼び込むということで多重継承を可能としています。

最初でもやった通りにですが実際にもう一度やってみましょう。

module Say
  def say
    p "say"
  end 
end

module Hello
  def hello
    p 'hello'
  end  
end

class Sayhello
  include Say
  include Hello
end

a = Sayhello.new
a.say
a.hello
"say"
"hello"

はい、SayHelloのモジュールを2つSayhelloのクラスの中で呼び出すことができましたね。

ここまでで、クラスとモジュールの違い、includeの使い方は大分わかったのではないでしょうか?

次はクラスとモジュールの違いである、インスタンスを宣言できるかどうかというところもサラッと見てみましょう。

モジュールではインスタンスは立てられない! 

これも大したことではないのですが、一番最初のコードを見てみましょう。

module Sayhello
  def hello
    p 'hello'
  end
end

class Sayhello_2
  include Sayhello
end

a = Sayhello_2.new
a.hello

これにモジュールでもインスタンスを立てようとしてみると、

module Sayhello
  def hello
    p 'hello'
  end
end

class Sayhello_2
  include Sayhello
end

a = Sayhello_2.new
a.hello

b = Sayhello.new #moduleはインスタンス立てられない
test.rb:14:in `<main>': undefined method `new' for Sayhello:Module (NoMethodError)

という風にエラーになります。

なのでモジュールはきちんとクラスの中でincludeするようにしましょう。

includeとrequireの違い

最後に時々Rubyのrequireとincludeが混ざってしまう人がいるようですが、この2つは全くの別物です。

requireは外部ファイルやライブラリを読み込むのに使う
includeはモジュールをクラス内で呼ぶために使う

と全く違うのでこの2つは似てる?とか思っている人はその違いしっかりと理解しておいてください。

また、requireについて詳しく知りたい方はこちらの記事を参考にしてください。

まとめ

いかがでしたでしょうか?

しっかりと、クラス、モジュール、includeについて理解できたでしょうか?

・クラスは単一継承しかできず>をつかってスーパークラスを指定する
・モジュールはincludeをつかってクラスの中で継承する(複数可)

ということをしっかりと覚えておきましょう。

モジュールには多重継承以外にも便利な使い方があるので学んでおくと良いでしょう。

概念的に初学者が躓きやすいところですので必ず手を動かして理解に努めてみてください!それでは!!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

かい

かい

日向徹かこよすぎか

[email protected]