LoginSignup
19
7

More than 1 year has passed since last update.

zip圧縮の利点はサイズが小さくなるだけじゃないって知っていた?

Last updated at Posted at 2022-01-09

はじめに

ファイルの圧縮で一番有名なのはzip圧縮でしょう。
他にも有名な圧縮方式として、.rarや、.7z.gzipなどがあります(個人的意見)
圧縮すると表現するのですから、圧縮する理由はファイルサイズを小さくするだけだと思ったら大間違いです。

圧縮のほかの利点は、

  1. パスワードをかけることができる
  2. シーケンシャルなファイルになる
  3. サイズの大きいファイルを小分けにできる

があります
この記事では、これらについて紹介しようと思います。

なお、今回は7zipというソフトを使用して圧縮していくことにします。

利点1 パスワードをかけることができる

ファイルを圧縮する利点に、パスワードをかけることができるというものがあります。

Inked68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3939333330332f64373662306633352d303734662d383936302d663238332d6465386333633361363333332e706e67_LI.jpg

このように、展開する際にパスワードを入力しなければいけなくなり、万が一外部にファイルが流出してもある程度安全にすることができます。

7zipで行う際は、暗号化の部分でできます。

image.png

しかし、zip圧縮に関しては、2つ落とし穴があります。

落とし穴1 使用するパスワード

いくらパスワードをかけても、パスワードによっては安全ではなくなります。
2021年で一番使われた危険なパスワード一覧は以下です。
「password」や「123456」などのパスワードは推測されやすく、1sでパスワード特定できるようです。

落とし穴2 暗号化方式

圧縮時にパスワードをかけるとは、中身を暗号化するということです。
その暗号化の方式には複数あり、特にzip圧縮ではデフォルトで安全性が低いという大きな落とし穴があります。

暗号化方式で有名なのは、zip圧縮でデフォルトの「ZipCrypto」と、現在最強方式の「AES256」があります。

結論から書くと、7zipなどのソフトを使ってAES256を使いましょう。

ZipCrypto

前者のZipCryptoについては、

ZipCryptoには様々な問題点があるが、鍵長については96ビットしかない欠点を有する。
どんなに長いパスワードを設定したところで実質的な強度は96ビット以下であり、長いパスワードを設定しても、それより短い他のパスワードで復号できてしまう可能性がある。

という安全性が低いという問題があります。
なので、ZipCryptoでパスワードをかけてzip圧縮したファイルをメールで送ってそのあとパスワードを後から別のメールで送るというPPAPをとっても、zipファイルを総当たり攻撃で解凍することができるという問題があります。
(そもそもzipファイルを送った方法と同じ方法でパスワードを送ることがなぜ安全なのか理解できませんし、zip圧縮することでウイルスソフトをすり抜けてしまうという問題もあるみたいなので根本的な問題はあるみたいですが。)

AES256

ではzip圧縮時にAES256で暗号化するとどうでしょうか。
7zipなどのソフトを使用すればzipファイルにAES256の暗号化をすることができます。

しかし、Unixのunzipコマンドが対応していなく、windowsの標準の展開も対応していません。

image.png

そのため、7zipなどのソフトを使用しなければいけないという問題があります。

利点2 シーケンシャルになる

圧縮の利点として、複数ファイルをまとめて1つのファイルにするため、シーケンシャルにファイルをリード・ライトすることができて転送速度が速くなるというメリットがあります。

ファイルの読み書きの仕組み

少し間違いがあるかもしれませんが、説明します。
パソコンではファイルはHDDかSSDに保存されます。
保存の際、ファイルが物理的に01のデータとして書き込まれている場所Aと、その場所を記したファイルBの2つがあります。

データを読み込んだり書き込む際には、まずBにアクセスして保存場所を知り、その後Aの場所で物理的にデータを読み書きします。

image.png

BUFFALOより引用

アクセス方法

大きなファイルを読み書きする際は、物理的に連続した場所でデータを読み書き書き込みます。これをシーケンシャルアクセスといいます。

対して複数ファイルを読み書きする際は、ばらばらの場所にあるファイルを読み書きします。これをランダムアクセスといいます。

画像を見てもわかるように、シーケンシャルアクセスでは一回場所を知れば連続して読み書きできるので速度が速いです。
対してランダムアクセスでは、ファイルごとに場所を探し、ファイルを読み書きし、またファイルを探して…としなければいけないため、速度が遅いです。

id8150_Random_vs_sequential_access.png

sandiskより引用

HDD、SSDの速度

SSD、HDDはシーケンシャルアクセスとランダムアクセスで速度の差が大きく、特にHDDで顕著です。

下の画像はHDD、SataSSD、NVMeSSDの順で表示しています。
見方は、画像内の上1行がシーケンシャル、下3行がランダムアクセスで下に行くほどファイルサイズが小さくランダムアクセス性能が試されます。そして左の列がリード、右の列がウライトに対応しています。
HDDではシーケンシャルアクセスはランダムアクセスの170~340倍速いことが分かります。
比較的早いSSDでも10倍以上速いです。

image.png

image.png

image.png

詳しくはこちらの記事をご覧ください。

まとめ

よって、ファイルのバックアップなどで大量のファイルを転送する際は、7zipなどの圧縮ソフトを使用し、元のHDDのファイルをまとめて無圧縮で圧縮し、転送先のHDDに直接保存することで高速にファイルを転送できます。
(もっとも、保存先で中身を見る際には解凍に時間がかかりますが。)

利点3 サイズの大きいファイルを小分けにできる

メールで大きなファイルを送るときなどに、1回に遅れる容量制限に引っかかってしまうことがありますよね。
そんな時に、zip圧縮で分割圧縮することでファイルサイズが小さい複数ファイルに分割することができます。

分割された一つ一つのzipファイルだけでは一部しか展開できませんが、全部集めて展開することで元のファイルに戻すことが可能です。

容量が限られているDVDやBDなどに記録する際にも有効です。

7zipでは分割ボリュームサイズを指定することで分割圧縮することができます。

image.png

注意 圧縮してもファイルサイズが変わらないことある

zip圧縮してもほとんどファイルサイズが変わらないことがあります。
その原因は圧縮するファイルが既に圧縮されているからです。

非可逆圧縮

画像だったらjpg、動画だったらmp4、音楽ならmp3などのファイルは、すでに元のファイルを非可逆圧縮したものなので、zip圧縮しても小さくなりません。

可逆圧縮

@ayatty さんの指摘がありましたが、
可逆圧縮したファイル、例えば画像ではpng、音楽ならflacなどのファイルも、圧縮済みなのでzip圧縮をしてもほとんどサイズは変わりません。

非圧縮

逆に非圧縮のbmpaviwav、テキストファイルのtxtexeファイル、などはzip圧縮することでファイルサイズを半分以下にすることが可能です。

@ayatty さんの指摘がありましたが、
.aviファイルは未圧縮のものと、コーデックによって可逆圧縮、非可逆圧縮したものがあります。
もちろん、未圧縮のものに関してはzip圧縮でファイルが小さくなると考えられます。
しかし、私の環境で可逆圧縮コーデックの一つであるUt Video Codecで保存されたaviファイルをzip圧縮したところ、約半分のサイズになりました。
これはおそらく、Ut Video Codecでの圧縮時に圧縮率優先(Predict median)デコード速度優先(Predict left)の設定があるため、後者の設定のファイルだったと考えられます。
未圧縮、可逆圧縮、非可逆圧縮のaviファイルのどれかなのかはわからないため、とりあえずaviフィルはzip圧縮をしてみることをおすすめします。

office

@ayatty さんの指摘で気が付きましたが、
officeのファイルに関しては、古いdocxlspptに関しては非圧縮ファイルなのでzip圧縮することでファイルサイズを小さくすることができます。

しかし、比較的新しく、現行のdocsxlsxpptxに関しては、すでに内部ではzip圧縮をしたファイルなので、新たにzip圧縮してもファイルサイズはほとんど変わりません。

圧縮方法の種類

今までzipファイルについて主に説明してきました。
しかし圧縮方法は他にも山ほどあり、選ぶ際には圧縮率普及率の2つが重要になってきます。

個人的にはzip以外には.rar7zgzipをよく見かけるかなと思います。

.zipは普及しているのでどこでも展開圧縮できるけれど、圧縮率が低く、4GB以上のファイルは圧縮できず、安全性に難ありというイメージ。

.rarはよく配布されていて、圧縮率が高いですが、圧縮には有料ソフトWinRAR(実質無料)が必要という問題があります。(展開は7zipなどほかの無料ソフトで可能)

.7zは圧縮率が高く、圧縮展開は無料ソフト(7zip)でできて、個人的によく使っています。

.gzipはlinuxで標準の圧縮方式で、圧縮率等はzipとあまり変わらないそうです。

他にも.lzh.cabなど様々な圧縮方法がありますが、詳しくはこちらの記事をご覧ください。

まとめ

圧縮に関する意外なメリットや種類について紹介してきました。
個人的にまとめると、

  • 安全性は低くていいから、簡単に展開してほしいなら.zip
  • それ以外ならとりあえず.7z
  • 圧縮ソフトは7zip

という感じです。

19
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
7