私のHomebrewカタログ (5)

2021-05-15 (updated: 2025-12-09) #macOS

前回の続き。今回も25個分 (l-n) です。

最近まで気付いていなかったのですが、brew listには引数にフォーミュラ名を与えることができるようです1。その場合、例えば次に示すように、当該フォーミュラ (keg) に含まれる主要なファイルが一覧になります。さらに--verboseオプションを付けると、すべてのファイルが表示されます。

$ brew list libtiff
/usr/local/Cellar/libtiff/4.1.0/bin/fax2ps
/usr/local/Cellar/libtiff/4.1.0/bin/fax2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/pal2rgb
/usr/local/Cellar/libtiff/4.1.0/bin/ppm2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/raw2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2bw
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2pdf
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2ps
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2rgba
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcmp
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcp
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcrop
/usr/local/Cellar/libtiff/4.1.0/bin/tiffdither
/usr/local/Cellar/libtiff/4.1.0/bin/tiffdump
/usr/local/Cellar/libtiff/4.1.0/bin/tiffinfo
/usr/local/Cellar/libtiff/4.1.0/bin/tiffmedian
/usr/local/Cellar/libtiff/4.1.0/bin/tiffset
/usr/local/Cellar/libtiff/4.1.0/bin/tiffsplit
/usr/local/Cellar/libtiff/4.1.0/include/ (5 files)
/usr/local/Cellar/libtiff/4.1.0/lib/libtiff.5.dylib
/usr/local/Cellar/libtiff/4.1.0/lib/libtiffxx.5.dylib
/usr/local/Cellar/libtiff/4.1.0/lib/pkgconfig/libtiff-4.pc
/usr/local/Cellar/libtiff/4.1.0/lib/ (4 other files)
/usr/local/Cellar/libtiff/4.1.0/share/doc/ (148 files)
/usr/local/Cellar/libtiff/4.1.0/share/man/ (63 files)

libtasn1

GNU傘下で開発されているASN.1パーサライブラリです。ASN.1というのはAbstract Syntax Notation Oneのことで、複雑なデータ構造を表現したり転送したりする方法を記述するための形式のようです。主な活躍の場は通信プロトコル関連のようで、実際私の環境でこのパーサを利用しているのはgnutlsとwiresharkでした。

libtiff

画像形式の1つTIFFを扱うライブラリです。Cライブラリだけでなくtiffinfoなどのコマンドラインインターフェースも同梱されています。個人的にはTIFF画像を扱う場面はほとんどないのですが(基本的にLaTeXでもサポートされていませんし……)画像劣化するような圧縮を行うことがない(かつRAWではない)形式ということで、特定の業界では需要がある画像形式のようです。

libtool

GNU Libtoolとはずいぶん抽象的な名称ですが、通常Autoconf/Automakeと一緒に用いて様々なマルチプラットフォームを目指すプロジェクトでビルド手順を簡潔に記述するために用いるもののようです。具体的には、環境ごとの細かい差異を隠蔽し、共通のインターフェースで共有ライブラリのビルドを行うソフトウェアのようです。

libuninameslist

FontForgeのプロダクトで、Unicodeコンソーシアムが提供するNamesList.txtなるUnicode文字それぞれの名称を列挙した巨大なファイルを扱うライブラリです。NamesList.txtは単純なテキストファイルですが2021年5月現在最新のVer. 13は5万行 (1.52 MB) と大きなファイルで、このライブラリは予めデータをバイト列にコンパイルしておくことで、これらの情報に他のプログラムから高速かつ簡便にアクセスできるようにしたもののようです。

libunistring

C言語でUnicode文字列を扱うためのGNU製ライブラリです。そこそこ高級な機能も備えているようで、upper/lower caseや正規化はもちろん、行分割アルゴリズムなども実装しているようです。

libusb

名前の通りですがUSBデバイスを扱うためのクロスプラットフォームCライブラリだそうです。手許環境ではGnuPGだけが依存していました。

libuv

マルチプラットフォームな非同期I/Oライブラリで、元々はNode.js向けに開発されていたもののようです。現在ではNode.js以外でも用いられています。

libvidstab

ビデオの手ブレ補正を行うFFmpegとTranscode用のプラグインだそうです。1回目のエンコードでブレ情報を作成してから2度目のエンコードで補正を適用するというしくみになっているようで、なんだかLaTeXの相互参照解決のようですね。

libvorbis

非営利団体Xiph.Orgが開発したVorbisなるオープンな非可逆圧縮音声ファイルを扱うためのライブラリです。MP3等が特許による制限があったため、Vorbisはその自由な代替として開発されたものだそうです。残念ながらMP3等と比べると対応している環境は少ないようですが、macOSでは同団体が提供するQuickTime Componentsを用いるとQuickTime, iTunesでも扱うことができるようです。

なおMP3の特許権は2017年4月に消滅し、現在ではパブリックドメインとなっています(参考)。

libvpx

Google社の開発するVP8/VP9ビデオコーデックライブラリです。VP9は現在YouTubeで採用されているようです。

libx11

X Window System (X11) というのはUnix系プラットフォームで一般的なウィンドウシステムです。X.Org Serverというのは、そのX Window Systemの公式リファレンス実装に該当するようで、このフォーミュラが提供するのはそのコアライブラリです。他にも5つほど相互に関連するフォーミュラがあります。

  • libxau: A Sample Authorization Protocol for X
  • libxcb: Interface to the X Window System protocol
  • libxdmcp: X Display Manager Control Protocol library
  • libxext: Library for common extensions to the X11 protocol
  • libxrender: Library for the Render Extension to the X11 protocol

X Window SystemにはGUIに関する具体的な仕様は一切含まれていないようで、実際にGUIアプリケーションを構築する場合にはX上で動作するGTK+ やQtなどのツールキットを用いるのが一般的、かつ公式にもそうすることが推奨されています。CairoやGnuplotなど、GUIをもつUnix向けのツールは概ねこのフォーミュラに依存しています。

libxml2

有名なデスクトップ環境GNOMEプロジェクトのために開発されたXMLパーサとツールキットです。XMLパーサのみならず、XPathやHTML4パーサも搭載しているようです。公式ページには「GNOMEプラットフォーム外では安定しない」とありますが、多くの環境で動作するように設計されており、実際にはGNOMEと関係ないプロジェクトにも採用されています。手許ではlatexmlがこのlibxml2に依存しています。

libyaml

C言語向けのYAMLパーサです。READMEによると、Google Summer of Code (GSoC) のプロジェクトの1つとして開発されたようです。現在ではYAMLコミュニティがメンテナンスをしています。元々Pythonプロジェクトのために開発されたもののようですが、RubyやVimでも利用されているようです。同じく設定記述用途を意図するTOMLのパーサ実装は簡単なのですが(かくいう筆者もllmkのために実装したことがあります)YAMLは仕様が巨大で独自実装するのは困難なようなので、使い出があるのでしょう。

libzip

Zipアーカイブの読み込み・作成・改変などを行うためのCライブラリです。PHPで利用されています。利用事例が公式サイトで一覧にされており、ちょっと興味深いです:

ライブラリと言いつつ、いくつかコマンドラインツールが同梱されています:

  • zipcmp: 2つのzipアーカイブを比較する
  • zipmerge: zipアーカイブを結合する
  • ziptool: zipアーカイブを改変する

little-cms2

CMSと聞くとWeb制作で用いるコンテンツ管理システム (Contents Management System) を思い浮かべますが、ここでのCMSは色管理システム (Color Management System) を指すようです。このCMSは、この業界ではデファクト・スタンダードらしいICCプロファイルと呼ばれる仕組みを利用し、デバイス依存のRGBやCMYKを別のデバイス非依存の形に変換したりといったことを行うようです。Little CMSはそのオープンソース実装としては広く用いられており、ImageMagicやGhostScriptなどのオープンソースプロジェクトに加え、Mac版のMS OfficeやFireFoxなどでも採用されたことがあるようです。

llvm@6

LLVMは比較的新しいC/C++ コンパイラClangのバックエンドとして有名なコンパイラ基盤です。Low Level Virtual Machineの略語だと思っていたのですが、公式サイトによれば現在は「何の略語でもない」ということになっているようです。

このllvm@6フォーミュラで導入されるのはバージョン6系のLLVMです。2020年8月現在最新のLLVMはバージョン10なので、そこそこ古いバージョンのものです。特に実用目的で入れた訳ではないのですが、uint256_t氏のRapidusという実験的なRust製JavaScriptエンジンで遊んでみたくてインストールした記憶があります。それにしてもunit256_t氏は他にもWebブラウザ (Naglfar)やJVM実装 (Ferrugo)、さらにはLLVMインスパイアなコンパイラ基盤 (Cilk)まで作っていてすごいです。

lua

LuaはRubyやPythonに似た軽量スクリプト言語です。Luaの特徴は本当に「軽量」であることで、さまざまなシステムに組み込んで利用することを前提として設計されています。例えばモダンなTeX処理系であるLuaTeXもその一例で、TeX処理系にLua処理系を組み込んだものになっています。また、スクリプト言語としては動作が高速であることも長所とされています。

個人的な印象としては、RubyやPythonほどメジャーではないものの、Luaは使いやすい言語です。具象構文や変数スコープ、正規表現代わりのパターンマッチなどにはやや独特のクセがあるような気もしますが、概ね他の一般的なスクリプト言語と同じように活用することができて、すでにそういったものを書いたことがある人にとっては学習コストは高くないでしょう。

TeXの世界では、TeX処理系で実行する以外のツールを作ろうと思うと、一般的な選択肢は (1) バイナリ形式、(2) Perl、(3) Luaぐらいしかありません。JavaやPythonにより実装されたものもありますが、こうしたものの実行環境(インタプリタやVM)はTeX Liveに付属しないため、TeXの世界で完結させることはできません2。さらに (1) の選択肢はよほど重要なプログラムであるとか、速度が求められるとか、そういったことがないと手間が大きくなってしまうので敷居が高いです3。そういうわけで、実質的にほとんどのツールが気軽に採用できる選択肢は (2) Perlまたは (3) Luaの2つしかありません。選択肢がこの2つだと、すでにPerlに習熟していて使い熟しているという場合を除いては、基本的にはLuaが最もおすすめの言語ということになります。

話が脱線しましたが、HomebrewのLuaフォーミュラはTeX LiveのLuaTeX処理系とは無関係です。直接の処理系としては私はtexluaばかり利用していますが、私の環境ではgnuplot・vim・wiresharkが組み込み言語としてこのフォーミュラのLuaを利用しているようです。

lynx

Lynxはテキストベースのウェブブラウザです。基本的に画像や動画は一切表示されず、(表組み以外の)テキスト要素のみをブラウジングすることができます。またJavaScript等も利用できません。今の時代、こうしたテキスト以外の要素なしに閲覧できるウェブサイトはそうそうないので、実用には向かないと思いますが、その性質を逆用してウェブアクセシビリティの確認のために使用されることがあるようです。ちなみに私の個人サイトはLynxでも完璧に表示することができます。

Lynxスクリーンショット

lz4

LZ4は圧縮・展開の高速性を重視した非可逆圧縮アルゴリズムです。このlz4フォーミュラで導入されるのは、LZ4提案者のYann Collet氏によるリファレンス実装です。LZ4の圧縮率はgzip等と比べると低いようですが、圧縮率よりも処理速度が求められる場面を中心に広く利用されています。ちなみにTeX Liveマネージャ (tlmgr) においても、パッケージのバックアップ用アーカイブの作成に最優先のデフォルト形式として採用されています。

LZ4の原理自体はgzipなどと同様の辞書式圧縮アルゴリズムのようですが、速度重視で一部機能を制限しつつ、泥臭く細かな効率化テクニックを駆使しているようです。

lzo

LZOも高速な非可逆圧縮アルゴリズムで、正確にはLZ4がLZOの派生にあたるようです。LZ4よりは少し圧縮率が良いと言われています。この圧縮形式も速度重視の場面でよく用いられているみたいです。

なおこのフォーミュラに含まれているのはANSI Cライブラリのみで、コマンドラインツールは含まれていません。公式ツール名はlzopで、これが必要な場合は別途lzopフォーミュラをインストールする必要があるようです。

次回もお楽しみに。


  1. 2020年12月にリリースされたHomebrew 2.6.0以降では、オプションも引数もなしにbrew listを実行すると、インストール済みのフォーミュラのみならずCask出力されるようになったようです。個人的にはCaskは一切使用していないので出力は同じですが、確実にフォーミュラだけのリストを得るためにはbrew list --formulaeとする必要があるようです。 ↩︎

  2. つまり、実際にTeXユーザに使ってもらうには、TeX Live以外に必要なものを別途インストールしてもらわねばなりません。 ↩︎

  3. TeX Liveに含まれるバイナリプログラムは、ソースコードの状態で頒布されるのではなく、年に1度ボランティアがさまざまなプラットフォーム向けにビルドして配布する運用が行われているためです。 ↩︎