LHA
テンプレート:Infobox テンプレート:Infobox テンプレート:Infobox file format
LHA(エルエイチエー)とは、ファイルの圧縮とアーカイブを行うソフトウェアのひとつ。また、圧縮ファイルの形式はその拡張子からLZH(エルゼットエイチ)と呼ばれる。ここではLZH形式についても述べる。
目次
LHAプログラム
LHAは、奥村晴彦が開発したアルゴリズムをもとに、吉崎栄泰が MS-DOS 向けに開発したもので、1988年にパソコン通信で初公開された。
登場当時はテンプレート:ルビというプログラムで、1990年頃に全面的に作り直され、LHAに改称された。当初はLHに改称の予定で、実際にバージョン2.00はLHで公開されたが、MS-DOS の内部コマンド[1]と同一のためにLHAとなった経緯がある。ごく初期には「LHx/LHa」という名称・表記だった。
発音は、初期バージョンではLHAを「ラー」とすると作者による説明があったが、後期バージョンではその説明はない。また、RARとの混同を避けるためにも、「エルエイチエー」「ルハー」「エルハ」等と発音するユーザーが大勢である。
LZH形式
LZH形式の圧縮アルゴリズムは、LZSS法で圧縮したデータをさらにハフマン法を用いて圧縮するLZHUFアルゴリズムを用いる。LZHUFは奥村晴彦のLZARI(LZSS + 算術符号)の効率を向上するために吉崎栄泰が考案したものである。なお、拡張子が“.lzh”であるためよくLZHアルゴリズムと混同されるが、全くの別物である。
LZSS法ではスライド窓や最大一致長を大きく取るほどに圧縮率の向上が見込めるが、一方でむやみに大きくすると最長一致列の探索に時間がかかり、また多くのメモリも必要になる。このため初期の版ではスライド窓や最大一致長の大きさは小さくとられていたが、探索アルゴリズムの改良やコンピュータの性能向上などにより、次第に大きな値が採用されるようになった。
LZH圧縮形式は大きくlh0、lh1、lh4/5/6/7に分けられる。 圧縮率を高めたlh6/7方式が公開されているが、開発途中ということで同形式を使ったファイルの配布は推奨されていない。
lh0形式
lh0形式は一切の圧縮を行わない。可逆圧縮では圧縮前よりも圧縮後のデータの方がサイズが大きくなる場合があり、lh0形式はそれを避けるために使用される。ユーザーが意図してこの形式を使う場合は、ファイルの破損のチェックに使ったり、複数のファイルをまとめるだけのアーカイバとして利用される。
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情報は失われる)、処理を中止するかの選択を促すダイアログが表示される。
MacLHAはMac OS Xにネイティブ対応していないことと、Finderがzip圧縮に対応したため、ユーザは他のソフトウェアに移行している。Mac OS Xでこのファイルに出会った場合は、MacBinaryデコーダを用意するか、HappyLHAというソフトウェアを使用すると良い。
経緯
LHAとLZH形式は、1988年の登場以来、パソコン通信やフロッピーディスクでのデータやり取りが主流の時代に重宝されて、MS-DOSのみならず各種のOSに移植されて発展を続けた。ZIP形式アーカイブを作成するためのPKZIPが有料のシェアウェア(展開用のPKUNZIPはフリーソフトウェアであった)だったこともあり、日本国内はもとより海外でも広く使われるようになった。1990年代にハードディスクやインターネットが広く普及する時代となっても、日本国内では事実上のデータ圧縮の標準的な形式として浸透していた。
MS-DOSの後継OSであるWindowsへの対応としては、1995年にNIFTY-Serve上でバージョン3.0に向けたテスト版の位置づけでバージョン2.67が公開されたが、作者である吉崎栄泰の本業(医師)が忙しくなった[2]ためなのか、その後のバージョンアップ版は公開されておらず、LHAならびにLZH形式の開発は事実上停止状態にある。このためWindowsでは、すでに公開されているソースコードや仕様を元に他の人物が開発したアプリケーション(unlha32.dll、Lhaplus、Lhasa、+Lhacaなど)によってLZH形式の圧縮・展開が行われた。バージョン2.67はEXE形式として提供されたが、正式バージョンである3.0ではエンジン部分のみをDLLとして提供する構想[2][3]だった。結果的にその役割はMicco作のUnlha32.dllが担うことになる。
21世紀に入った頃からは、他の形式の方が圧縮率で上回ることが多くなった他、ファイル名にUnicodeが利用できないこと、暗号化機能がないなど不便さが目立ちつつある。またZIP形式の圧縮復元機能がMac OS XやWindows MeおよびWindows XP以降に内蔵されたことにより、特に理由がない限り圧縮形式としてはZIPが使われることが多くなっている[4]。
ただし、LZHアーカイブを展開する需要は、既存のアーカイブ(特に日本産オンラインソフトウェア)の展開など依然存在している。このためWindows XPの「Webサービスを使用して適切なプログラムを探す」機能では、LZHによるものが常に最多だったという[5]。それを受けてマイクロソフト社はLZH展開アドオン「Microsoft 圧縮 (LZH 形式) フォルダ」(Windows XPおよびWindows Server 2003用)を正式に配布し[6]、日本語版のWindows 7ではZIP形式と同様に「圧縮フォルダ」として利用できるようになった。ただし、いずれもLZH形式での圧縮機能は搭載されておらず、圧縮には別途ソフトが必要となる。また、WinRAR、PeaZip、7-Zipなどの海外製のアーカイブツールでもLZHに対しては解凍のみ対応している場合が多い。
日本では圧縮データを展開(伸張)することを「解凍」と呼ぶことが多いが、これはLHAのマニュアルで使われていた用語が一般化したものである(マニュアルでは圧縮を「凍結」と呼ぶ)。また、LZHのアーカイブは「書庫」と呼ばれる。これはLHA/LHarc以前のアーカイバLArc(奥村晴彦・三木和彦・益山健 作。前述のLZARIを採用、圧縮形式lzs/lz4/lz5、拡張子.lzs)がファイルを「本」、アーカイブを「書庫」になぞらえたことに倣っている。ちなみに、LHarc/LHAではLArcの書庫も解凍できる。+LhacaやExplzhなど、吉崎作でないものにはこの実装がないものもあり、拡張子を.lzhにしても内容の一覧表示ができるだけで解凍できないものもある。
LZH形式の使用中止の呼びかけ
対応ツールの1つであるUnlha32.dllの作者は、アンチウイルスソフトの多くに悪意ある改竄をしたLZHアーカイブを正しく検疫できないケースが存在することを2006年に発見し[7]、情報処理推進機構や各セキュリティベンダーに報告した。しかしZIPやCABといった他の形式では同様のケースに対応しているのにLZHについては2010年になっても対応が進まない[8]ことから、6月5日にLZH形式の利用を控えるよう呼びかけを行っている。[9][10]
これを受けて、日本国内大手ダウンロードサイトのベクターがLZH形式での新規受付を中止している[11]。
ただし、これはLHAおよびLZH形式そのものの脆弱性ではない(問題点はアンチウイルスソフトが対応しない点である)ため、出所が明確で正規のヘッダを出力するモジュールを用いて自分でLZHアーカイブを作成する分には問題ない。
拡張子
.lzh
、.lha
日本においては .lzh
のみが用いられるが、日本以外の地域では .lha
などが用いられることもある。
脚注
- ↑
LOADHIGH
- ↑ 2.0 2.1 吉崎栄泰のLHAワールド - LHAの今とこれから - インターネット・アーカイブの1999年5月8日付のキャッシュ
- ↑ バージョン2.67付属ドキュメント
- ↑ 両者ではファイル名のエンコードが異なり、Mac OS Xの機能(UTF-8でエンコード)で作成したアーカイブをWindowsの機能(Microsoftコードページ932でエンコード)で復元すると、ファイル名によっては文字化けする。内容には影響しない。Windows→Macでは問題ない。
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ MHVI#20061019:LZH 書庫のヘッダー処理における脆弱性について
- ↑ MHVI#20100425:LZH 書庫のヘッダー処理における脆弱性について (2010 年版)
- ↑ LZH 書庫利用における危険性について - Micco's HomePage(Unlha32.dll作者のサイト) 2010年6月5日
- ↑ 国産の圧縮形式「LZH」のUNLHA32.DLLの開発中止へ、LZH形式使用中止を呼びかけ - GIGAZINE 2010年6月7日
- ↑ LZH形式でファイルをご登録いただいている作者のみなさまへ - ベクター 2010年6月9日
関連項目
参考文献
- 奥村晴彦・吉崎栄泰「圧縮アルゴリズム入門」『C MAGAZINE』1991年1月号、ソフトバンク、44-68頁、1991年。
外部リンク
- データ圧縮の昔話(奥村晴彦のページでLHA開発の経緯や当時のパソコン通信におけるやりとりを読むことができる)
- 統合アーカイバプロジェクト
- Micco's HomePage(UNLHA32.DLL作者 "Micco" のウェブページ)
- テンプレート:リンク切れ Windows XP用 LZH形式圧縮フォルダ(リンク切れ)
- 上記と同じものと思われる拡張機能はサポート文書番号896133「Microsoft 圧縮 (LZH 形式) フォルダの使い方」として継続掲載。 (2013年2月15日閲覧)
- LHa for UNIX (SourceForge.JP プロジェクトページ)
以下は吉崎栄泰作のLHAダウンロードページ