日常的に大容量のデータを送受信するときやストレージを節約したいとき、私たちは当たり前のようにZIPなどの圧縮技術を利用しています。解凍すれば元の文書や画像が1ビットの狂いもなく復元される様子は不思議に思えるかもしれません。
しかし、情報が何ひとつ失われないとすれば、なぜデータのかさだけを小さくできるのでしょうか。その理由は、「データに含まれる重複や偏り(冗長性)を見つけ出し、無駄のない短い表現へと置き換えているから」です。
本稿では、可逆圧縮の基本原理、代表的なアルゴリズムの仕組み、数学的限界、そして暗号化と組み合わせた際のセキュリティ上の注意点を体系的に解説します。
---

データの「無駄」を見つけて短く言い換える——可逆圧縮の基本原理
コンピュータが扱うあらゆるデータは「0」と「1」のビット列であり、8ビットをまとめた「バイト」単位で保存・処理されます。
まず認識すべきは、画面上の文字数と内部の記憶容量(バイト数)は必ずしも一致しないという点です。文字をビット列に対応させる「文字エンコーディング」によって必要な容量は変化します。たとえばASCIIでは7ビットの文字集合を1バイト(8ビット)単位に格納するため英数字1文字が1バイトを占めますが、UTF-8では英数字が1バイトである一方、日本語のひらがなや漢字の多くは1文字あたり3バイトを消費します。
圧縮技術には、元データを100%完全に復元できる「可逆圧縮(lossless compression)」と、一部の情報を不可逆的に間引く「非可逆圧縮(lossy compression)」があります。プログラムや公的文書のように、1ビットの変質も許されないデータには必ず可逆圧縮が用いられます。
可逆圧縮の基盤となるのが、データ内部に潜む「冗長性(redundancy)」です。自然言語の決まり文句、プログラムの命令パターン、構造化データの空白など、データには「繰り返されるパターン」や「記号の出現頻度の偏り」が存在します。可逆圧縮とは、情報の順序や意味を損なうことなく、この冗長性をより短い表現形式へと置き換える技術です(RFC 1951 Section 1.3)。
裏を返せば、パターンの重複や頻度の偏りが存在しないデータは、可逆圧縮によってサイズを縮めることが原理的にできません。圧縮とは魔法ではなく、データに潜在する規則性の偏りを数理的に刈り取る処理なのです。
---
連続する記号をまとめる——ランレングス符号化とデータ膨張の落とし穴
可逆圧縮で最も直感的な手法が「ランレングス符号化(Run-Length Encoding: RLE)」です。「あ、あ、あ、あ、あ」を「『あ』が5回」と言い換えるように、同一記号の連続を「記号と回数」の組に変換します。たとえば16文字の AAAAABBBCCCCCCCC は「Aが5個、Bが3個、Cが8個」と表現できます。
INTERACTIVE
実際に動かして確かめる
条件や数値を変え、本文で説明した関係を確認できます。上記のツール画面では、文字列が (A, 5), (B, 3), (C, 8) のように組へ整理される様子が示されています。
ただし、ツールの表示と実際のファイル保存には明確な違いがあります。画面上の (A, 1000000) という表記はアルゴリズムの規則を示す模式的表現にすぎず、画面上の組数や文字数が減ったことと実ファイルのバイト圧縮率を混同してはなりません。
実際のコンピュータでファイルとして保存する際には、文字コードに加え、回数の符号化形式(固定長整数か可変長バイトか)、組の区切り情報、ファイルフォーマットを定義するヘッダーなどのメタデータ(管理オーバーヘッド)が物理的なバイト数として付加されます。
このメタデータの存在により、RLEには「データ膨張」という落とし穴が生じます。白黒ファクシミリのように同色画素が長く連続するデータでは高い圧縮効果が得られますが、ABABABABAB(10文字)のように交互に並ぶデータに適用すると、模式的には (A, 1), (B, 1)... という10個の組になり、付加された管理情報によって元のサイズを大幅に上回ってしまうのです。
---
過去のパターンを参照する——辞書式圧縮(LZ77)と前処理の知恵
現実の文章やプログラムでは、同じ文字が直後に連続するよりも、少し離れた位置で同じ単語や語句が再登場するケースが一般的です。この離れた位置にある反復パターンを捉えるのが、1977年に提唱された辞書式圧縮「LZ77」です。
LZ77は、直前に通過した一定範囲のデータ(スライド窓)の履歴を辞書として利用します。新しく読み込んだバイト列がスライド窓の中に存在するかを検索し、一致があれば文字列そのものではなく「過去のどのくらい手前から(距離)」「何バイト分一致しているか(長さ)」という数値ペア (距離, 長さ) に置き換えます。この参照は、単語や文字数単位ではなく、純粋な「過去のバイト列に対する相対的な距離と長さ」として精密に処理されます(RFC 1951 Section 1.3)。
ここで、「ZIP」と「DEFLATE」の区別を整理しておきましょう。DEFLATE(RFC 1951)は、LZ77による重複参照と後述のハフマン符号化を組み合わせた可逆圧縮アルゴリズム本体です。これに対し、ZIPは複数ファイルやフォルダ構造、更新日時等のメタデータを一元管理する「書庫コンテナ形式」であり、内部の圧縮エンジンとしてDEFLATEを採用しています。
さらに、圧縮効率を高める技術として重要なのが「前処理」です。代表例がPNG画像(W3C Recommendation 2025-06-24第三版)のフィルタリングです。滑らかな画像は隣接ピクセルの値が似ていますが、生データでは完全一致になりにくくLZ77が効きません。そこでPNGでは、DEFLATEをかける前に走査線のバイト列へ可逆フィルタを適用します。基本フィルタにはNone、Sub、Up、Average、Paethの5種があり、たとえばSubフィルタは各バイトから左隣の値を引いた差分を記録します。これにより階調の変化が「0や微小な値の連続」へと変換され、後段の圧縮効率が飛躍的に向上します。加減算のみの処理であるため、展開時には逆算により1ビットの欠損もなく完全復元されます。
---
出現頻度の偏りを詰める——エントロピー符号化とシャノンの限界
LZ77で反復を参照に置き換えた後、さらに「出現頻度の偏り」を利用するのが「エントロピー符号化」、その代表が「ハフマン符号化」です。
モールス信号が頻出する「E」に最短の「・」を割り当て、稀な「Q」や「Z」に長い符号を割り当てるのと同様に、ハフマン符号化ではデータ全体の記号頻度を数え、よく出る記号には2〜3ビットなどの短い符号を、滅多に出ない記号には10〜12ビットなどの長い符号を割り当てます。どの符号も他の符号の先頭(プレフィックス)と重複しない木構造を作るため、区切り記号なしで先頭から一意に復元できます。
DEFLATE(RFC 1951)は、LZ77でバイト列の反復を距離と長さに変換し、後段のハフマン符号化でそれらの記号や数値を頻度に応じた可変長ビット列へ詰める二段構えにより、高い圧縮率を達成しています。
では、工夫を重ねればデータは無限に小さくできるのでしょうか。情報理論の開祖クロード・シャノンは1948年の論文で「情報源符号化定理(Theorem 9)」を示しました。無記憶情報源やマルコフ情報源から生じる記号系列の1記号あたりの平均符号長は、その情報源のエントロピー率を下回ることができないと証明したのです。
ここで注意すべきは、シャノンの定理が定めているのは確率モデルで生成される長い系列に対する漸近的な平均符号長の限界であり、手元にある特定の1個のファイルに対する絶対的な物理サイズ下限を直接定めたものではないという点です。
---
なぜ「万能の圧縮ソフト」は存在しないのか——鳩の巣原理による限界
どんなファイルでも必ず1バイト以上縮小できる万能の可逆圧縮ソフトは、初等数学の根本原理によって絶対に存在し得ないことが証明されています。それを示すのが「鳩の巣原理」です。
固定長Nビットの全ファイルを考えます。Nビットで表現できるデータは 2^N 通り存在します(鳩の数)。
ここで、すべての入力を必ず1ビット以上縮められる(最大でも N-1 ビット以下になる)可逆圧縮器があると仮定します。圧縮後データ(0ビットから N-1 ビットまで)の組み合わせ総数(巣箱の数)は以下の通りです。
2^0 + 2^1 + \dots + 2^{N-1} = 2^N - 1 \text{ 通り}
巣箱の数(2^N - 1)は鳩の数(2^N)より1つ足りません。鳩の巣原理により、必ず異なる2つ以上の元データが同一の圧縮データへ割り当てられてしまいます。これでは解凍時にどちらの元データに戻すべきか判別できず、完全復元という可逆圧縮の前提が崩壊します。
したがって、「固定長Nビットのすべての入力を必ずNビット未満へ一対一に写す可逆圧縮器は数学的に存在しない」のです(RFC 1951 Section 1.4および鳩の巣原理)。
この結論から2つの重要な現実が分かります。
- 特定のデータを縮められるアルゴリズムは、別の特定のデータを必ず膨張させる。
- 圧縮済みのファイルを再圧縮しても縮まない。DEFLATE等で冗長性が取り除かれたデータには汎用圧縮器が利用できる規則性が残っておらず、ヘッダー等のオーバーヘッドによってむしろファイルサイズが肥大化します。
また、実ファイルシステムではファイル名や属性、クラスタ単位のパディングなどのメタデータが付加されるため、理論上の文字数が減っても実際のディスク占有容量や実効バイト数は減らない、あるいは増加することがあります。
---
ファイル形式の使い分けと暗号化におけるセキュリティ
圧縮の原理を理解することは、実務での技術選定や安全設計に直結します。まず「可逆圧縮」「非可逆圧縮」「コンテナ形式」を明確に整理しましょう。
- 可逆圧縮(DEFLATE、PNG、FLAC等):1ビットの変質も許されないテキスト、プログラム、構造化データに必須です。
- 非可逆圧縮(JPEG、MP3、H.264等):人間の知覚特性(感知しにくい微細な視覚・聴覚情報)を考慮してデータを不可逆的に間引き、元データは復元できない代わりに数分の一から数十分の一へと大幅に縮小します。
- 書庫・メディアコンテナ形式(DOCX、PDF、MP4等):各種データやメタデータを束ねる入れ物です。たとえば
.docxはXML文書や画像をZIP形式で格納したコンテナであり、PDFもテキストやJPEG画像を混在して保持する複合コンテナです。
なお、データ圧縮(無駄な冗長性を削る情報源符号化)と誤り訂正符号(保護用冗長性を加える通信路符号化)は手順の絶対固定ではなく、直交する独立した役割分担です。
そして実務で見落とせないのが「暗号化と圧縮の相互作用」です。AES等で適切に暗号化されたデータ本体は統計的規則性が乏しいため、暗号化後のファイルを汎用圧縮器にかけても基本的に縮みません。そのため「暗号化の前に圧縮する」のが通例です。
しかし、Web通信環境において秘密情報(セッションCookie等)と攻撃者が操作可能な入力が同一コンテキストで圧縮・暗号化される場合、深刻なサイドチャネル攻撃(CRIMEやBREACH)の標的となります(RFC 1951 Section 1.3およびセキュリティ知見)。攻撃者の推測文字列がCookieの内容と一致すると、LZ77が重複とみなして参照化するため、暗号文全体の長さがわずかに縮みます。攻撃者は暗号文を復号できなくても、パケット長の変化を観測することで秘密情報を1文字ずつ暴くことができるのです。そのため現代の通信設計では、特定条件下でのHTTP圧縮の無効化やパディングによる長さの均一化などの対策が講じられています。
---
よくある疑問(FAQ)
Q1: 写真や動画をZIPで圧縮しても容量がほとんど減らないのはなぜですか?
JPEGやMP4は、すでに内部で知覚特性を利用した高度な非可逆圧縮が施されています。データ内の重複や冗長性は限界まで削ぎ落とされているため、汎用可逆圧縮であるDEFLATEが利用できる冗長性が残っておらず、ZIPの管理ヘッダーの分だけ数バイト増加することさえあります。
Q2: 日本語テキストと英語テキストで圧縮の効き方に違いはありますか?
エンコーディング構造の違いがあります。ASCIIの英語は1文字1バイトで単語の一致が直接LZ77に捕捉されます。UTF-8の日本語は多くの文字が3バイトを要しますが、助詞や頻出表現などの偏りと重複が存在するため、ある程度の長さを持つ文書であれば英語と同様にDEFLATEで大幅に縮小できます。
Q3: 圧縮ソフトで同じファイルを繰り返し圧縮し続ければ極限まで小さくなりますか?
できません。鳩の巣原理により万能の可逆圧縮器は存在せず、一度冗長性が除去されたデータには汎用圧縮器が利用できる規則性が残っていません。再圧縮を繰り返すと、圧縮ヘッダーなどの管理情報が多重に付加され、ファイルサイズは逆に肥大化していきます。
---
まとめ:データの規則性を数理で操る知恵
ファイル圧縮の根底にあるのは魔法ではなく、データの中に生じる「パターンの反復」や「出現頻度の偏り」という冗長性を、アルゴリズムの力で効率的な表現へと再構築する数理の知恵です。
連続をまとめるランレングス、履歴を参照するLZ77、頻度に応じたハフマン符号化、そしてPNGの可逆前処理はいずれも情報を損なわずに無駄を省く技術です。万能圧縮の不可能性や暗号化時のサイドチャネルリスクといった境界線を正しく把握することが、現代のデジタル技術を安全かつ効果的に活用するための確かな土台となります。
---
出典・参考資料
- RFC 1951: DEFLATE Compressed Data Format Specification version 1.3 (<https://www.rfc-editor.org/rfc/rfc1951>)
- W3C Recommendation (2025-06-24): Portable Network Graphics (PNG) Specification (Third Edition) (<https://www.w3.org/TR/png-3/>)
- Claude E. Shannon (1948): A Mathematical Theory of Communication, Bell System Technical Journal, Vol. 27, pp. 379–423, 623–656 (<https://doi.org/10.1002/j.1538-7305.1948.tb01338.x>)
