前回の続き。
当ブログのさまざまな企画の中で、この連載に限ってはどうにも敬体だと文章が書き辛いことに気が付きました。おそらく、これが唯一それほど自分が詳しくないものについて公式ドキュメントやウェブ上の文献を調査することによってのみ得られる知識を簡潔にまとめたに過ぎないものだからでしょう。というわけで、唐突ながら今回からこの連載については常体で記述していくことにします。過去のブログ記事を文体変更のみのために更新する予定はありません。
m4
- Macro processing language
- https://www.gnu.org/software/m4
m4は汎用のテキストマクロプロセッサ。マクロ言語なので、基本的なアイデアとしてはTeX言語と似たようなものだと考えられる。実際、テキスト置換が主たる機能とされている。マクロを処理するプリプロセッサと聞くとC言語のマクロを思い起こすが、m4はちょうどそれを汎用にしたようなもので、プログラミング言語に対する前処理のみならず自然言語の定型文生成などの用途に用いられる場合もあるらしい。なお大方の予想に違わずチューリング完全とのこと。
現代においては中核的な利用先はautoconfのようで、具体的にはMakefileを生成する実行ファイルconfigureの生成元であるconfigure.inでm4マクロが多用されているらしい。
mbedtls
- Cryptographic & SSL/TLS library
- https://tls.mbed.org/
Mbed TLSという名の示す通り、組み込みに適することを売りとするX.509証明書、SSL/TLS、DTLSプロトコルの実装(Cライブラリ)。昔はPolar SSLという名前だったらしい。
Homebrewフォーミュラのhomepage情報は更新されていないが、現在は開発元が移管されており、2022年3月現在公式ウェブサイトは以下に移動している。
組み込み用ということでGitHubリポジトリの概要欄でも「オープンソースで、ポータブルで、利用が簡単で、可読性が高く、柔軟なSSLライブラリ」と謳われている。また対応するプラットフォームが多く、Linux, Windows, macOSはもちろんAndroidやiOSもサポート対象となっている。
md4c
- C Markdown parser. Fast. SAX-like interface
- https://github.com/mity/md4c
高速なC言語Markdownパーサ。よく知られているようにMarkdownにはさまざまな方言があるが、このパーサはCommonMarkに準拠しているらしい。SAXに似たインターフェースとのことだが、ここでSAXとはSimple API for XMLのことだろうか。
Popplerに採用されている。またmd4cをベースにWebAssemblyに移植されているmarkdown-wasmというプロジェクトも存在する。これはかなり高速と評判のようだ。
mecab
- Yet another part-of-speech and morphological analyzer
- https://taku910.github.io/mecab/
デファクト・スタンダードな日本語の形態素解析器。標準的な辞書(IPA辞書)だけでなく、用途や好みに合わせてさまざまな辞書と組み合わせて利用できるのが特徴。またそのC++ 実装は高速化のためにさまざまな工夫が凝らされているらしく、とにかく動作が高速。代替の形態素解析器は色々あるが、速度だけを理由としてもMeCabを選択することになりがちである。
mecab-ipadic
- IPA dictionary compiled for MeCab
- https://taku910.github.io/mecab/
MeCabで読み込み可能な形式に変換されたIPA辞書。古いIPAコーパスから作られたので「IPA辞書」と呼ばれているらしい。品詞ラベルが学校文法の体系にかなり近いため利用しやすいとされている。一方で、IPA辞書を用いて分かち書きを行うと、特定の事例で単語分割が妙なことになる問題が知られている。
mpdecimal
- Library for decimal floating point arithmetic
- https://www.bytereef.org/mpdecimal/
十進多倍長演算をサポートするC/C++ ライブラリ。Pythonのdecimalモジュールに採用されている。
mpfr
- C library for multiple-precision floating-point computations
- https://www.mpfr.org/
GNU MPFRは多倍長浮動小数点計算用のCライブラリ。「丸め」に重きを置いたプロジェクトで、サポートされている複数の丸めモードを選択できるらしい。GCCに採用されているほか、Julia・MATLAB・Maple等の科学計算関連で特に有名なプロジェクトでも利用されている。
myman
- Text-mode videogame inspired by Namco’s Pac-Man
- https://myman.sourceforge.io/
コンソールで遊べるパックマン風のミニゲーム。

ncurses
- Text-based UI library
- https://invisible-island.net/ncurses/announce.html
ターミナル非依存的にテキストベースUIを構築するためのライブラリ。GNUプロジェクトの一環として開発されているが、ライセンスはMITに近いものが採用されている模様。htop, vim, zshなどが利用している。
nettle
- Low-level cryptographic library
- https://www.lysator.liu.se/~nisse/nettle/
汎用的な低レベル暗号ライブラリ。GnuTLSに採用されている。
ninvaders
- Space Invaders in the terminal
- https://ninvaders.sourceforge.io/
超有名アーケードゲーム『スペースインベーダー』のターミナル版クローン。ncursesを利用したTUIで遊ぶことができる。ライセンスはGPLv2。

ちなみにスペースインベーダーはかなり難易度の高いゲームだが、名古屋撃ちなどとして知られる攻略法を用いるとゲームオーバーにならずに長時間遊ぶことができるらしい。私が学部時代にお世話になった大学教授なども若い頃はこれの攻略にはまっていたと聞いたことがある。
nkf
- Network Kanji code conversion Filter (NKF)
- https://osdn.net/projects/nkf/
種々の文字コードや改行コードを相互変換する。入力の文字コード等は(ヒューリスティクスにより?)自動判別される。Network Kanji Filterという名称からもわかるように、少なくとも起源としては日本ローカルなツール。初版は富士通の名で1987年に公開されており、歴史が長い。
node
- Platform built on V8 to build network applications
- https://nodejs.org/
Node.jsはV8エンジン上に構築されたサーバサイドJavascript実行環境。そのパッケージマネージャがnpm。
npth
- New GNU portable threads library
- https://gnupg.org/
GnuPGで用いられている非プリエンプティブなスレッドライブラリ。GNU Pthの後継。メーリングリストに投稿されている経緯説明によると、GNU PthがWindowsに対応できないことから開発が始まったらしい。ライブラリとしてGnuPGとは独立して存在しているが、少なくともHomebrew-coreに登録のあるフォーミュラの範囲では他では使用されていないようだ。
nspr
- Platform-neutral API for system-level and libc-like functions
- https://hg.mozilla.org/projects/nspr
Netscape Portable Runtime (NSPR) はMozillaが開発するプラットフォーム非依存のlibc風ライブラリ。上記のフォーミュラにHomepageとして登録のあるURLはソースコードリポジトリのもので、ドキュメントは以下のアドレスにある:
もともとJavaを種々の環境に移植するため、OSなどの環境の違いを吸収するために開発が始まったものらしい。スレッド・I/O・時間管理・メモリ管理・共有ライブラリのリンクなどの機能を備える。FirefoxをはじめとするMozilla製品だけでなくPopplerなどでも利用されている。
nss
- Libraries for security-enabled client and server applications
- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
Network Security Services (NSS) もMozilla発のライブラリで、セキュア通信を必要とするアプリケーション用の機能を提供する。最新のドキュメントは以下で閲覧可:
先述のnsprに依存している。Firefoxはもちろん、一部プラットフォームではGoogle Chromeでも利用されているらしい。
numpy
- Package for scientific computing with Python
- https://www.numpy.org/
言わずと知れたPythonの数値計算ライブラリ。普通はpipでインストールするのでHomebrewの出番はないが、Python製コマンドラインツールなどをインストールする際に依存関係として入ってきている。
ocaml
- General purpose programming language in the ML family
- https://ocaml.org/
特定の界隈では大人気の強く型付けされた(静的型の)関数型プログラミング言語。この言語で書かれた有名プロダクトとしては定理証明支援システムCoqや次世代組版システムSATySFiが挙げられる。
入門書としては五十嵐淳『プログラミングin OCaml』を薦められ、私はこれを読んで勉強した。私の興味範囲においてはあまり有益な利用場面がなく、残念ながら実用したことはない。
ocaml-zarith
- OCaml library for arbitrary-precision arithmetic
- https://github.com/ocaml/Zarith
OCamlの算術・論理演算ライブラリ。Coqが依存している。実装はGMPベースで高速らしい。
oniguruma
- Regular expressions library
- https://github.com/kkos/oniguruma/
鬼車 (Oniguruma) は正規表現ライブラリ。正規表現オブジェクトごとに異なる文字コードを指定できることを特徴とする。
かつてRubyで採用されていた。現在のRubyはフォークプロジェクトの鬼雲 (Onigmo) が利用されている。Ruby以外にもPHPやAtom、Tera Term、jqなどでの採用実績がある。
opam
- OCaml package manager
- https://opam.ocaml.org
OCamlのパッケージマネージャ。もちろん実装もOCaml。
openblas
- Optimized BLAS library
- https://www.openblas.net/
BLAS (Basic Linear Algebra Subprograms) というのは線形演算のAPI仕様群らしい。Level 1(スカラ・ベクトル演算)、Level 2(ベクトル・行列演算)、Level 3(行列・行列演算)に分かれている。OpenBLASはオープンソースの最適化されたBLAS実装の1つ。GotoBLASから派生したものらしい。NumPyなど数多くのプロジェクトで採用されている。
opencore-amr
- Audio codecs extracted from Android open source project
- https://opencore-amr.sourceforge.io/
Adaptive Multi-Rate (AMR) という音声コーデックを扱うライブラリ。Androidのマルチメディア対応は初期の頃からPacketVideo社のOpenCOREフレームワークというものが使われていたようで、このライブラリはその一部。ffmpegが利用しているらしい。
openexr
- High dynamic-range image file format
- https://www.openexr.com/
OpenEXRはプロ向けのラスタイメージ形式で、CG業界などで広く使われているものらしい。その仕様はOpenという語が表すように上記ウェブサイトで詳細に公開されている。このフォーミュラが提供するのはその標準実装ライブラリで、C++ 製である。ImageMagickやOpenCVに利用されている。
openjpeg
- Library for JPEG-2000 image manipulation
- https://www.openjpeg.org/
JPEG 2000形式のエンコード・デコードを扱うオープンソースライブラリ。別の実装としてJasPerなどがあるが、こちらの方がJPEG 2000仕様に忠実らしい。ImageMagickではかつてJasPerが使われていたが、現在はこのライブラリが利用されている。実装はC言語。
次回もそのうち。