gzipとは
gzipは、
データ圧縮プログラムの一つであり、その圧縮データのフォーマットを指します。「GNU zip」の略称で、
GNUプロジェクトによって開発・メンテナンスが行われています。多くの
UNIX系OSに標準搭載されており、広く利用されています。
歴史的背景
以前広く使われていたcompressという圧縮プログラムは、LZWアルゴリズムを使用していましたが、このアルゴリズムには特許侵害の問題がありました。そのため、
GNUプロジェクトは代替としてgzipを開発しました。
フォーマット
gzipのフォーマットは、RFC 1952「GZIP File Format Specification」として文書化されています。
他の圧縮形式との違い
Windowsや
MS-DOS環境で一般的なZIP形式とは互換性はありませんが、圧縮方法としては両者とも
Deflate法を使用しています。
概要
gzipは、Lempel-Zivアルゴリズム(
LZ77)と
ハフマン符号を組み合わせており、従来のcompressよりも高い圧縮率を実現しています。ただし、非常に冗長なファイルの場合、compressの方が圧縮率が高いこともあります。
開発者向けにはzlibという
ライブラリが提供されており、gzipが広く使われる要因の一つとなりました。
gzipで圧縮されたファイルの
拡張子は、慣習的に「.gz」が使われます。初期のgzipでは「.z」が使われていましたが、pack形式との混同を避けるために変更されました。1993年頃に作成された「.z」ファイルはgzipファイルである可能性が高いです。また、gzip自体はpack形式の伸長も可能です。
gzipコマンドは、標準入力からデータを受け取り、圧縮して標準出力に出力することができます(gunzipコマンドは逆の動作を行います)。これにより、ファイルの圧縮だけでなく、様々な用途に利用できます。
アーカイバ機能
gzipは、ZIPのように複数のファイルをまとめるアーカイバ機能は持っていません。複数のファイルを扱う場合は、tarファイルを作成し、それをgzipで圧縮するのが一般的です。
GNU tarには、アーカイブをgzipで圧縮する「-z」オプションが用意されています。これにより、アーカイブと圧縮を同時に行うことができます。gzip圧縮されたtarアーカイブには、「.tar.gz」または「.tgz」という
拡張子が使用されます。
HTTP圧縮
HTTP 1.1では、
データ圧縮により転送量を削減する機能が提供されていますが、gzipは、その圧縮フォーマットの一つとして広く利用されています。gzipの仕様はRFC 1952で定義されています。
初期に登場したバージョン1.2.4は安定版として長らく使われていましたが、4GB以上のファイルに対応していなかったため、その後バージョンアップが行われました。
現在では、圧縮・伸張速度よりも圧縮率を重視する場合、bzip2やxzなどの圧縮形式が用いられることもあります。
互換性
gzipは、zip、compress、compress -H、packで圧縮されたファイルを伸長できます。ただし、zipファイルについては、
Deflate法で圧縮され、ファイルが一つしか含まれていない場合に限ります。
gzipがインストールされている環境では、gunzip、zcat、uncompressコマンドがgzipコマンドへの
ハードリンクとして存在することがあります。Linux Standard Baseでもこれらのコマンドは指定されています。
主なオプション
`-r`: サブディレクトリを含めて圧縮します。
`-v`: 詳細情報を表示します。
`-数字`: 圧縮率を調整します(例:-9で圧縮率を最大に、-1で圧縮速度を最大にします。デフォルトは6です)。
`-f`: 上書きを強制します。
`.gz`: gzipで圧縮されたファイルに用いられます。
`.tar.gz`または`.tgz`: tarアーカイブをgzipで圧縮した場合に用いられます。
Media Type
2012年8月に発行されたRFC 6713で、`application/gzip`が定義され、IANAに正式に登録されました。以前は、`application/x-gzip`や`application/x-gzip-compressed`などが使われていました。
tarでアーカイブされている場合は、非公式に`application/x-tar-gz`も用いられます。
HTTP圧縮
gzipは、HTTP通信を高速化するために広く利用されている圧縮アルゴリズムです。現在では、ほとんどのサーバー
ソフトウェアとブラウザーがgzip圧縮に対応しています。2024年3月現在、全ウェブサイトの約50%がgzip圧縮を使用しています。
まとめ
gzipは、
データ圧縮における重要なツールであり、ファイル圧縮、HTTP通信の高速化など、様々な場面で利用されています。その歴史、特徴、互換性、そして多様なオプションを理解することで、より効果的にgzipを活用することができるでしょう。