14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

自作クラスを作成し利用する方法、
今回は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ディレクトリは存在してるんだ?
開発上手な人はうまく使い分けているのかな。

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

14
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?