自作クラスを作成し利用する方法、
今回はroot/lib配下に作る方法をご紹介します。
###環境
rails 6.0.3
###application.rbの設定
module Myapp
class Application < Rails::Application
config.load_defaults 6.0
config.paths.add 'lib', eager_load: true #これを追加
end
end
lib配下をautoload_pathsに追加します。
autoload_pathsについてはこちら
lib配下の構成
lib
├── assets
├── asks
└── utils
└── hoge.rb
utils/hoge.rbを作成しまいした。
分かりやすい命名にしましょう。
hoge.rbの中身
class Utils::Hoge
end
もしくは
module Utils
class Hoge
def greeting
'hello'
end
end
end
親ディレクトリの名称をネームスペースとして、クラスを定義しましょう。
こうすることでautoload_pathsの規則に乗っ取って以下のように呼び出せます。
class ApplicationController < ActionController::Base
hoge = Utils::Hoge.new
hoge.greeting
#=> hello
end
###最後に
この記事を書いてる際以下のような投稿を発見しました。
(リサーチ不足が露呈した、、、)
Rails Guaidによると
「Rails5より前ではlib/以下をautoload_pathsに含めることがよく行われていたが、現在はappフォルダ以外の場所にコードを置いてautoload対象にするのは勧めない」となっています。
本番環境特有のエラーが発生するかもしれないとのこと。
app配下はautoload_pathsにデフォルトで入っているので、
そちらを使うのが良さそう。
じゃあなんでlibディレクトリは存在してるんだ?
開発上手な人はうまく使い分けているのかな。
新たな疑問が生まれたところで、今回は以上です。
日々精進