LHA とは、ファイル の圧縮とアーカイブ を行うソフトウェア のひとつ。また、圧縮ファイルの形式はその拡張子からLZH と呼ばれる[ 1] 。ここではLZH形式についても述べる。
プログラム
LHAは、奥村晴彦 が考案したアルゴリズム をもとに、吉崎栄泰 が実装したもので、1988年にパソコン通信 で公開した。
登場当時はLHarc ( エルエイチアーク ) という名前で[ 2] 、1991年頃に全面的に作り直したのに併せLHA に改称した。当初はLHに改称の予定で、実際にバージョン2.00はLHとして公開したが、MS-DOS バージョン5.0の内部コマンドLOADHIGHの略称LHと被ったためLHA とした。ごく初期には「LHx/LHa」という名称・表記だった。
発音は、初期バージョンではLHAを「ラー 」とすると作者による説明があったが[要出典 ] 、後期バージョンではその説明はない。また、RAR との混同を避けるためにも[要出典 ] 、「エルエイチエー」「エルハ」等といった発音が大勢である[ 3] 。
フォーマット
LZH形式の圧縮アルゴリズムは、LZSS 法で圧縮したデータをさらにハフマン法 を用いて圧縮するLZHUFアルゴリズムを用いる。LZHUFは奥村晴彦のLZARI (LZSS + 算術符号 )の効率を向上するために吉崎栄泰が考案したものである。
LZSS法ではスライド窓や最大一致長を大きく取るほどに圧縮率の向上が見込めるが、一方でむやみに大きくすると最長一致列の探索に時間がかかり、また多くのメモリも必要になる。このため初期の版ではスライド窓や最大一致長の大きさは小さくとられていたが、探索アルゴリズムの改良やコンピュータ の性能向上などにより、次第に大きな値が採用されるようになった。
LZH圧縮形式は大きくlh0、lh1、lh4/5/6/7に分けられる。
圧縮率 を高めたlh6/7方式が公開されているが、開発途中ということで同形式を使ったファイルの配布は推奨されていない。
lh0形式
lh0形式は一切の圧縮を行わない。可逆圧縮 では圧縮前よりも圧縮後のデータの方がサイズが大きくなる場合があり、lh0形式はそれを避けるために使用される。ユーザーが意図してこの形式を使う場合は、ファイルの破損のチェックに使ったり[ 注 1] 、複数のファイルをまとめるだけのアーカイバ として利用される。
lh1形式
lh1形式のスライド窓の大きさは4Kバイト、最大一致長は60バイト。文字と一致長は動的ハフマン法で符号化されるが、一致位置はハフマン法を用いずに符号化される。LHarc 1.xではこの形式。
lh4/5/6/7形式
各形式はスライド窓の大きさのみが異なり、それぞれ4K/8K/32K/64Kバイトである。最大一致長は256バイト。
圧縮データの展開速度の向上を目的として、符号化がlh1形式の動的ハフマン法から静的ハフマン法に変更されている。また、一致位置も、文字、一致長とは別にハフマン法で符号化される。
MacLHA形式
「MacLHA 」(旧MacLHarc)はMacintosh (Mac OS )のファイルシステム上のファイルを、LHA形式で圧縮するフリーソフトとして、石崎一明によって開発され配布されたフリーウェア 。当時一般的であった他のアーカイバ(StuffIt およびCompact Pro )はシェアウェアであったり、クロスプラットフォームでなかったりしたため、国内では広く使われた。基本圧縮アルゴリズムはMS-DOS用のLHAと同じだが、Mac OSのファイルシステムで使用されるリソースフォーク を含んだ状態で圧縮する為にMacBinary 形式にエンコードするという機能が加えられている。このため、MacLHAの圧縮ファイルはMS-DOSやWindows 上のLHA及び互換ソフトでは正常に展開する事ができない。また、ソフトウェア次第ではMacで解凍してもMacBinary形式のファイルが出てくるという事態も起こる。実際、StuffIt Expander で解凍を行った場合はMacBinaryをデコードしないため混乱したユーザは多い。この場合、出てきたファイルを再度StuffIt Expanderに通せばMacBinaryがデコードされる。
この回避策としてMacBinaryに変換せずに圧縮するオプションが付随しているが、この方法で圧縮した場合、逆に解凍時にMac OS (Classic Mac OS) ではファイル識別が出来ない状態になる。それが実行ファイルであった場合、正常に起動できなくなる場合もある。これを防ぐため、バージョンによっては、このオプションを有効にしてリソースフォークを含むファイルを追加しようとすると、MacBinaryで保存するか、データフォークのみ保存するか(リソースフォークとFinder情報 は失われる)、処理を中止するかの選択を促すダイアログが表示される。
経緯
MS-DOS時代
LHAとLZH形式は、1988年の登場以来、パソコン通信 やフロッピーディスク でのデータ やり取りが主流の時代に重宝されて、MS-DOSのみならず各種のOSに移植されて発展を続けた。ZIP 形式アーカイブを作成するためのPKZIPが有料のシェアウェア (展開用のPKUNZIPはフリーソフトウェア であった)だったこともあり、日本 国内はもとより海外でも広く使われるようになった。例えば、id Software の初期のゲームであるDOOM とQuake のインストーラの圧縮形式として採用されている。1990年代 にハードディスク やインターネット が広く普及する時代となっても、日本 国内では事実上のデータ圧縮の標準的な形式として浸透していた。海外でLHAが標準的な圧縮形式として普及したケースとしてはAmiga がある。
Windows 時代
MS-DOSの後継OSであるWindowsへの対応としては、1995年にNIFTY-Serve 上でバージョン3.0に向けたテスト版の位置づけでバージョン2.67が公開された。しかし作者である吉崎栄泰 の本業(医師)が忙しくなった[ 4] ためなのか、これを最後に新バージョンは公開されておらず、LHAならびにLZH形式の開発は中断している。このためWindowsでは、すでに公開されているソースコードや仕様を元に他の人物が開発したアプリケーション(unlha32.dll、Lhaplus 、Lhasa 、+Lhaca など)によってLZH形式の圧縮・展開が行われた。バージョン2.67はEXE形式 として提供されたが、正式バージョンである3.0ではエンジン部分のみをDLL として提供する構想[ 4] [ 5] だった。結果的にその役割はMicco作のUnlha32.dllが担うことになる。
21世紀に入ってからも2000年代前半頃まで日本のインターネット上では多用されていたが、他の形式の方が圧縮率で上回ることが多くなった他、ファイル名 にUnicode が含まれたデータを扱えないこと、暗号化 機能がないなど不便さが目立ち、またZIP形式の圧縮復元機能がMac OS X やWindows Me およびWindows XP 以降に内蔵されたことにより、ZIPがデファクトスタンダード となった[ 注 2] 。
ただし、LZHアーカイブを展開する需要は、既存のアーカイブ(特に日本産オンラインソフトウェア )の展開など依然存在している。このためWindows XPの「Webサービスを使用して適切なプログラムを探す」機能では、LZHによるものが常に最多だったという[ 6] 。それを受けてマイクロソフト 社はLZH展開アドオン「Microsoft 圧縮 (LZH 形式) フォルダ 」(Windows XPおよびWindows Server 2003 用)を正式に配布し[ 7] 、日本語版のWindows 7 ではZIP形式と同様に「圧縮フォルダ」として利用できるようになった。ただし、いずれもLZH形式での圧縮機能は搭載されておらず、圧縮には別途ソフトが必要となる。また、WinRAR 、PeaZip 、7-Zip などの海外製のアーカイブツールでもLZHに対しては解凍のみ対応している場合が多い。
エピソード
日本では、アーカイブから中のファイルを取り出したり、圧縮データを展開(伸張)すること(たいていの人が識別できず、混同している)を「解凍」と呼ぶことが多いが、これはLHAのマニュアルを通して広まった、という面がある(当時のパソコン通信に参加した人数はそれほど多くなかったが、LHAはフリーソフト等を使うために必須のツールとなったため、雑誌の付録ディスクなどを通して、多くの人が入手したツールとなった)。アーカイブへの格納(同時に圧縮するかもしれない[ 注 3] )は「凍結」と呼んでいる。なお、英語メッセージも同様に、meltとfreezeとなっている。LHAの開発にも関わっている奥村晴彦 によれば[ 8] この意味の「解凍」という表現自体は、LHAより古くからパソコン通信で広く使われていた。
LZH形式の使用中止の呼びかけ
対応ツールの1つであるUnlha32.dllの作者は、アンチウイルスソフト の多くが一部のLZHアーカイブ(新しい圧縮形式、巨大な拡張ヘッダー、多数の拡張ヘッダーのいくつか)を正しく検疫できないことを2006年に発見し[ 9] 、情報処理推進機構 や各セキュリティベンダーに報告した。しかしZIPやCAB といった他の形式では同様のケースに対応しているのにLZHについては4年後の2010年 になっても対応が進まない[ 10] ことから、6月5日 にLZH形式の利用を控えるよう呼びかけを行っている[ 11] 。
これを受けて、ベクター がLZH形式での新規受付を中止している[ 12] 。
この問題はLHAおよびLZH形式そのものの脆弱性ではない(問題点はアンチウイルスソフトが対応しない点である)ものの、LZH形式に含まれるマルウェア をアンチウイルスソフトが検出できないケースが存在するため、注意が必要となる[ 11] 。
日本語版Windows 7 から標準搭載されるようになったLZHの展開機能は引き続きWindows 10 にも標準搭載されたが、2017年 4月 にリリースされたWindows 10 Creators Update以降、この機能は削除されている。
脚注
注釈
^ CRC値のみでハッシュ値でのチェックは無いため、意図的な改竄は検出できず、破損の検出以上のチェックには使えない。
^ 両者ではファイル名のエンコードが異なり、macOSの機能(UTF-8 でエンコード)で作成したアーカイブをWindowsの機能(Microsoftコードページ932 でエンコード)で復元すると、ファイル名によっては文字化けする。内容には影響しない。Windows → macOSでは問題ない。
^ 全く圧縮できない場合など、lh0形式で格納する場合は圧縮しない。
出典
参考文献
奥村晴彦・吉崎栄泰「圧縮アルゴリズム入門」『C MAGAZINE』1991年1月号、ソフトバンク、44-68頁、1991年。
関連項目
外部リンク
以下は吉崎栄泰作のLHAダウンロードページ
アーカイブのみ 圧縮のみ アーカイブおよび圧縮 ソフトウェアパッケージ 文書パッケージ