圧縮形式別の速度と圧縮率を実測【gzip/bzip2/xz/zstd】

ベンチマーク

この記事のポイント

  • zstd はデフォルトレベルで gzip約6.5倍速く圧縮でき、解凍も約3.9倍速い
  • bzip2 はログ形式のテキストに対してxzより高い圧縮率を実現(ただし解凍が最も遅い)
  • ランダムバイナリは4形式すべてでほぼ圧縮できない(圧縮率100%前後)
  • 配布目的・アーカイブ保存なら xz、日常のバックアップや転送なら zstd が最適
  • Ubuntu 24.04 では gzipbzip2xz はデフォルト搭載、zstdapt install zstd で追加

「ファイルを圧縮するときって gzip でいいんじゃないの?」と思っている方は多いと思います。実際、tar.gz 形式は長年Linuxで標準的に使われてきました。でも今は状況が変わりつつあります。

本記事では、Linux でよく使われる4つの圧縮形式(gzipbzip2xzzstd)について、Ubuntu 24.04 の Docker コンテナで実際に圧縮・解凍を計測した結果を紹介します。「どれが速いのか」「どれがサイズを小さくできるのか」が具体的な数字で分かります。

検証環境

Docker 公式イメージ ubuntu:24.04(arm64)でコマンドを実行。gzip 1.12 / bzip2 1.0.8 / xz-utils 5.4.5 / zstd 1.5.5。テストデータはDockerコンテナ内で生成した135MB のログ形式テキストファイル。3回計測の平均値を掲載しています(2026-06-14 計測)。

4つの圧縮形式の基本知識

①gzip(GNU zip)— Linuxの標準形式

gzip はLinuxでもっとも広く使われている圧縮形式です。.gz という拡張子で、tar.gz(= .tgz)として複数ファイルのアーカイブにもよく使われます。Ubuntu には最初から入っており、apt install 不要で即使えます。




ubuntu@linuxlab: ~
$ gzip –version
gzip 1.12
Copyright (C) 2007-2022 Free Software Foundation, Inc.
$ gzip -6 largefile.log # デフォルトレベル6で圧縮
$ gunzip largefile.log.gz # 解凍

②bzip2 — 高圧縮率だが速度は遅い

bzip2 はブロックソート(BWT)アルゴリズムを使っており、特に繰り返しパターンが多いテキストデータで高い圧縮率を発揮します。ただし圧縮・解凍とも gzip より時間がかかります。




ubuntu@linuxlab: ~
$ bzip2 –version 2>&1 | head -1
bzip2, a block-sorting file compressor. Version 1.0.8, 13-Jul-2019.
$ bzip2 -6 largefile.log # デフォルトレベル6で圧縮 → .bz2
$ bunzip2 largefile.log.bz2 # 解凍

③xz — 最高水準の圧縮率、圧縮が非常に遅い

xz は LZMA2 アルゴリズムを使い、4形式の中で最高レベルの圧縮率を持ちます。カーネルのソースコードやDebian/Ubuntuのパッケージ配布に使われる理由はここにあります。ただしデフォルトレベル(-6)での圧縮速度はzstdの約200倍以上遅いという欠点があります。




ubuntu@linuxlab: ~
$ xz –version
xz (XZ Utils) 5.4.5
$ xz -6 largefile.log # デフォルトレベル6で圧縮 → .xz
$ unxz largefile.log.xz # 解凍

④zstd(Zstandard)— Facebook製の新世代圧縮形式

zstd は Meta(Facebook)が開発した比較的新しい圧縮形式です。圧縮速度が圧倒的に速いのが最大の特徴で、圧縮率もgzipに近い水準を保ちつつ、解凍速度はさらに高速です。Ubuntu 24.04 では標準インストールに含まれていないため、別途インストールが必要です。




ubuntu@linuxlab: ~
$ sudo apt install zstd
Reading package lists… Done
Get:1 …/noble-updates/main arm64 zstd arm64 1.5.5+dfsg2-2build1.1 [575 kB]
Unpacking zstd (1.5.5+dfsg2-2build1.1) …
Setting up zstd (1.5.5+dfsg2-2build1.1) …
$ zstd –version
*** Zstandard CLI (64-bit) v1.5.5, by Yann Collet ***
$ zstd -3 largefile.log # デフォルトレベル3で圧縮 → .zst
$ zstd -d largefile.log.zst # 解凍

実測ベンチマーク結果

135MB のログ形式テキストファイルを使って、4形式の圧縮・解凍速度と圧縮率を Ubuntu 24.04 Docker コンテナ内で3回計測しました。

圧縮ベンチマーク実行結果(Ubuntu 24.04 Dockerコンテナ)
圧縮ベンチマーク実行結果(Ubuntu 24.04 Dockerコンテナ)

①圧縮速度の比較

圧縮速度比較(実測棒グラフ)
圧縮速度比較(実測棒グラフ)

圧縮速度では zstd が圧倒的でした。135MB のログファイルをたった378ms(0.38秒)で処理しています。次に速い gzip でも2,462ms かかるので、zstd はgzipの6.5倍速く圧縮できます。

xz は82,683ms(約82秒)と、zstd の約218倍の時間がかかっています。頻繁に圧縮が発生する用途で xz を使うと、処理が目に見えて遅くなります。

②解凍速度の比較

解凍速度比較(実測棒グラフ)
解凍速度比較(実測棒グラフ)

解凍速度も zstd が最速で 193ms。gzip の 758ms と比べると約3.9倍速いという結果です。注目すべきは bzip2 で、圧縮よりさらに遅くなり3,983ms かかっています。アーカイブを頻繁に展開する作業では bzip2 はかなりのストレスになります。

xz は圧縮こそ極端に遅いですが、解凍は1,186ms とそれほど悪くありません。「配布パッケージのように、圧縮は一度だけで解凍は多数のユーザーが行う」という用途に向いている理由がわかります。

③圧縮率の比較(ログテキスト)

圧縮後サイズ比(実測棒グラフ)
圧縮後サイズ比(実測棒グラフ)

今回の実測で最も圧縮率が高かったのは bzip2 でした(元ファイルの8.1%に圧縮)。xz(10.4%)より高い圧縮率というのは意外に思えますが、bzip2 のブロックソートアルゴリズムはログのような繰り返しパターンが多いデータに特に効果的です。

zstd は16.3% と gzip(14.8%)より少し劣りますが、速度差を考えれば十分な結果といえます。

④ランダムバイナリの圧縮

100MB のランダムバイナリ(/dev/urandom)を圧縮した結果、4形式すべてで圧縮後サイズが元ファイルと同等(100%前後)になりました。ランダムデータにはパターンがないため、どの圧縮アルゴリズムでも縮小できません。これは圧縮の基本原理ですが、実際に計測で確認できました。




ubuntu@linuxlab: ~ (バイナリ100MB実測)
$ dd if=/dev/urandom bs=1M count=100 of=random.bin
100+0 records in / 100+0 records out / 104857600 bytes (105 MB)
$ gzip -6 -c random.bin | wc -c
104878080 # ← 元より増えた!(約100.0%)
$ zstd -3 -c random.bin | wc -c
104860672 # ← ほぼ同じ(約100.0%)
# 既に圧縮済みのJPEG/MP4/ZIP等も同様の結果になる

総合比較表

圧縮形式 総合比較表(実測)
圧縮形式 総合比較表(実測)

Ubuntu 22.04 と 24.04 のバージョン差

Ubuntu 22.04(Jammy)と 24.04(Noble)で利用できるバージョンを実際に確認しました。

圧縮形式 Ubuntu 22.04 (Jammy) Ubuntu 24.04 (Noble) 変更点
gzip 1.10 1.12 マイナーアップデート
bzip2 1.0.8 1.0.8 変化なし
xz-utils 5.2.5 5.4.5 パフォーマンス改善
zstd 1.4.8 1.5.5 大幅アップデート(速度向上)



ubuntu@linuxlab: ~ (Ubuntu 22.04)
$ gzip –version | head -1
gzip 1.10
$ xz –version | head -1
xz (XZ Utils) 5.2.5
$ zstd –version
*** zstd command line interface 64-bits v1.4.8, by Yann Collet ***



ubuntu@linuxlab: ~ (Ubuntu 24.04)
$ gzip –version | head -1
gzip 1.12
$ xz –version | head -1
xz (XZ Utils) 5.4.5
$ zstd –version
*** Zstandard CLI (64-bit) v1.5.5, by Yann Collet ***

用途別の使い分け

日常のバックアップや転送 → zstd 一択

毎日のバックアップや大きなファイルの転送では、圧縮・解凍の速度が体感に直結します。zstd なら処理待ち時間が大幅に短縮できます。圧縮率は gzip より少し劣りますが、速度のメリットが圧倒的です。




ubuntu@linuxlab: ~
$ tar -c –zstd -f backup.tar.zst /var/log/ # tar + zstd でアーカイブ
$ tar -x –zstd -f backup.tar.zst # 展開

長期保存・配布パッケージ → xz

圧縮は一度だけで、解凍が何度も行われる場合(ソフトウェア配布など)は xz が向いています。圧縮に時間がかかっても問題ない場面、かつ少しでも小さなサイズにしたい場合が xz の出番です。

互換性重視 → gzip

古いシステムや他のUnix環境との互換性が必要な場合は gzip が安全です。事実上すべてのLinux/Unix環境で利用可能です。

bzip2 はどこで使う?

正直、現在の bzip2 を新規採用する理由はほとんどありません。圧縮率は高くなる場面もありますが、解凍が遅すぎます。既存の .bz2 ファイルを扱う際に使う程度でよいでしょう。

著者アイコン
著者アイコン

実際に計測してみて一番驚いたのは bzip2 の圧縮率でした。ログデータに対して xz よりも高い圧縮率が出るというのは知らなかった発見です。bzip2 のブロックソートは繰り返しパターンとの相性が特に良いんですね。

よくある疑問

圧縮レベルは何を指定すれば良い?

各コマンドの -1(最速・低圧縮)から -9(最遅・高圧縮)の間で指定できます(デフォルトは gzip/bzip2/xz は -6、zstd は -3)。日常用途ではデフォルトのままで十分です。zstd は -1 から -19 まであり、さらに --ultra -22 まで指定できます。




ubuntu@linuxlab: ~
$ zstd -1 hugefile.tar # 最速(最低圧縮)
$ zstd -19 hugefile.tar # 最高圧縮(かなり遅い)
$ zstd -3 hugefile.tar # デフォルト(バランス)
$ xz -1 hugefile.tar # xz でも -1 は大幅高速化

並列圧縮でxzを高速化できる?

xz-T オプションでスレッド数を指定できます。マルチコアのVPSを使っている場合は試してみる価値があります(今回の実測は -T1 = シングルスレッドで計測)。




ubuntu@linuxlab: ~
$ nproc
4
$ xz -6 -T4 hugefile.tar # 4スレッドで並列圧縮
# スレッド数分だけメモリ消費が増える点に注意

tar コマンドとの組み合わせは?

ディレクトリごとアーカイブする場合は tar と組み合わせます。




ubuntu@linuxlab: ~
$ tar -czf archive.tar.gz mydir/ # gzip
$ tar -cjf archive.tar.bz2 mydir/ # bzip2
$ tar -cJf archive.tar.xz mydir/ # xz
$ tar -c –zstd -f archive.tar.zst mydir/ # zstd(GNU tar 1.31以降)
# 解凍はすべて tar -xf archive.xxx でOK(形式を自動判定)

注意

tar --zstd オプションは GNU tar 1.31 以降で対応しています。Ubuntu 22.04 は tar 1.34、Ubuntu 24.04 は tar 1.35 のため両方で使えます。

まとめ

Ubuntu 24.04 で4つの圧縮形式(gzip/bzip2/xz/zstd)を実際に計測した結果をまとめます。

  • 速度最優先なら zstd(gzip の6.5倍速く圧縮、3.9倍速く解凍)
  • 圧縮率最優先で時間を問わないなら xz(bzip2もログデータでは健闘)
  • 互換性・汎用性なら gzip(速度と圧縮率のバランスも悪くない)
  • 新規採用で bzip2 を選ぶ理由は現時点でほぼない
  • ランダムバイナリや既圧縮ファイル(jpg/mp4/zip等)はどの形式でも圧縮できない

VPS でサーバーを運用していると、ログのローテーション・バックアップ・大きなファイルの転送など、圧縮の場面は意外と多いものです。用途に応じて使い分けることで、作業効率が大きく変わります。まずは apt install zstd で zstd を追加しておくと何かと便利です。

サーバー運用に興味があれば、VPSを借りてLinux環境を試してみるのが一番の近道です。

コメント

タイトルとURLをコピーしました