Railsのapp以下のファイルで自動読み込みが効かない時

概要

このトラブルは、Service層などの新たな設計をappディレクトリ配下に実装する際によく直面する 自動読み込みが効いていない時に確認する項目を下記に記述する

ActiveSupport::Dependencies.autoload_pathsの確認

自動で読み込んでくれるファイルパスがどうなっているのかは下記のプログラムにて確認できる
rails cを起動して叩けばいい。

ActiveSupport::Dependencies.autoload_paths

app以下のディレクトリなら自動的に全て登録されている。
ここに入っていないのであれば、autoload_pathsが開発者の手によって操作されている可能性が高い。
config/initializersディレクトリなどに関連するコードがないかどうかを調べよう。

.autoload_pathsにいるけど読み込まれない。

恐らく、namespace絡みのトラブルにハマっている。
Railsは無作法者には厳しいのでしっかりと規則を守らないとファイルの自動読み込みは効かなくなる。

[ 自動読み込みが効く例 ]

ファイルパス: app/service/user_service.rb

class UserService
    ...
end

[ 自動読み込みが効く例2 ]

ファイルパス: app/service/service/user_service.rb

module Service
  class UserService  
  ...
  end
end

[ 自動読み込みが効かない例 ]
ファイルパス: app/service/user_service.rb

module Service
  class UserService  
  ...
  end
end

bootsnapのchacheが効いている

挙動がおかしい、何をやっても治らない場合は一度キャッシュ周りを調査する。

boot.rbに以下のようなコードがないかチェック。

require 'bootsnap'
env = ENV['RAILS_ENV'] || "development"
Bootsnap.setup(
  cache_dir:            'tmp/cache',   
  development_mode:     env == 'development',
  load_path_cache:      true,  
  autoload_paths_cache: true,      
  disable_trace:        true, 
  compile_cache_iseq:   true, 
  compile_cache_yaml:   true
)

load_path_cacheやautoload_paths_cacheをfalseにするとなおる事がある。