Help us understand the problem. What is going on with this article?

Rails6で lib ディレクトリの自作クラスを使用する

自作クラスを作成し利用する方法、
今回はroot/lib配下に作る方法をご紹介します。

環境

rails 6.0.3

application.rbの設定

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の中身

hoge.rb
class Utils::Hoge
end

もしくは

hoge.rb
module Utils
  class Hoge
     def greeting
         'hello'
     end
  end
end

親ディレクトリの名称をネームスペースとして、クラスを定義しましょう。
こうすることでautoload_pathsの規則に乗っ取って以下のように呼び出せます。

application_controller.rb
class ApplicationController < ActionController::Base
   hoge = Utils::Hoge.new
   hoge.greeting
   #=> hello  
end

最後に

この記事を書いてる際以下のような投稿を発見しました。
(リサーチ不足が露呈した、、、)

autoload_pathsを修正して謎エラーをなくした話

Rails Guaidによると
「Rails5より前ではlib/以下をautoload_pathsに含めることがよく行われていたが、現在はappフォルダ以外の場所にコードを置いてautoload対象にするのは勧めない」となっています。
本番環境特有のエラーが発生するかもしれないとのこと。

app配下はautoload_pathsにデフォルトで入っているので、
そちらを使うのが良さそう。

じゃあなんでlibディレクトリは存在してるんだ?
開発上手な人はうまく使い分けているのかな。

新たな疑問が生まれたところで、今回は以上です。
日々精進

kwanji
未経験からエンジニア就職を目指している半フリーターです。 勉強する中で疑問に思ったこと、なるほどと思ったことをまとめております。 有意義なアウトプットの場、同じ疑問を感じた方のためになる場になれば幸いです。
https://kwanjichoi.github.io/portfolio/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした