gemspecからテストファイルを除外してgemパッケージを42%削減
rails-html-sanitizer.gemspec の spec.test_files 定義を削除し、gemパッケージからテストファイルを除外することで、パッケージサイズを28KBから16KBへ約43%削減しました。
背景
rails-html-sanitizer ではこれまで test/ 配下の4ファイル(rails_api_test.rb、sanitizer_test.rb、scrubbers_test.rb、test_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.md、MIT-LICENSE、CHANGELOG.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と一貫した設計となっています。