自作クラスを作成し利用する方法、
今回は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ディレクトリは存在してるんだ?
開発上手な人はうまく使い分けているのかな。
新たな疑問が生まれたところで、今回は以上です。
日々精進
