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

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

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

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

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

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

今日は、

・includeとは

ということをメインに

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

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

includeとは

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

どうやって継承させるか

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

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

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

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

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

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

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

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

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

これが継承です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

includeとrequireの違い

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

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

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

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

まとめ

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

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

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

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

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

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

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

かい

かい

日向徹かこよすぎか

[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説