Unix で LZH 形式の圧縮ファイルを展開できるソフトウェアはいくつかある。 たとえば lhasa 1 や unar 2 が挙げられる。
一方で、Unix で LZH 形式の圧縮ファイルを作成できるソフトウェアは限られる。 その限られた選択肢のひとつである LHa for UNIX が先日 Homebrew の core から削除された。
理由は LHa for UNIX が独自のライセンスを採用していたため。 これにより Homebrew が定めるライセンス要件を満たさないと判断された。
上記に対応するプルリクエストは 2025-03-24 にマージされている。
今となっては LZH 形式のアーカイブを扱う人はさほど多くないとは思われる。 しかも、展開ではなく作成とくればなおさら。 とはいえ、選択肢が限られた状況で困る人もいるかもしれないのでここにメモしておく。
使った環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 15.4 BuildVersion: 24E248 $ uname -srm Darwin 24.4.0 arm64
もくじ
事前準備
もし Xcode の Command Line Tools が入っていないときはインストールする。
$ xcode-select --install
同様に、Homebrew が入っていないときはインストールする。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ただし、Homebrew のインストールで叩くコマンドは稀に変わることがあるので公式サイトを確認した方が良い。
LHa for UNIX のビルドに必要なパッケージをインストールする。
$ brew install autoconf automake
LHa for UNIX のリポジトリをクローンする。
$ git clone https://github.com/jca02266/lha.git
$ cd lha
上記のリポジトリはもはやほとんど更新されることが無いため、基本的に HEAD を使って問題ないと思われる。
ビルドする
ビルドに必要な一連のコマンドを叩く。 ここらへんは README を読めば書いてある。
$ aclocal
$ autoheader
$ automake -a
$ autoconf
$ sh ./configure
$ make
これで src ディレクトリ以下に lha という名前のバイナリができる。
$ file src/lha src/lha: Mach-O 64-bit executable arm64 $ ./src/lha --help | head -n 1 LHa for UNIX version 1.14i-ac20220213 (aarch64-apple-darwin24.3.0)
念の為にテストも実行してすべてパスすることを確認しておこう。
$ make check
インストールする
あとはバイナリをパスが通っている場所に置くだけ。 手動で mv などしても良いだろうけど古式ゆかしく make install もできる。
$ sudo make install
これでデフォルトなら /usr/local/bin
に入るはず。
$ lha --help | head -n 1 LHa for UNIX version 1.14i-ac20220213 (aarch64-apple-darwin24.3.0)
LZH の圧縮ファイルを作成する
動作を確認する。 まずは適当なテキストファイルを用意する。 念の為にハッシュも見ておく。
$ echo "Hello, World" > greet.txt $ md5sum greet.txt 9af2f8218b150c351ad802c6f3d66abe greet.txt
上記を LZH ファイルに圧縮する。
$ lha a greet.lzh greet.txt greet.txt - Frozen(100%)o
ちゃんとできた。
$ file greet.lzh greet.lzh: LHarc 1.x/ARX archive data [lh0], 'U' OS
LZH の圧縮ファイルを展開する
次に、元のテキストファイルを削除する。
$ rm greet.txt
そして圧縮ファイルの内容を展開する。 元のファイルを削除しておかないとファイルが重複してしまう。
$ lha e greet.lzh greet.txt - Melted : o
展開されたファイルの内容が元のファイルと同一であることを確認する。
$ cat greet.txt
Hello, World
$ md5sum greet.txt
9af2f8218b150c351ad802c6f3d66abe greet.txt
別のアーカイバでも展開する
念の為に別のアーカイバも使って展開しておく。 Homebrew で unar をインストールする。
$ brew install unar
先ほど展開したテキストファイルを削除しておく。
$ rm greet.txt
unar を使って LZH ファイルを展開する。
$ unar greet.lzh greet.lzh: LZH greet.txt (13 B)... OK. Successfully extracted to "./greet.txt".
もう一度、展開されたファイルの内容が元のファイルと同一であることを確認する。
$ cat greet.txt
Hello, World
$ md5sum greet.txt
9af2f8218b150c351ad802c6f3d66abe greet.txt
以上、問題なく動作しちえることが確認できた。