Rails 7.1以降で発生するプレビュー読み込みエラーを `require` への置き換えで修正

viewcomponent/view_component

Rails 7.1でZeitwerkへの一本化に伴い削除された require_dependencyrequire に置き換え、モダンなRailsアプリでのプレビュー読み込みエラーを解消します。

背景

Rails 7.1は Zeitwerk のみをサポートするオートローディング体制に移行し、その過程で require_dependency を削除しました。ViewComponentのプレビュー読み込み処理がこの削除済みメソッドを使用し続けていたため、Rails 7.1以降の環境でプレビューを利用するアプリケーションでエラーが発生する状態になっていました。

技術的な変更

lib/view_component/preview.rb__vc_load_previews メソッド内で、プレビューファイルの読み込みに使用するメソッドを変更しました。

変更前:

Dir["#{preview_path}/**/*preview.rb"].sort.each { |file| require_dependency file }

変更後:

Dir["#{preview_path}/**/*preview.rb"].sort.each { |file| require file }

変更は1行のみで、require_dependency を標準の require に置き換えるだけです。__vc_load_previewspreview_paths に登録されたディレクトリ以下の *preview.rb ファイルを検索し、一括で読み込む処理を担っており、この変更によってRails 7.1以降の環境でも正常に動作します。

設計判断

require_dependency を単純に require へ置き換える 最小限のアプローチが採用されています。

require_dependency はZeitwerkベースの環境では不要であり、Zeitwerkが管理しないファイルを手動で読み込む場合は標準の require が適切な代替手段です。プレビューファイルはZeitwerkのオートロード対象パス外に配置されるケースが一般的であるため、明示的な require による読み込みは理にかなっています。

より複雑な対応策(Zeitwerkへのパス登録など)も考えられますが、プレビューファイルのロードという限定的なユースケースに対して、シンプルな置き換えが選ばれています。

まとめ

この修正は1行の変更でありながら、Rails 7.1以降の環境でViewComponentのプレビュー機能が使えない問題を解消します。削除済みAPIへの依存を取り除き、Zeitwerk時代のRailsとの互換性を回復した最小コストな修正といえます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
c8bbf4ed

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の構成が明確です。リード文、背景、技術的な変更、設計判断、まとめの全ての要素が過不足なく含まれており、論理的な流れが構築されています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:path/to/file```)の形式が正しく、記事末尾のPRリンクも適切な形式で記載されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

「Zeitwerk」「require_dependency」などの専門用語を前提として使用しており、対象読者であるエンジニアに適した技術レベルと表現になっています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論から各論へと展開され、各段落はトピックセンテンスで始まり、1段落1トピックの原則が守られています。段落の長さも適切で、可読性が高いです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内のコードブロックは、提供されたDiff情報を正確に反映しており、ファイル名も一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Zeitwerk」「require_dependency」「autoloading」といった技術用語は、PR情報と一致しており、文脈上も正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

変更の背景(Rails 7.1での`require_dependency`削除)や、`require`への置き換えがなぜ適切なのかという説明は、技術的に正確かつ論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内の主張はすべてPRのタイトル、説明、Diff内容に基づいています。「設計判断」セクションはPRに明記されていませんが、技術的に妥当な背景説明であり、ハルシネーション(捏造)には該当しません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#2589)やファイルパス(lib/view_component/preview.rb)などの固有名詞は正確に記載されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルはPRの主題を的確に要約しており、記事全体の内容とも完全に一致しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事には、PR情報に基づかないバージョンサポート状況やリリース日程などの外部知識は含まれていません。技術的な背景説明は許容範囲内です。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「削除しました」などの時間表現は、PR内の「was removed」といった記述と整合性が取れており、正確です。