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 は旧 LArcPMarc 形式も読み書きできます(configure 時)。既定値は lha --help を参照してください。

ダウンロード

各アーカイブの同梱物:

最新版は 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_64lha-x86_64-linux-musl.tar.gz 完全静的。あらゆる Linux(Alpine、Debian、RHEL、Arch…) で動作。
Linux ARM64lha-aarch64-linux-musl.tar.gz 完全静的。aarch64 Linux(Graviton、Ampere Altra、 Raspberry Pi 4/5 64-bit)で使用。
macOS Apple Siliconlha-aarch64-macos.tar.gz システムの libiconv にリンク(macOS 標準で 必ず存在)。
macOS Intellha-x86_64-macos.tar.gz 同上。Apple Silicon からクロスコンパイル。Intel Mac では ネイティブ、Apple Silicon では Rosetta 経由で実行。
Windows x86_64lha-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 を参照してください。