こちらの記事にもある通り、
自作のユーティリティクラスをlib/utils/hoge_util.rbに
lang
1class HogeUtil 2end
と作成し、config/application.rbにて
lang
1# Rails 4の場合 2# config.autoload_paths += %W(#{Rails.root}/lib) 3# Rails 5の場合はこちらの書き方がよさそう 4config.paths.add 'lib', eager_load: true
ということはよくやると思います。
しかしlibの中にユーティリティクラスを置いてautoloadパスに加えるのは本当に正しいのでしょうか?個人的にはapp/utilsディレクトリを切ってそこに置いた方がいいのではないかと思いっています。理由は
- デフォルトで
libの中にはassetsやtasksがあるassetsやtasksはautoloadパスに加えたくないはず- サーバ(
rails s)を動かすために必要なRubyコードは全部appの中にあった方がgrepしやすいし、どちらに入れるか迷わずに済む libに置くと先述の記事のように、Railsをアップグレードしたときハマる可能性がある
そもそもlibの下には何を置くべきのでしょうか?
Railsガイドによると
lib/ アプリケーションで使用する拡張モジュールが置かれます。
とありますが、ちょっとよく分かりません。別のサイトでは「他のアプリケーションでも使いまわせるコードを置く」と説明しているところもありますが、assetsやtasksはアプリケーション固有である方が普通だと思います。
2018/02/17 00:52