gemspecからテストファイルを除外してgemパッケージを42%削減

rails/rails-html-sanitizer

rails-html-sanitizer.gemspecspec.test_files 定義を削除し、gemパッケージからテストファイルを除外することで、パッケージサイズを28KBから16KBへ約43%削減しました。

背景

rails-html-sanitizer ではこれまで test/ 配下の4ファイル(rails_api_test.rbsanitizer_test.rbscrubbers_test.rbtest_helper.rb)がgemパッケージに同梱されていました。エンドユーザーがgemをインストールする際にテストファイルは不要であり、パッケージサイズの無駄な増大につながっていました。

Railsリポジトリ本体でも、たとえば actioncable.gemspec では spec.test_files を定義せず spec.files のみで必要ファイルを明示する方針が採られています。本PRはこの慣習に倣い、rails-html-sanitizer も同様の構成に揃えるものです。

技術的な変更

変更は rails-html-sanitizer.gemspec の1行削除のみです。

変更前:

spec.files         = Dir["lib/**/*", "README.md", "MIT-LICENSE", "CHANGELOG.md"]
spec.test_files    = Dir["test/**/*"]
spec.require_paths = ["lib"]

変更後:

spec.files         = Dir["lib/**/*", "README.md", "MIT-LICENSE", "CHANGELOG.md"]
spec.require_paths = ["lib"]

spec.test_files を削除したことで、パッケージに含まれるファイル構成から test/ ディレクトリ全体が除外されます。spec.files の定義は変更されていないため、lib/ 配下のソースコードや README.mdMIT-LICENSECHANGELOG.md は引き続きパッケージに含まれます。

結果として、gemパッケージのサイズは28KBから16KBへ削減され、差分は−12KB(約42.9%削減)となります。

設計判断

spec.test_files の削除のみというアプローチが採用されました。

spec.files が既に Dir["lib/**/*", "README.md", "MIT-LICENSE", "CHANGELOG.md"] と明示的に定義されており、test/ を含んでいないため、spec.test_files の行を削除するだけでパッケージ構成が整理されます。spec.files 側を変更する必要がなく、最小限の差分で目的を達成できる変更です。

この構成はRailsリポジトリ内の他gemspecと一貫しており、テストファイルを別途管理する必要がないためgemspecのメンテナンスコストも低減します。

まとめ

1行の削除によって依存するアプリケーションのインストール帯域とディスク使用量を削減するシンプルな改善です。spec.files で必要ファイルを明示し spec.test_files を持たない構成は、Railsリポジトリ内の他gemspecと一貫した設計となっています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
3960ed64

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→セクション群(各論)→まとめ(結論)の3部構成が明確に適用されており、必須要素がすべて含まれています。設計判断セクションも設けられており、読者の理解を深める構成になっています。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライトとGitHubのPRリンク記法がガイドライン通りに正しく使用されています。

対象読者への適合性 ✓ PASS

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

gemspecの最適化というトピックは、専門知識を持つエンジニアという対象読者に非常に適しています。冗長な説明がなく、簡潔で専門的な内容です。

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

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

各セクションが総論→各論の構成になっており、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が非常によく守られています。可読性が高いです。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiff情報を正確に反映しており、改変や省略なく引用されています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

gemspecやspec.filesなどの技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

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

「spec.test_filesを削除するとテストファイルがパッケージから除外される」という説明は技術的に正確であり、PRの意図と一致しています。

事実の突合 ✓ PASS

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

記事内の主張(パッケージサイズの削減、除外ファイル、Railsリポジトリの慣習など)はすべてPRのDescriptionやDiffで裏付けられており、ハルシネーションは検出されませんでした。

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

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

PR番号(#215)、パッケージサイズ(28KB→16KB)、削減率(約43%)など、すべての数値と固有名詞がPR情報と完全に一致しています。

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

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

記事のタイトルはPRの主題「Reduce gem size by excluding test files」を具体的な削減率を含めて要約しており、内容と完全に一致しています。

外部知識の正確性 ✓ PASS

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

記事内容はPR情報に完全に準拠しており、PRに記載のない外部知識(バージョンサポート状況、リリース日程など)の追加はありません。

時間表現の正確性 ✓ PASS

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

「これまで同梱されていた」など、変更の前後関係を示す時間表現は正確に使用されています。