edy hub

プログラミングやライフスタイルについて書き綴っています

Railsでモジュールを作ってインクルードして使うまで

特定の処理をモジュール化したい

Railsで独自実装などを記しておく、自前のモジュールを使いたい場合が誰にでもあると思います。 その際の準備など書き記しておきます。

方法

下記に則って進めましょう

  • 命名規則に沿ってモジュールを作る
  • app/libにそのモジュールを置く
  • 使用したいコントローラでincludeする

具体例

1. 命名規則に沿ってモジュールを作る

以下の命名規則に従ってモジュールを作ります。

  • ファイル名は小文字で書く
  • ファイル名の単語を_(アンダーバー)で区切る
  • クラス名(モジュール名)はアッパーキャメルケースで記述する

例えば、モジュール名がFooBarの場合、ファイル名はfoo_bar.rbとなります。

# lib/foo_bar.rb
class FooBar
  def hello
    puts 'Hello, World'
  end
end

2. app/libにそのモジュールを置く

上述の例で出したファイルのディレクトリにlibが登場しましたね。 作成したファイルはapp/lib配下に配置しましょう。

もしlib配下にさらにもう一段ディレクトリが存在した場合は、下記のパターンがあります。 例えば、lib/foo配下にファイルを設置するとします。

モジュールを用いる場合

# lib/foo/bar.rb
module Foo
  class Bar
    def hello
      puts "Foo::Bar: Hello, World"
    end
  end
end

moduleを用いない場合

# lib/foo/bar.rb
class Foo::Bar
  def hello
    puts "Foo::Bar: Hello, World"
  end
end

3. 使用したいコントローラでincludeする

例えば、controllers/sample_controller.rbでfoo_bar.rbのモジュールを使用する場合は以下のようにincludeします。これで当該モジュールが使えるようになりました。

class SampleController < ApplicationController
  include FooBar

  def index
    hello
    # => 'Hello, World'
  end

  ...
end

4.config/application.rbに一行追加

config.autoload_paths += %W(#{config.root}/lib)

これにて、autoloadの設定が完了し、命名の規約に従った場合に、lib ディレクトリ以下のファイルが自動的に読み込まれるようになります。

ただし、この記事だけを読んでも初歩の初歩でしか無いので、実務で使うとしたらこちらの記事が優れていると思うので、目を通すことをオススメします。

参考記事

Ruby on Rails で lib ディレクトリの自作クラスを使用する - Qiita