ZIP vs TAR vs 7z — どのアーカイブ形式を選ぶべきか
配布用パッケージ / バックアップ / Linux サーバー転送で ZIP / TAR.gz / 7z を選び分ける軸を、圧縮率 / 互換性 / メタデータ保持 / ランダムアクセス で比較します。
どの軸で選ぶか — 4 つの判断基準
アーカイブ形式の選択は「結局どれが一番圧縮できるか」だけでは決まりません。判断の基準は 4 つです。圧縮率 は配布物のダウンロード容量・バックアップストレージのコストに直結します。互換性 は受け取る相手 (Windows ユーザー / Linux サーバー / macOS の標準解凍) が標準ツールだけで開けるかどうかを決めます。メタデータ保持 は Unix パーミッション・所有者・シンボリックリンク・タイムスタンプを再現できるかで、サーバー間転送やバックアップで決定的に効きます。ランダムアクセス は中身の一部だけ取り出したい場面 (アーカイブの中身を一覧する / 1 ファイルだけ展開する) で重要になります。
「7z が一番小さい」「ZIP が一番互換性ある」「TAR は Linux 用」のような大雑把な評価は当たっていますが、配布・バックアップ・転送のどれを優先するかで答えが変わります。Windows ユーザーへの配布なら互換性、バックアップなら圧縮率とメタデータ、Linux サーバー間の deploy なら互換性とメタデータ、という具合に。
3 形式の比較表
| 項目 | ZIP | TAR (.tar.gz / .tar.xz) | 7z |
|---|---|---|---|
| 開発年 | 1989 | 1979 (TAR) / 1992 (gzip) | 1999 |
| 圧縮アルゴリズム | Deflate (一部 LZMA / Bzip2) | Gzip / Bzip2 / XZ (LZMA2) | LZMA2 (既定) |
| 圧縮率 (写真除く) | 基準 (100%) | .tar.gz: 90-100% / .tar.xz: 55-70% | 50-65% |
| 圧縮単位 | ファイルごと個別 | ストリーム全体 | 固体圧縮 (solid) |
| ランダムアクセス | 可 (中央ディレクトリ) | 不可 (全展開が必要) | 制限あり (solid だと困難) |
| Unix パーミッション | 拡張で限定的に対応 | 完全保持 | 拡張で対応 |
| シンボリックリンク | 拡張で対応 | 完全保持 | 拡張で対応 |
| 暗号化 | ZipCrypto (脆弱) / AES-256 | 形式自体には無し (別途 gpg) | AES-256 (標準) |
| Windows 標準対応 | あり (エクスプローラ) | なし | なし (7-Zip 別途) |
| macOS 標準対応 | あり (アーカイブユーティリティ) | あり (tar) | なし |
| Linux 標準対応 | unzip パッケージ | あり (tar / gzip) | p7zip パッケージ |
| ストリーミング処理 | 制限あり | 可 (パイプ可能) | 制限あり |
圧縮率の数字は「ソースコード・テキスト・実行ファイル」を含むまとまった配布物を ZIP (Deflate) でまとめたときを基準値 100% にした目安です。写真や動画など既に圧縮済みのファイルは、どの形式でもほぼ縮みません。
ZIP の最大の強みは ランダムアクセス。アーカイブ末尾に中央ディレクトリ (central directory) があり、これを読むだけで中身の一覧と各ファイルのオフセットが分かるため、1 ファイルだけ取り出すのが速い。一方で各ファイルが独立に圧縮されるので、似たファイルが多数あるケース (大量のログ・小さなテキスト群) では圧縮率が落ちます。
TAR は ストリーミング処理 と Unix メタデータの完全保持 が決定的な強み。tar c | ssh remote tar x のようにパイプで流せるので転送と展開を同時に進められ、所有者・パーミッション・シンボリックリンクを正しく再現します。圧縮は別段で gzip / xz / zstd を被せる構成で、.tar.gz (速度重視) と .tar.xz (圧縮率重視) を使い分けます。代償として、中身を 1 ファイルだけ見たい時でも先頭から順番に読む必要があり、巨大なアーカイブのランダムアクセスは遅くなります。
7z は 固体圧縮 (solid compression) で類似ファイル群を一括圧縮し、LZMA2 と組み合わせて最高クラスの圧縮率を出します。ソースコードをまとめたバックアップで ZIP の 5-7 割サイズになるのは珍しくありません。標準で AES-256 暗号化も持ちます。代償は配布時の互換性 — 受け取り側に 7-Zip / p7zip のインストールを要求します。
ユースケース別の推奨
Windows ユーザーへの配布 / 添付ファイル: ZIP。Windows エクスプローラと macOS アーカイブユーティリティの両方で標準ダブルクリック展開でき、サポートコストが最小。「相手が ZIP しか開けない可能性が高い」を前提にすると事故が減ります。パスワード保護が必要なら ZipCrypto (1990 年代のレガシー暗号、ほぼ平文同然) ではなく AES-256 を指定 すること。
Linux サーバー間転送 / Docker イメージのレイヤ / バックアップ復元先がもう一度 Linux: .tar.gz または .tar.xz。パーミッション・所有者・シンボリックリンクを完全に保つので、/etc 配下や Web アプリケーションのデプロイ用アーカイブで一番安全。圧縮率を上げたいなら .tar.xz (展開は遅いが配布物が小さい)、配信頻度が高くて展開速度を優先したいなら .tar.gz 。
自分の手元バックアップ・長期保管・ストレージ容量がボトルネック: 7z (LZMA2 + 固体圧縮)。ソースコードや文書 (ほぼ平文の集合) で ZIP の 5-7 割サイズに収まり、ストレージコストに効きます。AES-256 暗号化と組み合わせれば、クラウドへのバックアップ転送時も中身を守れます。代償として圧縮には時間がかかり、CPU 数コアを丸ごと使います。
Web 配信でストリーミング解凍したい / CI で artifact を流す: .tar.gz か ZIP。.tar.gz は HTTP レスポンスをパイプで tar x に流す構成が組みやすく、CI で artifact をダウンロードしながら展開できます。ZIP は中央ディレクトリの位置の都合で完全なストリーミングにはやや不向きですが、CDN との互換性が圧倒的に高い。
機密データの配布: 7z + AES-256、または .tar.gz を GPG で暗号化。ZIP の AES 拡張は対応ツールがまだ偏っており、ZipCrypto に fallback される事故が起きやすい。「暗号化されている」と表示されていても古い暗号方式の場合があるので、配布前に方式を確認するのが基本ルールです。
nosend-tools で完結する操作と落とし穴
未知のアーカイブを開けるか不安なときは、解凍前に archive-info で中身の一覧 (ファイル名・サイズ・圧縮方式) を確認できます。問題なければ archive-extract でブラウザ内で解凍します。どちらも ZIP / TAR / TAR.GZ / GZIP を扱い、ファイルはネット越しに送りません。
ブラウザだけで処理する最大の利点は、機密性のあるアーカイブ (個人情報のバックアップ・社内設計書・契約書 PDF を束ねたもの) をオンライン解凍サイトに渡さなくて済むことです。アップロード型のサービスは規約上「解析・改善目的」での閲覧・保管を許容しているケースがあり、いったん流れた情報の回収は構造的にできません。実装は GitHub で公開しており、DevTools の Network タブで「解凍中にどこにも送信されていない」ことを目視確認できます。
最後に運用上の落とし穴を 3 点。Zip Slip 脆弱性: アーカイブ内のファイル名に ../../etc/passwd のような相対パスを仕込み、解凍時にディレクトリ外へ書き出すというもので、サーバーサイドで自前解凍するときは必ずパスの normalize と上位ディレクトリ脱出のチェックを入れること。マルチバイトファイル名の文字化け: 古い ZIP は CP932 / UTF-8 のフラグが不安定で、日本語ファイル名が文字化けすることがあります。実は圧縮済みファイルは縮まない: 写真・動画・既に圧縮された PDF / docx を 7z で再圧縮しても容量はほとんど減りません。圧縮率のメリットは「テキストや非圧縮バイナリの集合」でのみ顕著です。