Edited at

Rails 6に上げると”DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper.”のような警告が出る


対応不要なRails本体のissue

Rails 5.2のアプリケーションを6.0.0に上げて、テストを実行したところ、以下のような警告が出ました。

DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper.

Being able to do this is deprecated. Autoloading during initialization is going
to be an error condition in future versions of Rails.

Reloading does not reboot the application, and therefore code executed during
initialization does not run again. So, if you reload PageDescription, for example,
the expected changes won't be reflected in that stale Class object.

`config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.

Please, check the "Autoloading and Reloading Constants" guide for solutions.
(called from <main> at /Users/jnito/dev/private/cb/config/environment.rb:5)

結論から先に言うと、この警告はRails本体側のissueなので対応は不要です。

Misleading deprecation warning when referencing ActionController::Base · Issue #36546 · rails/rails

Rails 6.0.0では発生しますが、おそらくこの先のアップデートで修正され、近い将来この警告は出なくなるものと思われます。


警告の原因はRails 6で導入された新しいオートロードシステムの影響

なお、この警告はRails 6から導入された、Zeitwerk(ツァイトベルク)という新しいオートロードシステムの影響で発生します。

Autoloading and Reloading Constants (Zeitwerk Mode) — Ruby on Rails Guides


修正が必要な場合

ただし、警告メッセージにActionText::ContentHelper と ActionText::TagHelper 以外の定数(クラス名)が出力されている場合は修正が必要になります。

# Fooというクラスも表示されている

DEPRECATION WARNING: Initialization autoloaded the constants Foo, ActionText::ContentHelper, and ActionText::TagHelper.

僕のRailsプロジェクトではapp/models以下に置いていたActiveRecordではない、ただのRubyクラスをconfig/initializersで呼びだしているのが原因でした。


app/models/foo.rb

# ActiveRecordではない、プレーンなRubyクラス

class Foo
def self.do_something
# ...
end
end


config/initializers/foo.rb

# app/models以下に置いた、ただのRubyクラスをconfig/initializersで呼びだすと警告が出る

Foo.do_something


修正方法

foo.rblib以下に移動し、initializersで明示的にrequireすることで警告が出なくなりました。

# ファイルをlib以下に移動する

git mv app/models/foo.rb lib/


config/initializers/foo.rb

# libディレクトリに移動した上で、明示的にrequireすると警告が出なくなる

require 'foo'
Foo.do_something

参考情報