【Ruby入門】モジュール(module)とMix-in
  • facebookページ
  • twitterページ
  • 2017.12.19

    【Ruby入門】モジュール(module)とMix-in

    本記事ではモジュールとMix-inについて解説します。

    モジュールとは何かを一言で表現すると「処理をまとめたもの」となります。

    前記事で処理をまとめたものとしてクラスを解説しました。同時に、クラスは共通関数ではない!と解説しました。

    一方、モジュールは共通関数に近いです。

    では早速見てみましょう。

    モジュールとは何か

    モジュールとは前述のとおり処理をまとめたものです。

    基本形は、ほぼクラスと同じです。

    実際に定義してみる

    名前を渡してあいさつを返すモジュールを定義してみましょう。

    モジュールの中にsayhelloメソッドを宣言しました。引数を受け取り、その引数を間にはさんで「こんにちは!(引数)さん」と答えてくれます。

    ただし、宣言するだけでは呼び出せません。外部から呼び出せるようにするために、module_functionを使います。

    引数としてメソッド名をシンボルで渡します。

    sayhelloを呼び出してみましょう。

    [実行結果]

    モジュール内のメソッドを呼び出せました。

    また、以下のような書き方もできますので、覚えておくと良いでしょう。

    モジュールの中にクラスや定数

    先ほどの例では、モジュールの中にメソッドを定義しまいた。

    メソッドだけでなく、定数やクラスを宣言することも可能です。

    [実行結果]

    モジュール内の定数呼び出しと、クラスのインスタンス化まで確認できました。

    名前空間

    ここで1つ確認してください。

    先ほどの2つのモジュールで、クラス名もメソッド名も同じなのはお気づきでしょうか?

    SayhelloModule1の中、SayhelloModule2の中それぞれで別世界となっており、同じ名前をつけても衝突しません。

    それぞれの世界を名前空間といいます。

    世界が異なれば、同じ名前でも良いのです。

    モジュールの特性

    クラスと比較したときの、モジュールの特性をまとめました。

    インスタンス化できない

    モジュールはインスタンス化できません。つまり、以下のようなことはできません。

    継承できない

    あるモジュールとわずかに異なる仕様を持つモジュールを作りたいとします。

    クラスであれば継承が使えます。微妙に異なる部分だけ子クラスで定義すればよいのです。

    しかしモジュールでは、継承ができません

    以上のインスタンス化できない、継承できないという2つの「できない」があります。しかし、それを補って余りある特徴があります。

    以降、解説します。

    Mix-in

    クラスにモジュールを取り込むことをMix-inといいます。

    SayhelloClass3に、SayhelloModule3というモジュールをMix-inしてみましょう。

    [実行結果]

    SayhelloClass3の中身は、includeの1行のみですがキチンと動作しています。

    このように、モジュールの中身をそのまま取り込んで、あたかも自クラスの1部分として使うことをMix-inといいます。

    多重継承もどき

    Rubyは、Javaなどと同じように多重継承を許していない言語です。

    つまり2つの親クラスを同時に継承できないのです。

    よって、1つのクラスを継承してしまった後、変更を加えるには子クラスに手を加えるしかありません。

    ところがMix-inを使うと、あたかも親クラスのように振る舞うことができるのです。

    また1度モジュールを定義すれば、他のクラスでも使えるのでとても便利です。

    インスタンスにメソッド追加

    moduleは、すでに生成されたオブジェクトに後から追加することもできます。

    [実行結果]

    すでにできあがったobjに、extendというキーワードを使ってSayhelloModule3を追加できました。

    まとめ

    本記事では、モジュールとMix-inを解説しました。

    クラスとモジュールのちがいや特性をおさえ、効率的なプログラミングができるようがんばってみてくださいね!


    Ruby on Railsのフリーランスは高収入でおすすめ!

    Rubyができる方は多くはいないのが現状です。 プロジェクトは右肩上がりで増えているので、エンジニアが全く足りておりません。 Rubyの実務経験が1年以上ある方はフリーランスになることもできるので、ぜひご興味があればポテパンの無料カウンセリングをご利用下さいませ! Ruby案件に関する情報は下記にまとまっていますのでぜひご覧下さい。

    Ruby on Rails案件のイマがわかる!知って見つかる最適案件


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE