🚚

開発日記-2026-02-03 / X のブックマークしたサイトを整理する

公開日9か月前2026-02-03
MarkdownRaw Content

Rails 8 アップグレード後に zeitwerk:check が失敗する場合の対処法

  • Rails 8 で bundle exec rails zeitwerk:check が undefined method 'preview_path=' エラーで失敗する場合、rspec-rails のバージョンが古い可能性がある
  • rspec-rails 6.0.x は Rails 7.1 で非推奨となった API を使用しており、Rails 8 では動作しない
  • rspec-rails を 8.x にアップグレードし、fixture_path を fixture_paths に変更することで解決する

発生した問題

Rails 8.0.4 環境で bundle exec rails zeitwerk:check を実行したところ、以下のエラーが発生しました。

NoMethodError: undefined method `preview_path=' for ActionMailer::Base:Class
Did you mean?  preview_paths=

原因

rspec-rails 6.0.x が、Rails 7.1 で非推奨となった ActionMailer::Base.preview_path= メソッドを内部で使用していました。Rails 8 ではこのメソッドが完全に削除されたため、エラーが発生します。

Rails のアップグレード時に rspec-rails のバージョンアップが漏れていたことが根本原因でした。

解決方法

1. Gemfile を更新

# 変更前
gem "rspec-rails", "~> 6.0.0"

# 変更後
gem "rspec-rails", "~> 8.0"

2. bundle update を実行

bundle update rspec-rails

3. spec/rails_helper.rb を修正

rspec-rails 8.x では fixture_path も fixture_paths(複数形)に変更されています。

# 変更前
config.fixture_path = Rails.root.join('spec/fixtures').to_s

# 変更後
config.fixture_paths = [Rails.root.join('spec/fixtures').to_s]

補足

Rails のメジャーアップグレード時は、テスト関連の gem も合わせて更新することをおすすめします。bundle outdated コマンドで古い gem を確認できます。

rspec-rails のバージョンと Rails の対応関係は以下の通りです。

rspec-rails対応 Rails
6.0.xRails 7.0
6.1.xRails 7.1
7.xRails 7.2
8.xRails 8.0

参考リンク

X のブックマークしたサイトを整理する

2026元日、Playwright MCPに触れて気づいた、LLM時代のブラウザ自動化の新しいパラダイム

2026元日、Playwright MCPに触れて気づいた、LLM時代のブラウザ自動化の新しいパラダイム

MoonBit の宣言 UI ライブラリ Luna を使ってみる

MoonBit の宣言 UI ライブラリ Luna を使ってみる

Indie Hackers

https://www.indiehackers.com/

ReactはuseEffectで副作用があるのに、なぜ純関数と言えるのか?

ReactはuseEffectで副作用があるのに、なぜ純関数と言えるのか?

キャラ名とかハンドルネームとか考えるのに参考になりそうなサイト

色の名前のページが良い。

8億人が使うChatGPTを支えるPostgreSQLのスケーリング戦略

8億人が使うChatGPTを支えるPostgreSQLのスケーリング戦略

pitcms | はがしやすい日本製ヘッドレスCMS

pitcms | はがしやすい日本製ヘッドレスCMS

GitHub をデータソースにする CMS とのこと。気になる。

Claude Code でAIにコードを書かせてAIにレビューさせる

Claude Code でAIにコードを書かせてAIにレビューさせる

知っているようで知らないCLAUDE.mdを深掘りする

知っているようで知らないCLAUDE.mdを深掘りする | gihyo.jp

Claude CodeのSubagentとcontext: forkは何が違うのか

Claude CodeのSubagentとcontext: forkは何が違うのか - 5.1さらうどん

ドキュメントからはじめる未来のソフトウェア

ドキュメントからはじめる未来のソフトウェア

BPO×AIの知見から考える「人間がレビューしない率」の上げ方

BPO×AIの知見から考える「人間がレビューしない率」の上げ方

Claude Codeで「AI部下10人」を作ったら、勝手にバグ直して「違反は切腹」ルールを追加してきて、オレは適当にしゃべるだけになった

Claude Codeで「AI部下10人」を作ったら、勝手にバグ直して「違反は切腹」ルールを追加してきて、オレは適当にしゃべるだけになった

このシリーズが全部面白い。