Skip to content

ActiveSupport::LoggerThreadSafeLevel::Logger (NameError) の解決法

問題概要

Rails 6.1.7.10 + Ruby 2.6.6 環境で bundle update 後に以下のエラーが発生します:

shell
ActiveSupport::LoggerThreadSafeLevel::Logger: uninitialized constant (NameError)

典型的なエラートレース:

ruby
.../active_support/logger_thread_safe_level.rb:16:in
`module:LoggerThreadSafeLevel': uninitialized constant
ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)

発生条件

  • Rails 6.1.x(7.0以前のバージョン)環境
  • concurrent-ruby gem のバージョンが 1.3.5
  • Railsサーバ起動時に発生(rails console は動作)

根本原因

2025年初頭にリリースされた concurrent-ruby v1.3.5 での不具合が原因です:

  1. concurrent-rubyからLoggerへの依存関係が削除された
  2. Rails 6.1.x はLoggerがない状態でActiveSupportを読み込む
  3. LoggerThreadSafeLevel モジュールがLoggerクラスを参照できずエラー発生

公式GitHub Issue で報告され、根本的解決にはRails側の修正が必要です。

解決方法

方法1: concurrent-rubyのバージョンを固定(推奨)

Gemfile に以下を追加:

ruby
gem 'concurrent-ruby', '1.3.4'

ターミナルでバンドル反映:

bash
bundle update concurrent-ruby

メリット

  • 最小変更で問題解決
  • 既存コード修正不要
  • 全環境で即時有効

TIP

CocoaPods連携時のiOSプロジェクトでも有効:

bash
bundle add concurrent-ruby -v 1.3.4

方法2: 明示的にLoggerをrequire(暫定対策)

Railsアプリケーション初期化ファイルrequire "logger"を追加:

ruby
# 最上部に追加
require "logger"
require_relative "boot"
...

または boot.rb で追加:

ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)

require "bundler/setup"
require "logger" # 追加
require "bootsnap/setup" if defined?(Bootsnap)

注意点

  • 複数ファイルに追加する必要はありません
  • 既存のrequire文と競合しないように配置

方法3: Railsのバージョンアップグレード(根本解決)

Rails 7.1 以降へアップグレード:

bash
bundle update rails

バージョン確認

ruby
# Gemfile
gem 'rails', '>= 7.1.0'

アップグレードが困難な場合は、Railsパッチ適用:

bash
bundle update actionpack activesupport

回避策(非推奨)

ActiveSupportファイルの直接編集

ruby
require "active_support/concern"
require "logger" # 手動で追加
...

注意

  • gem updateで変更が上書きされる
  • 本番環境に適用非現実的

各解決法の比較

方法即効性持続性リスク推奨度
concurrent-ruby固定△※★★★★
require "logger"★★★☆
Railsアップグレード★★☆☆
ファイル直接編集×※※★☆☆☆

※ concurrent-rubyの今後のアップデートで対応不要になる可能性
※※ gem更新時に変更が失われるため非推奨

頻出Q&A

Q. なぜ特定環境でのみ発生?
開発環境ではロガーライブラリが別途読み込まれるため、本番環境に近い状態でのみ再現します。

Q. Railsコンソールが動作する理由
rails consoleではIRB環境下でLoggerが事前読み込みされ、依存問題が表面化しません。

Q. Bootsnapが必要?
必須ではありませんが、下記追加で起動高速化可能:

ruby
gem 'bootsnap', '>= 1.18.3'

最終アドバイス

  1. 保守中のプロジェクトconcurrent-ruby を1.3.4固定
  2. 新規プロジェクト → Rails 7.1+への移行を検討
  3. 一時対応config/boot.rbrequire "logger"

根本的解決にはRailsチームによる公式パッチ適用が必要ですが、上記措置で即時対処可能です。