ファイルが大きくて送れない、容量が足りない、通信が遅いといった悩みは、データ圧縮でぐっと軽くできます。
本記事では、可逆圧縮(ロスレス)と非可逆圧縮(ロッシー)の違いを、プログラミング初心者向けに段階的に説明し、実際の拡張子の選び方や基本手順までやさしく案内します。
難しい数式は使わず、実務で困らない判断軸を中心に学べるように構成しています。
データ圧縮の基本
データ圧縮とは
データ圧縮は、同じ内容でもより少ないビット数で表現し直してサイズを小さくする技術です。
目的は保存容量の節約と転送時間の短縮で、展開して元に戻す処理は一般に伸長(解凍)と呼びます。
プログラミングでは圧縮と伸長の両方を扱えるライブラリを選ぶのが基本です。
可逆圧縮と非可逆圧縮の違い
可逆圧縮は伸長すると完全に元どおり、非可逆圧縮は人が気づきにくい情報を捨てるため完全には戻りません。
前者はテキストやソースコードのように1ビットでも変わると困るデータに適し、後者は写真や音声のように感覚的な許容範囲があるデータで威力を発揮します。
下表は違いのイメージです。
用途と許容できる劣化の有無で選ぶ、と覚えておくと迷いません。
| 観点 | 可逆圧縮(ロスレス) | 非可逆圧縮(ロッシー) |
|---|---|---|
| 元データに戻るか | 100%戻る | 100%は戻らない |
| 主な対象 | テキスト、コード、表計算、図、線画 | 写真、音声、動画 |
| サイズの小ささ | 中程度 | とても小さくできる |
| 再編集の強さ | 劣化しない | 再圧縮で劣化が累積 |
| 代表例 | ZIP、PNG、FLAC | JPEG、AAC、H.264 |
圧縮率と品質の考え方
圧縮率は一般に「圧縮後サイズ/圧縮前サイズ」または「何倍小さくなったか」で表します。
非可逆では圧縮率を上げるほど画質や音質が下がるため、サイズと品質のバランスを目的に合わせて最適化することが大切です。
可逆では品質は変わらないため、主に速度と圧縮率のトレードオフを見ます。
可逆圧縮(ロスレス)の基礎
仕組みのイメージ
可逆圧縮は、データ内の規則性や繰り返しを見つけて短く符号化します。
例えば「AAAAA」を「5A」と表したり、よく出る単語を辞書に登録して短い番号で置き換える、といった考え方です。
代表的な手法にランレングス、LZ系、ハフマン符号化などがあります。
向いているデータ
プログラムや設定ファイル、CSVやJSONのようなテキスト、表やログ、線画や図、アイコンなど色数が少ない画像は可逆が向いています。
数値や計測データのように後から厳密に再計算が必要なものも可逆一択です。
代表形式と拡張子
可逆圧縮でよく使う形式と用途の目安です。
拡張子でおおよその性質を把握できるようにしておくと実務で迷いません。
| カテゴリ | 形式・拡張子 | 用途のメモ |
|---|---|---|
| アーカイブ | ZIP(.zip)、7z(.7z)、tar+gzip(.tar.gz)、tar+zstd(.tar.zst) | 複数ファイルをまとめる。転送や配布に便利。 |
| 一般データ圧縮 | gzip(.gz)、zstd(.zst)、xz(.xz)、LZ4(.lz4) | パイプラインやログの圧縮。速度と圧縮率の選択肢が広い。 |
| 画像(可逆) | PNG(.png)、GIF(.gif)、WebP Lossless(.webp)、TIFF(可逆) | スクリーンショット、図版、UI素材に適する。 |
| 音声(可逆) | FLAC(.flac)、ALAC(.m4a)、WAV(非圧縮) | 録音の保存や編集前のマスター。 |
| ベクター | SVG(.svg) | 図形やロゴ。拡大縮小に強い。 |
メリットとデメリット
メリットは品質が一切変わらず再編集に強いこと、デメリットは非可逆に比べサイズが大きくなりやすいことです。
また、可逆でも圧縮率を上げすぎると処理時間が長くなるため、用途に応じて速度優先(LZ4、gzip -1)や圧縮率優先(zstd 高圧縮)を使い分けます。
非可逆圧縮(ロッシー)の基礎
仕組みのイメージ
非可逆圧縮は、人間の目や耳が感じにくい情報を間引いてサイズを減らします。
画像では細かな高周波成分を弱めたりブロック単位で近似し、音声では聞こえにくい周波数帯を抑えるなど、知覚に基づく工夫が使われます。
向いているデータ
写真やイラストのグラデーション、音楽や会話、動画のように感覚的に「十分きれい」と判断できるデータに向いています。
閲覧や配信が主目的で、編集を繰り返さない用途と相性が良いです。
代表形式と拡張子
非可逆圧縮の主な形式です。
Webやモバイルでの配布は互換性重視の選択が安全です。
| カテゴリ | 形式・拡張子 | 用途のメモ |
|---|---|---|
| 画像(非可逆) | JPEG(.jpg .jpeg)、WebP(.webp)、AVIF(.avif)、HEIC(.heic) | 写真配布に最適。AVIF/HEICは新しく高圧縮だが互換性に注意。 |
| 音声(非可逆) | MP3(.mp3)、AAC(.m4a .aac)、Opus(.opus) | 配布やストリーミング。Opusは低ビットレートで高品質。 |
| 動画 | H.264/AVC(.mp4 .mkv)、H.265/HEVC(.mp4 .mkv)、VP9/AV1(.webm .mkv) | 一般配布はH.264が無難。高圧縮はHEVC/AV1。 |
メリットとデメリット
メリットはとても小さくできること、デメリットは一度劣化したら完全には戻らないことです。
編集や再圧縮を繰り返すワークフローには不向きで、必要ならマスターは可逆で保持し、配布用に非可逆を書き出します。
圧縮率と劣化のバランス
実務では「見て聞いて問題ない最小サイズ」を探します。
写真ならJPEG品質70〜85、WebP品質60〜80、AVIFでQ28〜35あたりが汎用の起点、音声はAAC 128〜192kbpsやOpus 96〜128kbps、動画はH.264でCRF 20〜23を目安に微調整します。
機械的な数値だけで決めず、実際の表示サイズや再生環境で確認するのが確実です。
非可逆の再圧縮を重ねると劣化が蓄積するため、マスターを必ず保持しましょう。
可逆圧縮と非可逆圧縮の使い分け
判断のポイント
選び方は次の観点で整理できます。
「元に完全に戻す必要があるか」「再編集の予定があるか」「配布先の互換性はどうか」「期限や計算資源は十分か」を順に確認します。
これらを満たせば可逆、足りなければ非可逆や中間案を検討します。
用途別の選び方
配布やWeb掲載では帯域節約が重要なので非可逆を優先します。
一方で制作中やアーカイブでは可逆で安全に保持し、最終出力だけ非可逆にする二段構えが実務でトラブルを減らすコツです。
企業のログやバックアップは検索性や信頼性を重視して可逆が基本です。
ファイル別のおすすめ
典型的なファイル種別ごとのおすすめです。
まずは表の基準で始め、必要に応じて微調整すると失敗が少ないです。
| データ種別 | 推奨方式 | 推奨形式の例 | 備考 |
|---|---|---|---|
| ソースコード、設定、テキスト | 可逆 | ZIP、gzip、zstd | 差分管理や検索に強い。 |
| CSV、JSON、ログ | 可逆 | gzip、zstd | ストリーミング処理に向く。 |
| スクリーンショット、UI、線画 | 可逆 | PNG、WebP Lossless、SVG | 細部がはっきり必要。 |
| 写真(Web掲載) | 非可逆 | JPEG、WebP、AVIF | 互換性重視ならJPEG。新しめはWebP/AVIF。 |
| 写真(編集保存) | 可逆 | PNG、TIFF(可逆)、RAW | マスターとして保持。 |
| 音声(編集保存) | 可逆 | WAV、FLAC | ノイズ劣化を避ける。 |
| 音声(配布) | 非可逆 | AAC、Opus、MP3 | 汎用互換はMP3、品質はOpus/AAC。 |
| 動画(配布) | 非可逆 | H.264、HEVC、AV1 | H.264は再生環境が広い。 |
| アプリ配布、複数ファイルまとめ | 可逆 | ZIP、7z、tar.gz | 署名やハッシュと併用を推奨。 |
プログラミングでの基本手順
実装は「種類を決める→ライブラリを選ぶ→パラメータを設定→結果を検証」の流れです。
可逆は入出力が一致すること、非可逆は品質を人が確認することが成功の条件です。
- 目的を決める: 完全再現が必須なら可逆、サイズ最優先なら非可逆。要件が曖昧な場合は可逆で始め、後から非可逆に派生させます。
- ライブラリ選定: 例として可逆はgzipやzstd、非可逆は画像ならPillow等、音声ならffmpegバインディング。言語標準か実績のあるものを選ぶと保守が楽です。
- パラメータ設定: 可逆は圧縮レベル(例: 1は速い/9は小さい)、非可逆は品質(Q値、ビットレート、CRF)。初期値から始め、サイズと見た目で微調整します。
- 検証: 可逆はハッシュ(SHA-256等)で同一性確認、非可逆は表示/再生とファイルサイズの両面で確認。自動テストにサンプルを組み込み、再現性を確保します。
- 保存とメタデータ: 元ファイル名、作成日時、変換設定を記録。マスター原本は必ず別に残します。
簡単なイメージとして、Pythonでテキストをgzip可逆圧縮する場合は、入力(bytes)に対しgzipで圧縮し、展開して一致を確かめます。
非可逆では画像保存時にqualityやoptimize等の引数で調整する、と覚えておくと十分です。
初心者のよくあるミスと対策
よくある落とし穴を先に知っておくと品質低下や作業やり直しを防げます。
以下のポイントに注意してください。
- JPEGを何度も開いて上書き保存してしまい、画質が劣化する。対策: 編集はPNGやTIFF(可逆)で行い、公開直前に一度だけJPEG等に書き出す。
- スクリーンショットやUI画像をJPEGで保存して文字がにじむ。対策: PNGやWebP Losslessを使う。
- JPEG/MP3/MP4をさらにZIPしても小さくならない。対策: すでに強く圧縮済みなので可逆を重ねてもほぼ縮まないと理解する。
- サイズ最小化を狙いすぎてブロックノイズやリンギングが目立つ。対策: 品質を一段階上げ、実表示サイズで確認する。
- 透過画像をJPEGで保存して背景が欠ける。対策: 透過はPNGやWebPを使う。
- 新形式(AVIF/HEIC)を使い互換性で閲覧できない端末が出る。対策: フォールバックとしてJPEG/PNGも用意する。
まとめ
データ圧縮は、用途に合わせて可逆と非可逆を使い分けるだけで、多くの場面で品質と効率を両立できます。
完全再現が必要なら可逆、配布で軽さが重要なら非可逆、編集は可逆で保持して公開前に非可逆へ、という基本だけで大半の判断に迷わなくなります。
まずは代表的な拡張子と品質パラメータの意味を押さえ、小さなサンプルで目と耳で確かめながら調整してみてください。
正しい初期選択と原本の保存が、後悔しない圧縮運用の最大の近道です。
