ファイルの圧縮について

シンです。大変長いごぶさたで申しわけないです。完全にネタ切れで原稿が書けなくなっていまして…。調べてみると最後に投稿したのが去年の7月。ということはかれこれ1年近いブランクです。その間、東日本大震災がおこり、日本を取り巻く情勢は一変しました。
こうなってくると、ますます何を書くべきか迷いましたが、ようやく記事をお届けできる運びとなりました。

さて、前置きはこれくらいにして、今回は「ファイルの圧縮について」ごく簡単にご説明しましょう。

ファイルの圧縮と言えば、一番多く利用される機会としては、ファイルをメールで添付して送るような場合でしょう。
最近ではブロードバンド環境が当たり前になり、「宅ファイル便」等の100メガバイトを越えるような大容量のファイルをやり取りを仲立ちしてくれるありがたいサービスも有償のもの、無償のもの色々ありますが、あと少しファイルの容量を減らせれば通常のメールに添付して送れるのに、という場合にはファイルを圧縮するのが手っ取り早いでしょう。また、ファイルの容量はさほどなくても、数が大量にあるという場合も、送り先の添付ファイルの保存の手間を考え、複数あるファイルを圧縮して1つにまとめて送る方が親切なのは言うまでもありません。
また、データの圧縮には
(1)可逆圧縮 …データを復元したときに完全に元に戻る圧縮方法
(2)非可逆圧縮…データを復元したときに完全には元に戻らず、
何らかのデータ損失が起きる圧縮方法
の2種類がありますが、(2)は主として画像や音声の圧縮に利用される圧縮方法で、以下で説明するのは(1)の方に限ったものとします。

ファイルの圧縮のしくみ

ファイルの圧縮の仕方には次のような方法があります。

(1) 同一文字が連続しているとき、その出現回数を併記して、全体量を減らす。
(例)ランレングス符号化(run-length coding)など。
(2) 出現頻度に応じてコードを変更し、高頻度の文字は短く、低頻度の文字は
長くする。   (例)ハフマン符号化(Huffman coding)、n2n符号化
(3) 出現頻度の高いパターンに特定の符号を割り当てる。
(4) 無意味な文字列を除去する。

「○○符号化」と言われると難解な物理学用語みたいでややこしい感じがしますが、例えば(1)などは具体的には「AAAAAA」という文字列があったとすると、それを「Aが6つある」という意味の「6A」に置き換えると、意味を保ったまま6文字を2文字に置き換えることができ、1/3の容量に圧縮できるというわけです。
また(2)は意外にも1830年代に発明された「モールス信号」の原理と同じです。モールス信号は、文字通信の中で比較的出現頻度の高いアルファベットに短い符号を割り当て、出現頻度の低いものには長い符号を割り当てることで、通信に要する手間を省くというしくみになっています。(しかし日本語のモールス符号は残念ながらそうなっていないようです。)

いずれにせよ、一般の人にとって、圧縮の難しい方法は詳しく知る必要はないのですが、様々な圧縮形式はこれらの方法やさらに新たな手法を組み合わせることによって高圧縮率かつ高速に処理するアルゴリズムを追及しているということ位は知っておいたほうがいいかもしれません。

代表的なファイルの圧縮形式

現在、ファイルの圧縮形式には様々なものがありますが、代表的なものは以下のような形式でしょう。(これらの圧縮形式の名称は、圧縮ファイルの名前の後につく拡張子(「**.ZIP」など)と一致しています。)

(1) ZIP(ジップ)
(2) LZH(エルゼットエッチ)
(3) SIT(エスアイティー)
(4) RAR(ラー)
(5) 7Z(セブンジップ)
(6) AFA(アファ)

一番有名で最も一般的なのは(1)でしょう。何と言ってもWindows XP以降、WindowsのOSで標準でサポートされているのが一番の強みでしょう。MACでもOS X以降でサポートされるようになり、2000年代以降は事実上、世界標準の圧縮形式となっています。

(2)はLHA(エルエッチエー)とも呼ばれ、非常に歴史の古い国産の圧縮形式です。登場したのは1988年、まだWindows登場前のMS-DOSが使われ、パソコン通信が全盛だった頃です。純国産ということもあり、古くからパソコンを使ってきた方には一番なじみの深い圧縮形式ではないでしょうか。しかし、2000年以降、様々な圧縮形式が登場し、圧縮率において見劣りするようになったこと、ファイル名にユニコードが使用できない、暗号化機能がないなど、時代の流れにそぐわない面が目立ってきたこともあり、最近はZIPにとって代わられてしまった感があります。ちなみに圧縮ファイルを「解凍」するという言い方は、この圧縮形式によって一般的になったもので、ZIPなどは同じ意味で「展開」という言葉を使っているようです。

(3)は一般の方にはあまりなじみのない圧縮形式かも知れませんが、MACではZIPの登場まで長らく標準の圧縮形式として使われていました。今でも、主にMACで制作されたDTPなどのデータの圧縮方法としてZIPと並んでよく使用されています。

(4)はご存知ない方も多いかも知れませんが、主にマルチメディア系(画像・動画)の圧縮で用いられています。私は、個人的にこの形式に対応したWinRARというソフトが好きなので、日常はこれ一本でZIPファイルの圧縮・解凍を済ませています。

(5)は(1)の発展・改良型で7-ZIPとも呼ばれる多機能高圧縮形式です。7-ZIPはオープンソースなので誰でもソースコードを入手し、改良を加えたりできるので、様々な機能が日々追加されています。

(6)は私もまだ出会ったことがない圧縮形式ですが、RARと同じくマルチメディア系の圧縮が得意な高圧縮形式で、処理がZIPやRARの何倍も早いそうです。

おわりに

これらの圧縮ファイルを解凍(展開)するには、アーカイバ(Archiver)と呼ばれるアプリケーションが必要ですが、有償のもの無償のもの様々な種類があります。
特に(1)と(2)に対応したアーカーバは、無償のものだけでもそれこそ星の数ほどあるので、通常は無償のものを使用すれば事足りますが、有償のアーカイバの中には無償のものに比べてさらに高速に処理ができたり、様々な付加機能がついたものもあります。
私が愛用しているWinRARというアーカイバも有償で、RARの圧縮ファイルを解凍するために手に入れたのがきっかけでしたが、それまで使用していたZIPやLZH用の無償のアーカイバよりも圧倒的に処理が高速なので、WinRARひとつだけで済ませるようになりました。
最近、このWinRARに、単なる解凍だけではない便利な機能を発見し、それが大いに仕事に役に立ったことがありました。みなさんが使用しているアーカイバにも、実は便利な機能が使われずに眠っているかも知れません。
私が発見したアーカイバの便利な使い方は、次の機会にでもご紹介しましょう。

コメント