LZ77とハフマン符号を組み合わせたDeflateで圧縮するファイル圧縮形式
ZIP(ジップ)とは、複数のファイルを1つにまとめて圧縮できる、最も普及したファイル圧縮形式です。WindowsやmacOSに標準で展開機能が備わっており、誰でも特別なソフトなしに開けます。
ZIPは可逆圧縮(=展開すれば元のファイルに完全に戻せる圧縮)です。文書・プログラム・表計算など、1ビットでも壊れると困るデータを安全に小さくできます。画像のJPEGや音声のMP3のように情報を捨てる非可逆圧縮とは、ここが決定的に違います。
身近な例で言うと、ZIPは「衣類を圧縮袋に入れて空気を抜く」イメージです。かさばる荷物を小さくまとめられ、袋を開ければ服はそのまま元どおり。この圧縮のエンジン部分が、次に説明するDeflateというアルゴリズムです。
ZIPの中核となる圧縮アルゴリズムがDeflate(デフレート)です。これは2つの技術を順番に組み合わせるのが特徴で、画像形式のPNGでも同じものが使われています。
・①LZ77:直前に出てきた同じデータの並びを「○文字前から△文字分コピー」という参照に置き換える。例えば「ABRACADABRA」の後半の「ABRA」は、前半をコピーする指示に変えられる
・②ハフマン符号:出現回数の多い値ほど短いビット列を割り当てて、全体のビット数を減らす(よく使う字を短い暗号にするイメージ)
身近な例で言うと、議事録の略語に似ています。何度も出る長い言葉を「以下A社」とまとめ(LZ77的)、さらに頻出語を短い記号にする(ハフマン的)と、文章はぐっと短くなります。可逆なので、展開時に略語を元の言葉へ戻せば完全に復元できます。この仕組みは「Deflate=LZ77+ハフマン符号」とまとめられます。
ZIPは「複数のファイルを1つにまとめる(アーカイブ)」機能と「サイズを小さくする(圧縮)」機能を兼ね備えているため、ファイルの受け渡しや保管で幅広く使われます。
代表的な用途は次のとおりです。
・ファイルのまとめ送り:複数のファイルやフォルダを1つの.zipにして、メール添付やアップロードを1回で済ませる
・ソフト・素材の配布:プログラムや資料一式をまとめて配り、受け取った側は展開して使う
・保管・容量節約:当面使わないデータを圧縮して保存し、ディスク容量を節約する
・パスワード保護:ZIPに暗号化をかけて、中身を見られないように送る
可逆圧縮のZIPは文書・プログラムなど「壊れてはいけないデータ」向きです。一方、写真や音楽をぎりぎりまで小さくしたいときは非可逆のJPEGやMP3が向きます。すでに圧縮済みのファイル(JPEGやMP3など)をZIPにしてもほとんど小さくならない点も、あわせて知っておくとよいでしょう。