テキスト圧縮

テキストデータのサイズを削減する技術。gzip、Brotli、deflate などのアルゴリズムが使われる。

テキスト圧縮とは、テキストデータの冗長性を利用してデータサイズを削減する技術です。Web では HTTP レスポンスの圧縮に gzip、Brotli、deflate などのアルゴリズムが広く使われており、ページの読み込み速度を大幅に改善します。テキストファイルは画像や動画と比べて冗長性が高いため、圧縮効果が特に顕著です。

テキスト圧縮の基本原理は、繰り返しパターンの検出と短い符号への置換です。たとえば「AAABBBCCC」という文字列は「3A3B3C」のように表現できます (ランレングス符号化)。実際の圧縮アルゴリズムはより高度で、LZ77 (スライディングウィンドウ方式) やハフマン符号化を組み合わせた deflate アルゴリズムが gzip の基盤となっています。HTML、CSS、JavaScript などのテキストファイルは繰り返しパターンが多いため、60〜80% のサイズ削減が期待できます。Web パフォーマンスの書籍で圧縮の効果を学べます。

gzip は最も普及した圧縮形式で、ほぼすべてのブラウザとサーバーがサポートしています。Brotli は Google が 2015 年に公開した圧縮アルゴリズムで、gzip より 15〜25% 高い圧縮率を実現します。特に静的コンテンツの事前圧縮 (Static Compression) では Brotli の優位性が顕著です。Zstandard (zstd) は Facebook が開発した新しいアルゴリズムで、圧縮速度と圧縮率のバランスに優れています。

Web サーバーでの圧縮設定は、Nginx では gzip on;brotli on;、Apache では mod_deflate で有効化できます。CDN (CloudFront、Cloudflare など) も自動圧縮機能を提供しており、オリジンサーバーの設定なしで圧縮配信が可能です。ブラウザは Accept-Encoding ヘッダーで対応する圧縮形式を通知し、サーバーは Content-Encoding ヘッダーで使用した圧縮形式を返します。

よくある誤解として、すべてのファイルを圧縮すべきという考えがあります。JPEG、PNG、MP4 などのバイナリファイルはすでに圧縮されているため、再圧縮してもサイズはほとんど変わらず、CPU リソースを無駄に消費します。圧縮対象は HTML、CSS、JavaScript、JSON、XML、SVG などのテキストベースのファイルに限定すべきです。また、非常に小さなファイル (1KB 未満) は圧縮ヘッダーのオーバーヘッドにより、圧縮後のサイズがかえって大きくなることがあります。

文字数カウントの観点では、圧縮後のデータはバイナリ形式であり文字数の概念が適用されません。圧縮前の文字数と圧縮後のバイト数は異なる指標です。ただし、テキストの文字数が多いほど圧縮の効果も大きくなる傾向があります。同じ単語やフレーズが繰り返し出現するテキストは圧縮率が高く、ランダムな文字列は圧縮率が低くなります。データ圧縮アルゴリズムの書籍も参考になります。