
2026/05/17 9:26
ZIP シンクルを使用して、ZIP ファイルを圧縮してサイズを小さくします。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ZIP Shrinker は、libdeflate を用いた高性能な Deflate 圧縮を適用することで、標準的な ZIP アーカイブおよび APK、EPUB、JAR といった秘密に作られた形式のファイルサイズを大幅に削減するブラウザベースのツールです。主なメカニズムには、コメントやディレクトリエントリーなどの不要なメタデータを削除し、さらにサイズを小さくすることがあります。.tar.bz2 などの異例な形式はより高い圧縮を提供する可能性がありますが、レガシーソフトウェアと互換性を損なう場合があり、本ツールは完全な後方互換性を維持し、ダウンロードしたファイルが古いシステムでも動作することを保証します。この技術は WebAssembly ラッパー(
libdeflate.js)とオープンソースのコードベースを用いて検証が行われています。主要な成果としては、Linux v6.19 のソースコードを 5% 以上削減し、Romeo & Juliet EPUB を 18% 以上削減し、Signal などの Android アプリを約 30% 削減したことが挙げられます。このイノベーションは、ソフトウェアの配布を簡素化し、帯域幅の使用量を削減し、ストレージコストを下げる一方で、互換性や性能を損なうことなく実現します。本文
「ZIP Shrinker」を作成しました。これは、ZIP アーカイブを縮小するためのシンプルで使いやすいブラウザ拡張ツールです。さらに、APK や EPUB、JAR など、「内部では実際には ZIP 形式」であることが多いフォーマットにも対応しています。ぜひお試しください!
動作原理
このツールの高階層での動作は以下の通りです:
- ZIP アーカイブ内のすべてのファイルを、より高い圧縮率で再圧縮します。
- すべてのメタデータを削除します。
- ディレクトリに関するエントリを削除します。
再圧縮について
通常、ZIP ファイルは「Deflate」と呼ばれるアルゴリズムで圧縮されています。いくつかのツールがこの Deflate で圧縮されたデータを再圧縮し、より小さくすることができます。その代わりとして、計算に時間を費やす必要があります。私はこれらのツールの一つである「libdeflate」を採用し、ZIP の各圧縮エントリに適用しました。採用理由は性能によるものです。Zopfli などの代替案はわずかに小さい成果を得られる場合もありますが、実行時間の方がはるかに長くなるためです。
本プロジェクトの一環として、libdeflate の WebAssembly(WASM)ラッパーである
libdeflate.js も作成しました。(WASM で作業する時間は、常に楽しく感じられます!)
メタデータとディレクトリの削除について
ZIP ファイルの各エントリには、コメントなどの追加メタデータを格納できる場合があります。これらは通常使用されず、存在している場合もこのツールはそれらを削除します。これにより保存されるバイト数は大抵少ないですが、害はありません。
ディレクトリの削除については、やや慎重な判断が必要です。通常、ファイルエントリが存在すれば、それが含まれるディレクトリも存在することが前提とされます。例えば、「foo/bar.txt」というファイルエントリがあれば、「foo」ディレクトリが存在するとみなされるのです。一部の ZIP ではディレクトリとして独立したエントリが含まれていますが、ほとんどの抽出ツールはそれらを必要としないため、これらのエントリを削除します。この操作の副次的な効果として、空ディレクトリも同時に削除されてしまいます。これが問題となる場合はお知らせください。
全プロジェクトの仕組みに興味がある方は、完全なソースコードをご確認ください。
どれほど効果的ですか?
このツールが果たせる役割を確認するために、いくつかの ZIP ファイルでテストを行いました。いくつかの事例的な結果を示します:
- Linux 6.19 ソース:15.8 MiB(5.62% の削減)
- プロジェクト・グテンベルクからの『ローメオとジュリエット』EPUB:51.2 KiB(18.16% の削減)
- Android 向けの Signal v8.3.4(APK):25.6 MiB(30.06% の削減)
厳密な科学的検証ではありませんが、参考になる結果です。
なぜこのプロジェクトに取り組んだのか
この概念実証(Proof-of-concept)は、バックワード互換性を損なうことなく ZIP ファイルを小さくできることを示しています。アーカイブを誰かに送信する際にご利用いただくこともでき、また帯域幅やサーバーコストの削減にも有用です。例えば、プロジェクト・グテンベルクが同手法を用いてすべての EPUB を再圧縮すれば、一定の経費節減が可能になるかもしれません。
もちろん、ZIP が常に最も効率的な形式とは限りません。通常では
.tar.bz2 のような他のアーカイブ形式の方が小さくできる場合もよくあります。ただし、それらはバックワード互換性がありません!
さらに、ZIP は Deflate 以外の圧縮方法もサポートしています。これらは一般的ではありませんが、これらを利用してもより小さな結果を得ることが可能です。
より小さな ZIP をご希望でしたら、ぜひ本ツールを試してみてください。