圧縮ファイルの取扱い方 ver1.3


目次

0.はじめに
1.圧縮ファイルとは
2.圧縮の原理
3.圧縮ファイルの種類
4.圧縮ファイルの解凍
5.ファイルの圧縮
6.最後に

フレーム版と通常版の分かれ道に戻る

hideのページ[TOP]に戻る


 

0.はじめに

NIFTY-SERVE、インターネットとコンピュータを使ったコミュニケーションをしていくと必ず出くわすのが圧縮ファイル(圧縮書庫)です。XXXX.LZH、ZZZZ.ZIPというファイルを入手したがどうやって使えばいいのか解らない...(^^;)
初心者の方が必ず一度はぶつかる関門です。かくいう私もパソコンを使いはじめた当初は非常に困っていました。

そこで、この圧縮ファイルとはどういう物なのか、それを取り扱うにはどうしたら良いのかについて書いてみたいと思います。この文書ではWindows95上で主にLHA(XXXX.LZH)について取り扱うものとします。ZIPについても少し説明を付けます。

[0][1][2][3][4][5][6]


 

1.圧縮ファイルとは

ファイルを圧縮する目的は主に2つ有ります。1つはファイルサイズを小さくすることです。ファイルサイズが小さくなると、保管しておく際にディスクスペースを節約できるとともに、通信するときには転送時間を短くすることができます。

もう1つは複数のファイルをまとめて取り扱うためです。多くのソフトでは少なくとも、プログラムそのものである実行ファイル、説明書きのテキストファイル、ソフトの使い方が書かれたヘルプファイルなど複数のファイルを必要とします。これらは常に一緒に取り扱う必要があります。ダウンロードする際にわざわざ複数のファイルを指定するよりも、1つにまとめて置ける方が、入手する側も管理する側も手間が減ります。

圧縮されたファイルを元に戻す操作を展開(Expand)と呼びます。展開といっても圧縮ファイルに含まれた情報を元に本来のファイルと同じ物を再現するという操作ですので抽出(Extract)と表現されることもあります。つまり、展開作業を行っても圧縮ファイルには変化がありませんので、圧縮ファイルをバックアップしておけば何度でも元のファイルを復元することができます。これを利用してログのバックアップに利用なさっている方もいます。ところで、良く解凍という言葉を耳にされると思いますが、これは上記の展開と同じ意味と考えて下さい。LHAの作者 吉崎栄泰 さんがマニュアル中でなさった表現です。吉崎さんに敬意を表し、この文書でも解凍を使わせていただきます。

[0][1][2][3][4][5][6]


 

2.圧縮の原理

ファイルをひとまとめにすることは難しいことではないので説明を省かせていただきます。

それではファイルの圧縮について説明したいと思います。基本的には冗長性を利用して圧縮します。例えば

「ラララララー」
をという言葉の場合、「ラ」が5回続くので、
「ラ×5回ー」
と表現します。 5回繰り返すという定義をどうするかという問題がありますが、原理的にはこうして圧縮します。

5文字連続ですと圧縮効果も出てきますが、2、3文字だと圧縮効果は低くなります。そこで繰り返しの単位を1文字単位ではなく複数の文字の組み合わせまで拡張する事にします。

This_is_a_pen.」 (わかりやすくするためにスペースの代わりに _ :アンダースコア を使っています)
という文で考えます。よく見ると「is_」が2回繰り返しています。 そこで
Th(is_)×2回a_pen.
と表現します。こうすると繰り返しは1回ですが3文字分圧縮できます。

しかしこのようにうまく繰り返しの単位が続けば良いのですが、そうも行かないので「辞書」と言う物を導入します。 今度は

This_is_his_pen.
という文です。やはり「is_」が3回見られますので、
Th##h#pen.」(辞書:#="is_")
と表現します。今度は繰り返しが3回になりますので大分圧縮できました。長いデータになればこういう組み合わせも沢山出てきますので、圧縮効率は更に上がると考えられます。

もう1つ重要な圧縮方式があります。ハフマン法といいます。これはLHAなどでも用いられている方式です。
基本的な原理は

出現頻度の高いコードに少ないビット数を割り当てて、出現頻度の低いコードに多いビット数を割り当てる
ということです。
ところで突然出てきたコードビット数とは何でしょうか?コンピュータのデータは基本的には 1バイト=8ビット という単位で取り扱われます。8ビットですので256通りの表現ができます。これをコードと呼びます。(例:文字コードなど) そして、ビット数は2進法に直したときの桁数のことでして、通常の1バイト=8ビットですし、CPUなどは16ビット、32ビットといった処理幅を持ちます。
では説明したいと思うのですが、私の理解力と文章力の不足でコードとビットの説明が不十分ですので、別の例で説明させていただきます。
現在アマチュア無線でしか使われていないと思われるモールス符号。ここにハフマン法のルーツを求めることができます。英語の E は一番出現頻度の高い文字として有名ですが、その符号は「・」(短音1つ)となっています。その他の母音文字を見ても
AEIUO FLQY
・−・・・・−−−− ・・−・・−・・−−・−−・−−
と比較的短くて簡単な符号となっています。一方F L Q Yの様な符号は覚えにくく (対母音比@hide) 符号も長めです。しかし、出現頻度の少ない文字なのであまり問題となりません。つまり多く出現する文字を短くしておくことで全体の符号の数を減らせるように作られています。ちなみに和文モールスはその辺を無視して作っているとしか思えません(^_^;)
実際のハフマン法は8ビットの256通りのデータに対して、出現頻度の高いものは3〜4ビット、低いものは10数ビットで表現するように直して、データ全体のビット数を減らせるように処理されます。もちろんモールス符号のように対応表が必要になりますが、それは圧縮の際に自動的に作られます。

多くの圧縮方式はこのような原理に基づいて圧縮します。冗長性・コードの探し方、1度に探す領域の大きさ、「辞書・対応表」の構造などで圧縮率や処理速度が変わります。そのため多数の方式が出ています。

また、画像の圧縮に使われるGIFJPEGについては画像特有の規則性・人間の目の特性を利用して圧縮しています。JPEGは不可逆圧縮でして、展開しても100%同じ絵にはなっていませんが、人間の目の特性を利用して自然に見えるようになっています。特に写真に向いています。一方GIFは可逆圧縮で、展開してもそっくりそのまま復元できます。しかし、現在のフォーマットでは256色しか扱えませんので原色が多く使われる、ロゴやボタン、アニメ的な絵(悪い意味ではありません)に向いていると言えます。VIDEO-CD、DVD-VIDEOやPrefecTVでもJPEG同様の圧縮技術を用いています。画像が出たついでに音声の圧縮についても軽く説明します。最近ブレイクしてきたMDも不可逆圧縮の代表です。これも人間の聴覚特性を利用してデータ量を減らしています。デジタル携帯電話、PHSも不可逆圧縮を行っています。

プログラムや文章は完全に復元されないと困りますので、この文書で取り扱うLHAやZIPに関しては当然「可逆圧縮」です。(文章の要約なら歓迎!という説もありますが(^_^;)

[0][1][2][3][4][5][6]


 

3.圧縮ファイルの種類

主にNIFTY-SERVEやインターネットで入手できる圧縮書庫は、LHAZIPという方式で圧縮された物がほとんどです。日本では吉崎栄泰氏が開発したLHAが主流です。LHAとその互換プログラムで圧縮したファイルには一般的にLZHという拡張子が付けられています。海外ではPKZIPを使用して作成されるZIPが一般的です。拡張子はZIPです。

その他にはARJ、TAR、RAR、GZIP(ZIPとは異なります)、またCAB(これはMS専用ですね)などの形式がありますが、ほとんどLHAとZIPで占められています。

圧縮ファイルでも拡張子がEXEで実行ファイルになっているものがあります。これは自己解凍書庫(自己展開書庫)と呼ばれます。アーカイバ(圧縮書庫管理ソフト)が無くてもそのファイルを実行することで簡単に解凍できます。ではなぜ全て自己解凍書庫にならないかというと、

コンピュータウイルスの危険がある
実行できるファイルにコンピュータウイルス入っていると一回で感染してしまう可能性が高いのです。また、自己解凍書庫に見せかけたウイルスそのものかもしれません。書庫でしたら解凍しなければ問題ないのですが、自己解凍では解凍しようとしただけで感染する危険があります。しかしNIFTY SERVEなど商用BBSからダウンロードしたファイルではまず問題ありませんし、インターネットでも有名なサイトであれば問題ないと思います。
解凍機能の分ファイルサイズが少し大きくなります。
機種依存が生じます。
DOS用の自己解凍で有れば、ほとんどの環境で問題なく解凍できると考えられますが、MS-DOS以外のOSを用いている環境では解凍できないことになります。多くは解凍ソフトが自己解凍機能部分を無視し、通常の圧縮書庫として解凍できることが多いのですが、複雑になる原因であります。
以上の理由より一部の用途にしか使われません。(例:解凍ソフトの配布(^^)

[0][1][2][3][4][5][6]


 

4.圧縮ファイルの解凍

ここでは簡単に扱えることから竹村嘉人 (たけちん)さん作のLHASA v1.1(らさ)というアーカイバ(圧縮書庫管理ソフト)を使ってみます。雑誌やダウンロードするなどして入手して下さい。非常に人気のあるソフトですので、多くのフォーラムのライブラリで入手可能だと思います。NIFTY SERVEでは

nifty:FWINAL/LIB/04/334
にあります。インターネット上では、窓の杜などで入手可能です。なおこのソフトは単体でLHAばかりでなくZIPも解凍できます。但し解凍専用です。

入手できましたら、デスクトップに置いて下さい。ダウンロードされたフォルダからコピーしても良いですし、デスクトップに直接ダウンロードしても良いと思います。

そして、Lhasa011[.exe]([ ]内は設定によって表示される場合とされない場合があります。以下ファイル名については同様です)をダブルクリックするとインストールが始まります。

インストール先は分かる人以外はそのままにして置いても問題ありません。

デスクトップにショートカットを作るのチェックが入っていることを確認して下さい。
確認したらインストール開始のボタンを押して下さい。

するとほとんど瞬間的にインストールが終わり、「インストールが完了です。Lhasaを起動します」と表示されるので[OK]を押して下さい。

[OK]を押すとLhasaのウインドウが開きます。

上部に「出力先」と表示されておりデスクトップからのツリーが表示されています。まず出力先はデスクトップ若しくは普段から解凍しているフォルダに指定して下さい。
数が多くなりますとデスクトップにファイル(フォルダ)が散乱してわかりにくくなるのでオンラインソフト専用のフォルダを作ることを勧めます。しかし、最近は解凍した後セットアップを実行する必要のあるソフトも多く、そういうソフトではセットアップ後はセットアップ元のフォルダを削除できることが多いのです。そこで一時的な展開先としては非常に便利ですので、解凍先はデスクトップにしておくことも良いと思います。私もそうしています。

次に下の4つのチェック項目ですが、

書庫と同じ場所に解凍」にチェックを入れると上の出力先は無効になります。
フォルダ自動生成」にチェックを入れておくと、解凍した書庫と同じ名前のフォルダができてその中に解凍されます。
解凍先を開く」は解凍終了後に解凍された先のフォルダウインドウを自動的に開くようにする設定です。
一番下の「関連付け」とはダブルクリックで自動的に解凍できるようにするための設定です。[.lzh]はLHAの圧縮ファイルに対して、[.zip]はZIPの圧縮ファイルに対するものです。必要な方を押して下さい。もう一度押すと元に戻ります。

全ての設定が終わったら、[OK]を押します。

すると、デスクトップにショートカットの矢印のついた「Lhasa」というアイコンがデスクトップ上に表示されたと思います。

では、何か圧縮ファイルを用意して解凍してみましょう。デスクトップ上からでも他のフォルダウインドウからでも良いですので

圧縮ファイルを先ほど出現したアイコンにドラッグ&ドロップしてください。
すると、デスクトップ上に新しいフォルダが作成されます。自動的に開く設定になっていればウインドウが開くはずです。これで解凍されました。そのフォルダの中に解凍されたファイルが入っています。別のフォルダに解凍したいときは、ドラッグ&ドロップではなく「Lhasa」のアイコンをダブルクリックすると先ほどの画面が表示されますので、解凍先を指定して、その後ドラッグ&ドロップで解凍されます。

詳しい使い方については付属のドキュメントをお読みなって下さい。

最近はアーカイバも簡単にインストールできるようになりましたが、以前はアーカイバそのものが圧縮されていて困ったものです(^_^;)つまりはDOS上で元祖LHA.EXEを使って解凍しなければならなかったわけです。

[0][1][2][3][4][5][6]


 

5.ファイルの圧縮

人にファイルを送るときやライブラリへのアップロードをするには圧縮も避けて通れない関門です。今度は圧縮のしかたについて説明したいと思います。LHA書庫を作る物として進めます。まずは圧縮ソフトのインストールを行います。ここでは独断と偏見でMiccoさん作のLHMELT v0.84を使ってみます。また、同じくMiccoさん(Rhizome Project)作のUNLHA32.DLLが必要になります。これらについても非常にポピュラーなソフトですので雑誌、ライブラリ、インターネットで簡単に入手できると思います。NIFTY-SERVE上では、

nifty:FWINAL/LIB/04/600 LMELT089.EXE LHMelt V0.89 LZH/ISH操作
nifty:FWINNT/LIB/11/??? ULHA3101.EXE UNLHA32.DLL Ver 1.01 LHA書庫操作DLL
で入手可能です。 また以下のDLLを使うと、さらに他のタイプの書庫も扱うことができます
nifty:FWINNT/LIB/11/170 TAR32023.EXE TAR32.DLL Ver0.23 TAR書庫操作DLL
nifty:FWINDB/LIB/04/106 UNZP32B3.LZH UNZIP32.DLL 開発用SDK ZIP書庫操作DLL

インターネット上では、窓の杜アーカイバ統合化計画のページなどで入手可能ですが、UNZIP32.DLLについては上記の場所からのみ入手できます。

まずはUNLHA32.DLL(これは必須ですね(^^))をインストールします。

自己解凍書庫ですのでデスクトップ上に解凍して、c:\windows\system\にコピーして下さい。
その際、フォルダウインドウの表示(V)→オプション(O)、そして[表示]のタブで「ファイルの表示」を「全てのファイルを表示」にして置いて下さい。これを行わないと、コピーすべきUNLHA32.DLLが見えません(^_^;)

次にLHMELTのインストールです。これも自己解凍書庫でしてインストール機能があるのでそれに従ってインストールして下さい。

まずはLHMELTを起動して下さい。初めて起動するとウインドウが小さいので適宜大きくして、その他(O)→フォントの選択(F)でフォントサイズを設定して使いやすくしてください。1回設定すればそのまま引き継がれます。

それではファイルを圧縮しましょう。まず、タイトルバーを確認して下さい。「新規書庫.LZH」と出ていたらそのままでOKです。出ていないときは、ファイル(F)→種類を指定して新規書庫(K)→LZH書庫(L)を指定します。

そして、LHMELTのウインドウに圧縮したいファイルをドラッグ&ドロップしてください。それで圧縮できます。
圧縮が終わったらファイル(F)→名前を付けて保存(S)でファイル名を付けた上で保存します。

圧縮する上で注意すべきこととして、圧縮形式、ディレクトリ付きにするか否かが挙げられます。圧縮形式とはLHAでもlh5、lh6、lh7の3通りの圧縮方式があり後者の方が圧縮率は高くなっていますが、正式(LHA v2.13)なものはlh5、β版のlh6、lh7となっておりほとんどがlh5を利用しています。圧縮率の違いはここまで書いたこの文書で(9712バイト)はほとんど変わりませんが、ある日の生ログ(316341bytes)(1)とある日のNiftermのとある会議室のログ(8456685bytes)(2)では

形式圧縮後(1)圧縮率(1)圧縮後(2)圧縮率(2)
lh5140673bytes44.5%3681027bytes43.5%
lh612996241.4304521236.0
lh712577339.8283833533.6
という結果が出ており、後者の方が明らかに圧縮率は上がっています。

ディレクトリ付きとは解凍時にディレクトリ(フォルダ)構成を再現したいときに使います。絶対ディレクトリと相対ディレクトリ(LHMELTでは親ディレクトリを基準と表現)があり、絶対ディレクトリではルートディレクトリからのディレクトリが、相対ディレクトリでは1つ上のディレクトリからのディレクトリ構成が記録されます。多くはディレクトリ無しで良いと思いますが、ディレクトリ付きで圧縮しておくと、同じファイル名でもディレクトリが異なるようにすると同じ書庫に圧縮することが可能です。

同様な操作で圧縮できるソフトにLHAユーティリティー32、EXPLZH(シェアウエア)があります。NIFTY SERVEでの入手先は以下の通りです。

nifty:FWINAL/LIB/04/??? EXPL243.EXE Explzh for W95/NT4.0 V2.43
nifty:FWINAL/LIB/04/650 LHUT3214.EXE LHAユーティリティ32 Ver1.14

しつこい様(^^;)ですがインターネット上では窓の杜アーカイバ統合化計画のページなどで入手可能です。

圧縮の話からはそれますが、LHMELTを含めたこれらのソフトでは「閲覧機能」があります。これはいちいち解凍することなく書庫の中身を見ることができる機能です。ちょっとREADMEを読んでみたいとかいう用途には最適です。

[0][1][2][3][4][5][6]


 

6.最後に

FFMVにはどちらかというとハード関連の文書が多いのでこういうのもあって良いかなと思い書きました。一気に書き上げた文章ですのでかなり雑な部分があると思いますが、お役に立ててもらえると幸いです。

圧縮技術に関心をもたれた方はアーカイバ統合化計画のページをご覧下さい。アーカイバ統合化プロジェクトに関するさまざまな情報があります。また、各アーカイバの作者さんのページや圧縮技術に関するサイトへのリンクも充実しています。

この文書の文責は私hideにあります。内容についてはソフトの作者の方に問い合わせたりせずhideまでお問い合わせ下さい。この文書を利用して発生した逸失利益等に対しては責任は負いかねます。しかし、間違い等ありましたら順次訂正させていただきますのでお知らせ下さい。

自己解凍書庫の使われない理由として機種依存性があるというご指摘をご〜ちゃんより頂きました。ありがとうございます。

1997.11.11 VEK02045 hide(木村英紀)

[0][1][2][3][4][5][6]


フレーム版と通常版の分かれ道に戻る

hideのページ[TOP]に戻る


Written by Hideki Kimura
この文書をダウンロードしてご自身でご利用になることは構いませんが、一切配布はしないでください。その代わりにこのページをご紹介下さい。