はじめに
「gzipってよく聞くけど、結局なに?」「どういうときに使えばいいの?」
そんな疑問を持っている方に向けて、gzipの基本から実際の活用シーンまでをまとめました。
この記事は以下のような方を対象にしています。
- Web開発やインフラを学び始めたばかりの方
- 「圧縮」の概念はなんとなくわかるけど、gzipが具体的にどう役立つか知りたい方
- コマンドラインで圧縮・展開を試してみたい方
gzipとは? ― ざっくり理解する
gzip(GNU zip) は、ファイルを小さく圧縮するためのツール・フォーマットです。1993年に生まれた歴史ある圧縮方式で、LinuxやWebの世界では事実上の標準として広く使われています。
身近な例でイメージしてみましょう。
旅行のとき、衣類を圧縮袋に入れるとスーツケースのスペースが節約できますよね。gzipはデータの世界でまさに同じことをしています。ファイルの中身を賢く詰め直して、サイズを小さくしてくれるのです。
圧縮されたファイルには .gz という拡張子がつきます。たとえば access.log を圧縮すると access.log.gz になります。
Windowsでおなじみの「zip」とは別物です。zipは複数ファイルをまとめて圧縮できますが、gzipは 単一ファイルの圧縮 に特化しています。複数ファイルをまとめたい場合は、後述する tar と組み合わせて使います。
なぜ圧縮が必要なのか?
gzipの活用シーンを理解するために、まず「なぜ圧縮するのか」を押さえておきましょう。理由は大きく3つあります。
① データ転送量の削減
ネットワーク越しにファイルを送るとき、サイズが小さければ小さいほど速く届きます。Webページの表示速度にも直結する重要なポイントです。
② 表示速度・レスポンス速度の向上
特にWebの世界では、HTMLやCSS、JavaScriptをgzipで圧縮して配信するだけで、ページの読み込み時間が大幅に短縮されます。テキスト系のファイルでは 60〜80% もサイズが小さくなることも珍しくありません。
③ ストレージの節約
サーバーに蓄積されるログファイルなどは、圧縮しておくことでディスク容量を大幅に節約できます。
gzipが活躍する代表的なシーン
ここからが本題です。「どんなときにgzipを使うのか?」を具体的なシーン別に見ていきましょう。
シーン① : Webサーバーのレスポンス圧縮
最も代表的かつ効果の大きい活用シーン です。
Webサーバー(Nginx や Apache)でgzip圧縮を有効にすると、HTML・CSS・JavaScriptなどのテキスト系レスポンスが自動的に圧縮されてブラウザに届きます。ブラウザ側が自動で展開してくれるため、ユーザーは何も意識する必要がありません。
Nginxの設定例:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1024;
}
Apacheの設定例:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json
</IfModule>
画像(JPEG, PNG)や動画(MP4)など、すでに圧縮されている形式に対してgzipをかけても効果はほとんどありません。テキスト系のファイルに対して有効にしましょう。
シーン② : APIレスポンスの圧縮
REST APIやGraphQLなどで大量のJSONデータを返す場合にも、gzip圧縮は非常に有効です。
仕組みはシンプルで、クライアント(ブラウザやアプリ)がHTTPリクエストヘッダで「gzipに対応しているよ」と伝え、サーバーが圧縮して返す、という流れです。
# クライアントからのリクエスト
GET /api/users HTTP/1.1
Accept-Encoding: gzip
# サーバーからのレスポンス
HTTP/1.1 200 OK
Content-Encoding: gzip
大きなJSONレスポンスだと、圧縮前後で以下のような差が出ることもあります。
| 状態 | サイズ |
|---|---|
| 圧縮なし | 500 KB |
| gzip圧縮後 | 80 KB |
約 84%削減 です。モバイルアプリのように通信量が気になる環境では特に効果的です。
シーン③ : ログファイルの圧縮・アーカイブ
サーバーを運用していると、アクセスログやアプリケーションログがどんどん溜まっていきます。これらを定期的にgzipで圧縮しておくことで、ディスク容量を大幅に節約できます。
Linuxの logrotate という仕組みでは、古いログを自動的にgzip圧縮してくれます。/var/log/ ディレクトリの中に .gz ファイルがたくさんあるのを見たことがある方もいるのではないでしょうか。
また、複数のファイルやディレクトリをまとめて圧縮したい場合は tar と組み合わせて使います。これが俗にいう tarball(.tar.gz) です。
# /var/log/myapp/ 配下をまとめて圧縮
tar -czf myapp-logs-20260222.tar.gz /var/log/myapp/
シーン④ : CI/CD やデプロイ時のアセット圧縮
フロントエンド開発では、ビルド時にJavaScriptやCSSを 事前にgzip圧縮しておく(プリコンプレッション)ことがあります。リクエストのたびにサーバーが圧縮処理をする必要がなくなるため、CPU負荷を抑えつつ高速配信が可能になります。
たとえば Vite や Webpack のプラグインを使うと、ビルド成果物の .gz ファイルを自動生成できます。
gzip と他の圧縮形式の違い
gzip以外にもさまざまな圧縮形式があります。簡単に比較してみましょう。
| 形式 | 圧縮率 | 速度 | Web配信 | 特徴 |
|---|---|---|---|---|
| gzip | ○ | ○ | ◎ | 最も広くサポートされている。迷ったらこれ |
| Brotli | ◎ | △ | ○ | gzipより高圧縮。モダンブラウザが対応 |
| zstd | ◎ | ◎ | △ | 高圧縮かつ高速。サーバー内部での利用が増加中 |
| zip | ○ | ○ | × | 複数ファイルをまとめられる。Windows向け配布に便利 |
結局どれを使えばいいの?
- Web配信(幅広いブラウザ対応が必要) → gzip が安定の選択肢
- モダンブラウザ向け でさらに圧縮率を求める → Brotli を検討
- サーバー内部 のログ圧縮やデータ保存 → zstd が高速で優秀
注意点・よくある落とし穴
すでに圧縮済みのファイルには効果が薄い
JPEG、PNG、MP4、ZIPファイルなど、すでに圧縮されているファイルにgzipをかけても、ほとんどサイズは変わりません(むしろ微増することもあります)。gzipの効果が高いのは、HTML・CSS・JS・JSON・CSV・ログファイルなどの テキスト系データ です。
CPU負荷とのトレードオフ
圧縮・展開にはCPUリソースを消費します。高トラフィックなサーバーでは、圧縮レベルを下げる(gzip_comp_level 1; など)か、事前圧縮(プリコンプレッション)を活用するとよいでしょう。
二重圧縮に注意
すでにgzip圧縮されたレスポンスに対して、さらにgzipをかけてしまう「二重圧縮」はよくあるミスです。CDNとオリジンサーバーの設定が噛み合っていない場合などに起こりがちなので、 Content-Encoding ヘッダを確認する習慣をつけましょう。
まとめ
gzipは「データを小さくして、通信を速くする」ための基本技術です。
- Webサーバー で有効にすれば、ページ表示を高速化できる
- API の大きなJSONレスポンスを効率よく転送できる
- ログファイル を圧縮してディスク容量を節約できる
- ビルド時 に事前圧縮しておけば、サーバーのCPU負荷を抑えられる