module, class(Ruby)
こんにちは。kikeda1104です。 ファイル別にコードを切り出して、必要なモジュールやクラスでひとまとめに呼び出すのは、 割とgithubなどで公開されているコードでは一般的だと思います。
自分の頭の整理もかねて、moduleとclassの知識の整理とやりたいこと書いていきたいと思います。
Rubyにおけるmoduleとclass
Moduleとは
モジュール (Module)とは、工学などにおける設計上の概念で、システムを構成する要素となるもの。いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと。
Classとは
クラス(class)は、クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。
ModuleとClassの違い
モジュールとクラス モジュールとクラスの違いは以下の通りである。 クラスにはインスタンスとしてオブジェクトを生成する機能がある。 クラスは他のクラスの動作やデータを継承することができる。 ポリモーフィズムにより、クラスのインスタンス間の関係は実行時に変化するが、モジュール間の関係は静的である。 モジュールとクラスの類似点は以下の通りである。 どちらも実装の詳細を外部から隠蔽する。 どちらも階層(モジュール階層とクラス階層)を形成することができる。
Rubyだと、モジュール階層が同じであれば、ファイルとして切り出して、呼び出した際にも 同一のmoduleとして見てくれます。
ソースファイルを分けたい
やりたいことは、ソースファイルを分けたいんですよね。 ファイル内で、ソース分けることでも、見やすくなりますが、ファイルを分けることで、ファイル名でも判別できますから、尚良い(・∀・)
# file01.rb module Hoge def fuga puts "fuga" end end # file02.rb module Hoge class Connection end end # file03.rb require 'hoge/file01.rb' require 'hoge/file02.rb' module Hoge end
上記みたいに記述することで、module名をname spaceとして利用することができますね。
ファイルを切り分けたいスクリプト(Gem)
Railsアプリのlibにあった機能を、gem化することにしたのが理由で開発しています。
ディレクトリの構成
結果
実は、gemのファイルの切り出しがなかなか考えられずにいましたが、できると早いもので。
Connection.new.get
みたいに使いたかったので、これをリクエストは,request.rb
ファイルにまとめていましたが、
class Connection
にまとめる形にして呼び出していますね。
参考
kikeda1104/recruit_api · GitHub
書きながら調べていく事で問題が解決できたので、うまくまとめられました。 gemはまだ、開発中なので、Rubygemsに公開もしていないですが、後日、多分すると思います。
※ファイルの切り出しとか、コードの書き方で、意見があれば教えていただけると助かります。