Gzip圧縮の基本 — 仕組み
Gzip圧縮の仕組み、DEFLATEアルゴリズムの動作、gzipがWebで最も広く使われる圧縮方式である理由を解説します。
Fundamentals
詳細な説明
Gzip圧縮の仕組み
Gzipは、Web上で最も広くデプロイされている圧縮形式です。すべての主要ブラウザとWebサーバーがContent-Encoding: gzip HTTPヘッダーを通じてサポートしています。
DEFLATEアルゴリズム
Gzipの中核ではDEFLATEアルゴリズムが使用されており、2つの技術を組み合わせています:
LZ77(Lempel-Ziv 77):入力中の繰り返しバイト列を見つけ、後方参照で置換します。例えば、
"background-color"という文字列がCSSファイル中に50回出現する場合、DEFLATEは一度保存し、他の箇所では参照します。ハフマン符号化:より頻繁に出現するバイトに短いビットパターンを割り当てます。
e、t、スペースなどの一般的な文字は短いコードを取得し、まれな文字は長いコードになります。
GzipとRaw DEFLATEの違い
Gzip形式はDEFLATE出力を以下でラップします:
| コンポーネント | サイズ | 目的 |
|---|---|---|
| マジックナンバー | 2バイト | \x1f\x8b識別子 |
| ヘッダー | 8+バイト | 圧縮方式、タイムスタンプ、OS |
| 圧縮データ | 可変 | DEFLATE出力 |
| CRC-32チェックサム | 4バイト | 整合性検証 |
| 元のサイズ | 4バイト | 非圧縮長(mod 2³²) |
数百バイト以上のファイルでは、約18–20バイトのオーバーヘッドは無視できます。
圧縮レベル
Gzipはレベル1–9をサポートします:
- レベル1:最速の圧縮、最低の圧縮率(テキストで約60%削減)
- レベル6:速度と圧縮率のデフォルトバランス(約70%削減)
- レベル9:最も遅い圧縮、最高の圧縮率(約72%削減)
レベル6と9の差は通常わずか1–3%の追加圧縮ですが、2–4倍長くかかる場合があります。
ユースケース
すべてのWeb開発者にとって必須の知識です。gzipの基本を理解することで、アセット配信、サーバー設定、パフォーマンス最適化について情報に基づいた判断ができます。