ZIP を XZ に変換

ここで ZIP を XZ に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 ファイルは暗号化されて当方のサーバーへ送られ、そこで変換され、処理が終わり次第削除されます

  • 処理される場所 当サイトのサーバー上です。この処理に必要なソフトウェアは、ブラウザーでは動かせません。
  • 可逆 何も捨てられません。XZはZIPが持っていたものをそのまま保持します。
  • ファイルサイズの上限 1ファイルあたり25MBまで。無料、アカウント不要です。
  • 知っておきたいこと ファイルは 1 バイトも変わらずに出てきます。失われるのは、容れ物が中身として持っていたものではなく、中身について持っていたもの——パスワードや、形式によっては元のアクセス権と日時です。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

XZ が待つ価値のある理由——経済性の話

圧縮の時間は 1 台の機械が 1 回だけ払うコストです。転送は取得する人全員が毎回払うコストで、従量課金のバケットや CDN では時間だけでなくお金でも払います。この非対称こそが XZ を選ぶ理由のすべてで、ソースリリースやパッケージのダウンロードで標準になった理由でもあります。

これは、いつ手間をかけるべきでないかも教えてくれます。同僚が 1 回だけ開くアーカイブには、最適化すべき経済性がありません。圧縮に費やす数秒が、そのファイルの一生で唯一かかる時間で、gzip ならとっくに終わっています。ファイルに閲覧者やミラー、CDN の請求、長い保存期間があるときこそ XZ を使い、受け取り手が 1 人だけならそのままにしてください。ディストリビューションが何年も前にパッケージアーカイブを xz に切り替えた理由も、11 分だけ生きるビルド成果物をわざわざ圧縮しない理由も、同じ論理です。

1 本のストリームなので、ZIP の中身はまず TAR になる

XZ はアーカイブ形式ではなく圧縮方式です。単一メンバーのストリーム形式で、ディレクトリ構造を持たないことが弱点として記録されています。.xz ファイルには名前もパスも権限ビットも入る場所がありません。

そのため ZIP の中身はまず TAR にまとめられ、その TAR を XZ が 1 つのまとまりとして圧縮します。これはこの変換機のために考え出された回避策ではなく、Unix 全体が使ってきた組み合わせです。どのソースリリースの拡張子も素の .xz ではなく .tar.xz になっているのはそのためです。2 つの層はそれぞれ独立した役割を担っており、あとで圧縮方式を xz から別のものに変えても TAR の中身には何の影響もありません。アーカイブの構造は、いま決めてしまう必要のある選択ではないということです。

6400 万バイトの辞書と 3 万 2000 バイトの窓

この数字がすべてを物語ります。ZIP も gzip も使う DEFLATE は、直近 32 KB の範囲内で繰り返しを参照します。XZ の LZMA2 は最大 64 MB 遡って参照でき、これは 2000 倍の距離です。しかも DEFLATE のハフマン符号より少ないビット数で済むレンジコーダーで符号化します。

これが効くのは、繰り返しが散らばっているアーカイブです。同じライセンスヘッダーが 200 個のファイルの冒頭にあるソースツリー、似た CSV の書き出しを集めたデータセット、1 つのテンプレートから作られた文書のフォルダー。逆にもっとも効かないのは、写真や動画を含む ZIP です。中身はアーカイブされる前にすでに圧縮されていて、長い窓を持っても見つけるものが残っていないからです。

大きな辞書が、あなたの XZ を展開する人に課すコスト

大きな辞書は展開する側にとってタダではありません。展開ツールは参照を解決するためにその窓をメモリーに保持しておく必要があるので、必要なメモリーはファイル自体の大きさより、圧縮時の辞書設定に近い量になります。

デスクトップやサーバーではまったく問題になりません。ルーターやマイクロコントローラー級のボード、制約のあるビルドエージェントといった小型のハードウェアでは無視できなくなり、そこでは gzip の控えめな 32 KB の窓が制約ではなく利点になります。アーカイブの行き先が小型の機器だとわかっているなら、.tar.gz も一緒に公開しておく理由になります。

同じ LZMA を使う XZ と 7Z のどちらを選ぶか

両者は同じ圧縮方式を使い、辞書も最大 64 MB で同じなので、圧縮率にはほとんど差がありません。違うのは圧縮データの周りにあるものです。7Z はエントリーの目次や独自の暗号化、独自のチェックサムを持つコンテナーです。XZ は 1 本のストリームを包む圧縮方式にすぎません。

配布用には慣習の面でストリームのほうが有利です。Linux や macOS には tar と xz がほぼ必ず入っていますが、7-Zip が標準で入っている機械はほとんどありません。保管して閲覧するためのアーカイブなら 7Z のほうが向いています。2 つの層を外さなくても一覧を見て 1 ファイルだけ取り出せるからです。圧縮方式は同じでも、使い勝手はまったく逆です。

変換の両側での整合性検査

どちらの形式も自己検証を持ちます。ZIP はエントリーごとに CRC を持つので、壊れたメンバーは展開時に検出されます。XZ は書かれ方に応じて CRC-32、CRC-64、SHA-256 のいずれかで圧縮ストリーム全体を検査し、一致しないデータは渡しません。

違うのは検証の粒度です。ZIP では検査がファイル単位なので、1 個の壊れたエントリーは 1 個の壊れたファイルで済みます。.xz ではストリーム単位なので、損傷はアーカイブ全体の問題として報告され、その中の tar が損傷箇所より先を回復できないこともあります。公開するものなら、ダウンロードに添える外部のチェックサムファイルは、それでもわずか数行の価値があります。

XZ は名前を保存しない——ファイル名だけがラベルになる

gzip ストリームは元のファイル名を記録できますが、XZ ストリームには相当するものがありません。検査方式とフィルターを記述するヘッダーだけの圧縮方式で、名前やタイムスタンプを置く場所はどこにもありません。

つまりファイルを説明する責任は、付けた名前がすべて背負うことになります。ダウンロードは元のファイル名の本体部分に目的の拡張子を付けて返されるので、release-1.4.zip は release-1.4.xz として返ってきます。公開する前に release-1.4.tar.xz にリネームしておくかどうかが、見てすぐわかるダウンロードと、中身を探らないといけないダウンロードの分かれ目です。変換後にできるもっとも有効な一手です。

再パッケージが行われる場所と、残るもの

この変換はブラウザーの中ではなく変換機側で動きます。ZIP は暗号化された通信でアップロードされ、7-Zip で展開されたあと tar 化・xz 圧縮されて返送されます。アップロード、中間生成物、出力結果は、ジョブが終わるとすべて削除されます。作業領域はメモリー上にあり、使い終わったコンテナーごと消えます。

結果として、無料枠は 1 ファイルあたり 25 MB、処理時間は 60 秒まで、展開後 2 GB を超えると宣言されたアーカイブは拒否され、パスワード保護された ZIP は固まるのではなくきちんと失敗します。アーカイブが本当に機密性の高いものなら、xz-utils と 7-Zip はどちらも自分の機械でオフラインに同じ作業ができます。

ZIP と XZ の両方を公開し、それぞれ誰のためか考える

ここをきちんとやっているプロジェクトは 2 つのファイルを配布します。.tar.xz はシェルやスクリプトで展開する人向けで、小さいダウンロードが実際の帯域の節約になり、ツールは OS が入った時点からすでにそろっています。ZIP は Windows でダブルクリックして中身を見たいだけで、圧縮アルゴリズムのことなど考えたくない人のために残しておきます。どちらも同じツリーから作られていて、どちらも妥協ではありません。

これは優柔不断ではなく、制約がまったく違う 2 つの層への配慮です。片方だけでは、もう片方を不利にせずに済ますことができません。成果物を 1 個しか出さないなら、実際にダウンロードする人が開けるほうを出してください。誰も展開できない見事な圧縮率のアーカイブは、圧縮率の優れたサポートチケットにすぎず、節約したバイト数は「.tar.xz とは何ですか」という問い合わせに何倍にもなって跳ね返ってきます。

再現可能なアーカイブと、同じフォルダーでも結果が変わる理由

ZIP がビルドの一部で再現性が求められるなら、再パッケージが中立な操作ではないことに注意してください。中身のバイトは正確に保たれますが、それを包むアーカイブ自体は新しく書かれるので、エントリーの順序やタイムスタンプ、圧縮方式自体の選択は、アップロードしたアーカイブではなく、パッケージ作業を行った機械に由来します。同じ ZIP を 2 回変換すると、どちらも正しいのに結果が異なることがあります。

これが問題になるのは、中身ではなくアーカイブ自体をチェックサムしている場合だけです。ダウンロードと一緒にハッシュを公開するリリースパイプラインは、そのハッシュを実際に配布するファイルから、最終的な再パッケージのあとに生成するべきで、以前の成果物から使い回してはいけません。実行ごとにバイト単位で同一の出力が必須なら、それは Web 上の変換機ではなく、圧縮設定を自分で固定できるローカルの決め打ちツールチェーンの中で解決すべき要件です。

ZIP を XZ に変換する手順

  1. お手元の ZIP ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に XZ を選び、変換を開始します。
  3. できあがった XZ ファイル をダウンロードします。

ZIP と XZ——何が変わるか

ZIPとXZの比較
ZIPXZ
正式名称ZIP アーカイブXZ アーカイブ
拡張子.zip.xz
メディアタイプapplication/zipapplication/x-xz
圧縮方式可逆 — 何も捨てない可逆 — 何も捨てない
最初の公開19892009
発行元PKWARE
仕様APPNOTE.TXT
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式7Z, TARGZ, BZ2, 7Z

残るもの

失われるものはありません。ZIP も XZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

結果を開く

XZ が圧縮するのはひとつながりの流れだけで、フォルダーを持つことはできません。XZ がたいてい書庫形式と組み合わされるのは、まさにそのためです。書庫がファイルをまとめ、XZ がその結果を圧縮します。

7-Zipは ZIP と XZ のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

ファイルサイズと品質

XZ が一度に扱う範囲は 8 MB、ZIP は 32 KB です。繰り返しがこの幅の中に収まっていて初めて、それを圧縮で畳めます。圧縮率の差はそこから来ます。そして余分にかかる計算時間も、同じところへ消えます。

どちらの形式が何のためのものか

2 つは狙っている用途が違います。ZIP はプログラム間のデータ受け渡しと完成したファイルの受け渡し、XZ は長期保存です。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

ZIP は PKWARE の形式です(1989 年に登場)。 APPNOTE.TXT で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

XZ は 2009 年から使われています。xz、7-Zip、Kekaがこの形式を読めます。

ZIP は 1989 年、XZ は 2009 年に登場しました。人に渡すならたいてい古いほうが安全で、新しいほうは同じ仕事をより少ないバイト数で片づけます。

ZIP から XZ:よくある質問

ZIP ファイル はどこかにアップロードされますか。

はい。この変換には、ブラウザーの中では動かないソフトウェアが必要です。ファイルは暗号化されて当方のサーバーへ送られ、処理が終わり次第削除されます。結果のファイルも 60 分後に削除されます。

ZIP から XZ への変換は無料ですか。

はい。25 MB までのファイルなら 1 日 100 回まで無料です。この変換だけは当方が費用を負担するサーバーで動くため、ここに上限があります。それ以外に制限はなく、透かしはどの場合も入りません。

ZIP を XZ に変換すると品質は落ちますか。

いいえ。XZ は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。 ファイルは 1 バイトも変わらずに出てきます。失われるのは、容れ物が中身として持っていたものではなく、中身について持っていたもの——パスワードや、形式によっては元のアクセス権と日時です。

XZ ファイル に複数のファイルを入れられますか。

XZ が圧縮するのはひとつながりの流れだけで、フォルダーを持つことはできません。XZ がたいてい書庫形式と組み合わされるのは、まさにそのためです。書庫がファイルをまとめ、XZ がその結果を圧縮します。

ZIP から XZ への変換は可逆ですか。

失われるものはありません。ZIP も XZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

これらのフォーマットについて

この数値の出典

このページがZIPとXZについて述べていることは検証できます。根拠となる資料は次のとおりです。