lha
35 年の .lzh アーカイバの歴史を、
自己完結した単一の静的バイナリとして配布。
静的バイナリ · Linux・macOS・Windows 上で
libc の追加インストールは一切不要。
lha とは何か
LHA(旧名 LHarc)は 1988〜1989 年に吉崎英明 (Y.Tagawa)氏が作成したファイル圧縮・書庫形式です。 LZARI/LZHUF アルゴリズム(LZ77+ハフマンの算術符号化変種) を採用し、ZIP が普及する以前の 1990 年代、 MS-DOS と日本のパソコンで主流の書庫形式でした。
lha(バイナリ)は、主要な LZH 変種
(-lh0-、-lh1-、-lh4-、-lh5-、-lh6-、-lh7-、-lhx-、-lzs- および
-lhd- ディレクトリヘッダ)すべてと、古い LArc・PMarc 形式も扱えます。
他のツールでは開けない古い .lzh を
展開したいときのための、現代における「最後の砦」として
lha は使われています。
略史
1988–1989 — LHarc と LZARI
吉崎英明(Y.Tagawa)氏は MS-DOS 向けの原版 LHarc を 1988〜1989 年に公開しました。奥村晴彦氏が 先に発表していた LZARI(LZ77 の算術符号化変種)に 静的ハフマンを組み合わせたもので、日本で初めて広く使われた 書庫形式です。Tagawa 氏の本当の貢献は、これを実用的な アーカイブ形式に仕立て上げた点にあります。
1990–1991 — LZH の登場
吉崎氏はアルゴリズムを LZHUF(LZ77+動的ハフマン)に
改良し、1990 年に LHA フォーマットとして公開しました。
圧縮方式をファイル名末尾に埋め込む設計(-lh5- 等)が
ここから生まれました。現代の圧縮ツールはこれをユーザーから
隠すことがほとんどですが、LHA のエンコーダは明示的に
方式を選択します。
1991–1993 — LHA for UNIX
1991 年に大木優(M.Oki)氏が LHA を UNIX へ移植。 1993 年に綿貫和彦(N.Watazaki)氏が保守を引き継ぎ、 ほぼ全面的に書き直して現在に至る LHa for UNIX の基礎を 築きました。私たちがこのバイナリに同梱している man ページの 著者欄には、今も M. Oki と N. Watazaki の名前があります — ソースそのものだからです。
LHA for UNIX は独自のフリーウェアライセンスで配布されていました:
著者表示を必須とし、派生作品に「LHA」の名を使うことを禁じ、
連絡なしのバイナリのみ再配布を明示的に禁止 —
ということです。現在も Debian がこの理由で
non-free/contrib に置いているのはこの名残です。
1994–2010 — ZIP の時代、2ch 文化
PKZIP 2.0(1993 年)と Info-ZIP zip(1994 年〜)が
西側の PC では LHA を置き換えました。一方日本では
.lzh が 2000 年代序盤まで重用され続け —
配信には LZH 形式が使われるのが一般的で、BBS はあたりまえに
LZH を貼り付け、Windows 用 .exe 自己解凍書庫も多くが
LHA 形式でした。2ch 系の電子掲示板では LZH ファイルの交換が
2000 年代後半まで普通に行われていました。
2010–2020 — 静かな保守期
ファイルサイズが大きくなり、通信帯域も潤沢になりました。
LHA の控えめな CPU コストはもはや問題にならず、7-Zip の
LZMA + .7z が圧縮率で圧倒。Watazaki 氏の
LHA for UNIX ツリーは時折パッチが当たる程度で、新規リリースは
出なくなりました。
2022 — autoconf による再始動(jca02266)
2022 年、GitHub ユーザー jca02266 氏が長らく眠っていた
ツリーを引き取り、現代的 autoconf ビルドシステムを整備しました。
その成果である LHa for UNIX 1.14i-ac20220213 を
本リポジトリでは
upstream/lha/
下にそのまま取り込んでいます。元の C ソース、man ページ、
上流テストスイートは一切変更していません。
jca02266 氏の autoconf 対応により、このフォーマットが
任意の現代 Linux で苦労なくビルドできるようになりました。
ljh-sh/lha はここからさらに進め、ビルドすら不要 —
静的バイナリを配布することでエンドユーザーを
apt install build-essential から解放します。
対応圧縮方式
| サフィックス | アルゴリズム | 備考 |
|---|---|---|
-lh0- | 無圧縮(書庫化のみ) | 高速アーカイブ用。メタヘッダには方式が記録されるため 古いツールでも復号可能。 |
-lh1- | LZARI(LZ77+算術符号) | 初代 LHarc の方式。オリジナルの MS-DOS ツールチェイン
だけが書いていた。今目にする書庫の大半は
-lh5-。 |
-lh4- | LZARI 変種 | 将来用予約。実物はほぼない。 |
-lh5- | LZHUF(LZ77+動的ハフマン) | デフォルト。1990 年以降の標準 LZH 形式。
今日見る .lzh のほとんど。 |
-lh6- | LZARI + 静的ハフマン変種 | 実験的。普及せず。 |
-lh7- | LZHUF ツリー変種 | 実験的。 |
-lhx- | LZH 互換マーク | 独立した -lhd- ディレクトリヘッダを伴う
新しい LZH 規約が使われていることを示す。 |
-lzs- | LZARI 変種 | 予約。 |
圧縮方式に加え、lha は旧 LArc・PMarc
形式も読み書きできます(configure 時)。既定値は
lha --help を参照してください。
ダウンロード
各アーカイブの同梱物:
bin/lha— バイナリ本体man/man1/lha.1— man ページREADME.md— インストール手順
最新版は github.com/ljh-sh/lha/releases。
macOS / Linux での最短経路(ワンライナー):
x i lha # x-cmd install データベース(x.eget で ljh-sh/lha に解決)
x eget use lha # eget のベアネームリゾルバ — 同等、同じ release を引く
どちらも OS とアーキテクチャを自動判別し、
releases/latest
から対応する静的バイナリを取得、~/.local/bin/lha に展開し
PATH に通します。コンパイラも brew tap も apt-add-repo も不要。
または対応するアーカイブを直接ダウンロード:
| プラットフォーム | ファイル | 備考 |
|---|---|---|
| Linux x86_64 | lha-x86_64-linux-musl.tar.gz |
完全静的。あらゆる Linux(Alpine、Debian、RHEL、Arch…) で動作。 |
| Linux ARM64 | lha-aarch64-linux-musl.tar.gz |
完全静的。aarch64 Linux(Graviton、Ampere Altra、 Raspberry Pi 4/5 64-bit)で使用。 |
| macOS Apple Silicon | lha-aarch64-macos.tar.gz |
システムの libiconv にリンク(macOS 標準で
必ず存在)。 |
| macOS Intel | lha-x86_64-macos.tar.gz |
同上。Apple Silicon からクロスコンパイル。Intel Mac では ネイティブ、Apple Silicon では Rosetta 経由で実行。 |
| Windows x86_64 | lha-x86_64-windows.zip |
MinGW ビルド。VC++ ランタイム不要。 |
インストール(任意、手動):
tar xzf lha-x86_64-linux-musl.tar.gz
sudo install -m 0755 lha-x86_64-linux-musl/bin/lha /usr/local/bin/lha
sudo install -m 0644 lha-x86_64-linux-musl/man/man1/lha.1 /usr/local/share/man/man1/
man lha
自前でビルドする
ラッパースクリプトは素の POSIX shell です。 リポジトリのルートで:
git clone https://github.com/ljh-sh/lha.git
cd lha
bash scripts/build.sh # ホストアーキ (autoreconf + configure + make)
cd upstream/lha && bash scripts/smoke.sh # 上流テストスイート 20 ケース
cd ../../ && bash scripts/build-alpine.sh # alpine:3.20 で musl-static
bash scripts/build.sh && bash scripts/smoke.sh # ホスト側ラウンドトリップ
ターゲット別フラグ(host / musl / MSYS2)は scripts/build.sh、 ベンダーバイナリに適用される上流ライセンス条項は NOTICE.md を参照してください。