「まとめる」と「圧縮する」は別のこと
「圧縮ファイル」という言葉の下で、2つの別々の仕事が混同されがちです。まとめる(アーカイブ)とは、名前とフォルダー構成を保ったまま、多くのファイルを1つのファイルに収めること。圧縮とは、バイト数を小さくすることです。TARはまとめるだけなので、.tarのサイズは中身をすべて足し合わせた大きさになります。gzipは圧縮するだけで、しかも一度に1つのストリームしか扱えません。だから.tar.gzがあるのです。先にまとめて、そのまとまりを圧縮します。ZIPはファイルごとに両方を同時に行い、中身の目録も持っています。
この違いが、形式の振る舞いを決めます。ZIPは末尾に目録を持ち、各ファイルを個別に圧縮しているため、10 GBの圧縮ファイルでも一覧はすぐに表示でき、途中にある1つのファイルだけをほかに触れずに取り出せます。当サイトのZIPリーダーはまさにその仕組みで、何かを求められるまで一切展開しません。一方、ソリッド圧縮はすべてを1本の連続したストリームとして圧縮するので、ファイルの境界をまたいだ繰り返しも見つけられ、結果は小さくなります。ソースコードやログのように似た小さなファイルが多い場合は、かなり小さくなることもあります。その代わり、途中の1ファイルに安く手を伸ばす方法はなく、それより前をすべて展開しなければなりません。TAR.GZは本質的にソリッドで、7zはソリッドなブロック単位で圧縮し、RARはここでは目録からではなく先頭から順に読み込まれます。
すでに圧縮されている中身は、それ以上縮みません。JPEG、PNG、MP3、MP4、PDF、そして現行のOfficeファイルはすべて圧縮を内蔵しており、deflateは時間をかけても何も得られず、かえって数バイト増えることさえあります。写真フォルダーをZIPにしても元と同じサイズになり、ツールが壊れていると思われるのはこのためです。ZIPファイル作成はこうした形式を見分け、圧縮したふりをせずにそのまま格納します。写真ならすぐ終わり、テキストには時間をかけるのはそのためです。
圧縮ファイルが持つメタデータは、ディスク上のメタデータと同じではありません。ZIPは更新日時をMS-DOS形式で保存します。この形式は2秒単位の精度で、1980年より前や2099年より後の日付を表せません。範囲外の日付はここでは丸めて処理し、圧縮ファイル全体を失敗させないようにしています。日付がゼロのRARを変換したときに実際に遭遇したバグです。TARはUnixのパーミッション、所有者、シンボリックリンクを保存します。ブラウザはそのどれもディスクから読み取れず、書き戻すこともできないため、TARファイル作成は妥当な既定のモードを書き込み、解凍ツールはパーミッションやリンクを復元せずに一覧表示します。入れたとおりに正確に戻す必要のあるバックアップなら、そのマシン上のtarで作成・復元してください。
ZIPの暗号化には2種類あり、価値があるのは片方だけです。初期のZipCrypto方式は飾りも同然なほど破られていて、既知平文攻撃を使えば普通のハードウェアで数秒のうちに中身が復元されます。それでも多くのソフトは今も既定でこれを提供しています。後から追加されたAES-256は本物の暗号化で、破ることはできません。ここではどちらも提供していません。壊れた方式を出すつもりはなく、現代的な方式には、寛容なライセンスで使えるブラウザネイティブの実装がないからです。いずれにせよ知っておきたいのは、ZIPはファイル名を決して暗号化しないため、暗号化された圧縮ファイルでも目録は誰でも読めるということです。「Invoices/2024/Settlement-confidential.pdf」はパスワードなしで見えてしまいます。
圧縮ファイルは、中身が開くプログラムそのものを攻撃しうる唯一の種類のファイルです。中のファイルに「../../.bashrc」という名前を付ければ、展開先のフォルダーから抜け出せますし、数KBのファイルを細工して数TBに膨れ上がらせ、タブを落とすこともできます。どちらも、画面に何かが表示される前に対処しています。親ディレクトリへのさかのぼり、絶対パス、Windowsのドライブ文字、予約済みのデバイス名、拡張子を偽装するための不可視文字といった危険な名前は丸めて処理し、修正した内容はすべて一覧で示します。展開率は測定し、試す前に拒否します。圧縮ファイル内のシンボリックリンクは表示しますが、たどることはありません。
ブラウザが本当に適さない場面
これらのツールは、圧縮ファイルを外部に出さないために作られています。それには代償があります。作業の途中で気づくより、ここで先にお伝えしておきます。
非常に大きな圧縮ファイル。すべてが端末のメモリ上に保持されるため、上限はプランの制限ではなくタブのメモリ量です。大きなZIPの一覧表示は目録だけを読むので軽いのですが、展開はそうはいきません。数GBの圧縮ファイルはスマートフォンでは苦しく、ノートパソコンでも失敗することがあります。7-Zip、GNU tar、bsdtarはディスクからストリーミングで処理するので、ファイルの大きさを気にしません。
RARや7zの作成。どちらもここではできません。理由はそれぞれ異なります。RARの圧縮は独自仕様で、それを作成できる唯一のコードのライセンスが、別のアーカイバを作るためにそのコードを使うことを禁じています。そのため、どのブラウザツールも誠実にRAR作成を提供することはできません。それを説明するためにあるのがZIP RAR変換のページです。7zについては、独立して書かれた実装のおかげで読み込みは可能になりましたが、書き込みにはまだそうした道がありません。どちらかが必要なら、RARはWinRARで、7zは無料でどのWebページよりも優れた7-Zipで作成できます。
暗号化されたもの全般。パスワード付きの圧縮ファイルは、ここでは作ることも開くこともできません。作成するなら、無料の7-ZipとAES-256が答えです。しかもWebページにはない利点があります。パスワードを、インターネット上のテキストボックスではなく、自分でインストールしたプログラムに入力できることです。
忠実なバックアップ。パーミッション、所有者、シンボリックリンクとハードリンク、拡張属性、スパースファイル、正確なタイムスタンプこそバックアップの目的であり、ブラウザはそのどれにもアクセスできません。GNU tarとbsdtarは無料で、macOSとLinuxには最初から入っており、こちらが適切なツールです。
自動化と、限界までの圧縮。これらのツールは人がクリックしたときに動きます。毎晩ディレクトリを圧縮する作業はコマンドラインの出番で、tar、zip、7z、zstdはどれも無料です。サイズが何より大事なら、deflateは1990年代のアルゴリズムです。高いレベルのzstdやxzなら、同じファイルのZIPを大きく上回ります。ただし、受け取った人が開けない形式になるかもしれません。
似た名前のツールの選び方
ZIP解凍、RAR解凍、7z解凍、TAR解凍。実際のところ、どれを開いても構いません。どのツールも拡張子ではなく先頭の数バイトでファイルを判別するので、4つとも全形式を開けて、そのファイルが本当は何だったのかも教えてくれます。メールのフィルターをすり抜けるために.zipに名前を変えたRARはよくあるので、これは重要です。本当に違いが出るのはページではなく形式です。ZIPは目録からすぐに一覧を表示できますが、RARは中身を伝える前に一度最後まで読み通す必要があります。
ZIPファイル作成とTARファイル作成。人が開くならZIPです。どのパソコンでも、何もインストールせずに開けます。受け取るのがマシンやLinuxユーザーなら、あるいは似た小さなファイルがたくさんあるならTAR.GZです。その場合、まとめたものを1本のストリームとして圧縮する方が、ファイルごとに圧縮するよりも目に見えて小さくなります。圧縮なしのTARを選ぶ価値があるのは、中身がすでに圧縮済みか、後工程で圧縮する場合だけです。
RAR ZIP変換とZIP RAR変換。片方は変換で、もう片方は説明です。RAR ZIP変換は実際にRARを読み込んでZIPを書き出し、ファイルは再エンコードせずにバイト単位でそのままコピーします。ZIP RAR変換は、なぜ誰にもそれができないのかを説明するページです。そうしなければ、この検索語は、ファイルを自社サーバーに持っていくか、名前を変えただけのZIPを渡すサイトに任せきりになってしまうからです。
ZIPファイル作成と、容量削減のためのZIP圧縮。この2つは目的が違います。送るために多くのファイルを1つにまとめるのは、どんなファイルでもうまくいきます。大きなファイルを小さくするのは、たいていうまくいきません。人が小さくしたい大きなファイル、つまり動画、写真、PDFはすでに圧縮されているからです。それらには、当サイトの画像・動画・PDFの圧縮ツールが中身を再エンコードします。実際に小さくできるのはその方法だけです。