圧縮方式というとHUFFMAN法など有名なアルゴリズムが思い浮かびます。これは勉強すると大変面白いものですが、今回ここで取り上げるのは圧縮方式自体ではなく、LHA圧縮に関してのちょっとした覚え書です。
本稿におけるLHAとは、北海道在住の内科医吉崎栄泰さんが開発されたフリーのファイル圧縮ソフトウェア(アーカイヴァ)LHA.EXEを指します。LHAによって圧縮されたファイルには「.lzh」という拡張子を付けることが慣例となっており、LHAが使用している圧縮方式をLZH方式と言ったりもします。圧縮アルゴリズムとしては静的HUFFMAN法を使用しているそうです。
LHA圧縮する際には三つの大事な注意点があります。
ファイル名、圧縮方式、書庫ヘッダ形式、です。
まずファイル名について。現在解凍ツールは百花繚乱の状態。Windows用のものを挙げてみても、Lhasa、LHMelt、+Lhaca、Explzh、LHAユーティリティ32....etc.。これらのWindows用ツールでは当然のことながらロングファイルネイムに対応しています。しかし、LHA.EXE自体は8+3形式(注1)にしか対応していないようです。
例:C:\TEMPにtesttesttest.lzhを置きます。
C:\TEMP>lha e testtesttest
書庫ファイルがみつかりません:'testtesttest.LZH'
この場合は「lha e testte~1」としてやれば解凍できます。しかし、今時LHAを使う場合というのはバッチ処理等で使う場合でしょう(例えば「圧縮→バックアップ」「解凍→リストア」など)。そのバッチ記述の中で「ロングファイル名の場合はMS-DOS形式のファイル名にしてから処理する」などと書くのは大変だと思われます。
以上のことから、なるべくファイル名は8文字まで、と言えるでしょう。
次に圧縮方式について。LHA圧縮にはlh5,lh6,lh7と三つの圧縮方式の選択肢があります。lh6,lh7、と圧縮効率、圧縮速度の良化が図られてきているのですが、現状lh6,lh7の公的な利用は禁止されています。実際にはlh6,lh7で圧縮したファイルの解凍は上記したようなツールを使えば可能な場合が多いのですが、やはり失敗することもあるようです。また、LHA.EXEは大きく分けて三つの普及ヴァージョンがあります。Ver2.13、Ver2.55、Ver2.67です。それぞれ「lh5のみ対応」「lh6に対応」「lh7に対応」となっています。注意が必要です。結局、lh5で圧縮するのが無難と言えます。
最後に書庫ヘッダ形式について。LHAは、書庫ヘッダとして3つのヴァージョンがあります。h0,h1,h2です。これもやはり、h0→h1→h2と改良されているのですが、h2だとDOSソフトで解凍できない場合が多いようです。またh1ですと海外起源のソフトで解凍に支障がでることがあるとか。
そう考えるとh0にしないといけないようになりますが…これは諸々の状況を考えて(面倒なので略)、h2でいいと思います。外国で利用することがある場合にはh1を利用、どうしてもh2,h1で解凍できないという人がいる場合にh0を使用、を結論とします。
注1:8+3形式=ファイル名が8文字まで、拡張子が3文字まで。
今回LHA.EXEの動作についての確認はVer2.55b、Ver2.67で行いました。
* LHA.EXE添付文書
* LHMelt.exe添付文書
* UNLHA32.DLL添付文書
2000.3.23 仁衡琢磨 記
2001.10.9 改訂
NIHIRA Takuma