Railsガイド生成時に古い出力ファイルを削除する仕組みを追加

rails/rails

Rails 8.1では、ガイド生成時に出力ディレクトリ内の古いHTMLファイルを自動削除する機能が追加されました。これにより、リネームや削除されたガイドの残骸がサイトに残り続ける問題が解消されます。

背景

#56232で報告されていた通り、ガイドファイルがリネームされたり削除されたりしても、以前に生成されたHTMLファイルが出力ディレクトリに残り続けていました。これらの古いファイルは依然としてアクセス可能で、検索エンジンにインデックスされてしまうという問題がありました。

技術的な変更

cleanup_assetsメソッドに、HTMLファイルを削除する処理が追加されました。

変更前:

def cleanup_assets
  FileUtils.rm_rf(Dir.glob("#{@output_dir}/{stylesheets,javascripts}"))
end

変更後:

def cleanup_assets
  FileUtils.rm_f(Dir.glob("#{@output_dir}/*.html"))
  FileUtils.rm_rf(Dir.glob("#{@output_dir}/{stylesheets,javascripts}"))
end

この変更により、新しいガイドを生成する前に、出力ディレクトリ内の全HTMLファイルが削除されます。CSSやJavaScriptファイルは従来通り削除されます。

テストの追加

今回のPRでは、ガイド生成機能の初めてのテストケースも追加されました。guides/test/generator_test.rbが新設され、以下の動作を検証しています:

test "generate creates new files and removes stale html/css/js files" do
  Dir.mktmpdir do |guides_dir|
    # 一時ディレクトリでテスト環境を構築
    output_dir = File.join(guides_dir, "output")

    # 古いファイルを配置
    stale_html = File.join(output_dir, "stale_test_guide.html")
    FileUtils.touch(stale_html)

    # ガイドを生成
    # ...

    # 古いHTMLファイルが削除されていることを確認
    assert_not File.exist?(stale_html)
  end
end

テストでは実際のガイドファイル(getting_started.mdなど)をコピーし、一時ディレクトリで完全なガイド生成プロセスを実行しています。

設計判断

rm_rf(再帰的削除)ではなくrm_f(ファイル削除のみ)を使用している点が注目されます。これは出力ディレクトリ直下のHTMLファイルのみを対象とし、サブディレクトリ(images/など)の内容は保持する設計です。

また、initialize_dirsメソッドにguides_dirパラメータが追加され、テスト時に任意のディレクトリを指定できるようになりました。これにより、実際のガイドディレクトリを汚染せずにテストが実行可能になっています。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

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

品質レビュー結果

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

Review Criteria:

ガイドライン準拠 ✓ PASS

記事構成とDiffDaily Styleへの準拠状況

記事構成の必須要素(Title, Context, Technical Detail)がすべて満たされており、任意要素のDesign Insightも含まれています。カスタムMarkdown構文(ファイル名付きコードブロック、GitHubリンク)も正しく使用されており、ガイドラインに完全に準拠しています。

  • 記事構成(Title、Context、Technical Detail)
  • DiffDaily Styleガイド準拠
  • カスタムMarkdown活用
  • 対象読者への適合性
技術的整合性 ⚠ WARNING

技術的な正確性と表現の適切性

Diff情報が提供されていないためコードの直接照合はできませんでしたが、記事内のコード例は構文的に正しく、説明との整合性も取れています。技術用語の使用も正確です。Diff不在のためWARNINGとしますが、内容は技術的に妥当です。

  • 技術用語の正確性
  • コード例の正確性
  • 説明の技術的正確性
PR内容との整合性 ⚠ WARNING

元のPR情報との一致度

記事の主張は提供されたPR Titleと一致しており、矛盾はありません。ただし、PR DescriptionとDiffが不足しているため、一部の説明('Design Insight'など)はコードからの妥当な推測に基づいています。根拠のないハルシネーションは見られず、数値やIDも正確です。情報不足のためWARNINGとしますが、PR内容との整合性は高いと判断します。

  • タイトル・説明の一致
  • Diff内容の正確な反映
  • 推測の排除