前回の続き。今回も25個分 (g-j) です。頭文字がGのソフトウェアはなんといってもGNU関連のソフトウェアが膨大なので当面続きます。
gmp
- GNU multiple precision arithmetic library
- https://gmplib.org/
有名なC言語向けの多倍長演算ライブラリらしく、巨大な整数を扱う必要のある暗号関連のプログラムや数式処理システムの実装によく使われるそうです。どうやらGCCの実装にも用いられているようです。
gnu-sed
- GNU implementation of the famous stream editor
- https://www.gnu.org/software/sed/
GNU系列のsedです。macOS標準のsedはBSD系列のもので、GNU版とはかなり異なった挙動をするようです。例によって標準ではgプレフィックス付きでgsedとしてインストールされます。このプロジェクトはWikipediaによると元々は確かにGNU傘下だったようですが、現在では独立しているようです。
gnu-tar
- GNU version of the tar archiving utility
- https://www.gnu.org/software/tar/
GNU版のtarです。macOS標準のtarコマンドはBSDのtarでbsdtarというコマンド名のものと同一だと思います。意外にもtarに関してはBSD系列の方が多くのファイル形式に対応しているようです。
gnutls
- GNU Transport Layer Security (TLS) Library
- https://gnutls.org/
SSL/TLS実装の1つです。SSLのオープンソース実装と言えばOpenSSLが有名なわけですが、GNU互換のライセンス(正確にはLGPL)を採用しているのがこのプロジェクトの特徴だそうです。したがってGNU系のアプリケーションが主な使用者ということになるのだと思います。手許のソフトウェアではWiresharkがこの実装を採用していました。Wikipedia情報ですが、このプロジェクトも元々GNU傘下だったものが現在は独立しているようです。
graphite2
- Smart font renderer for non-Roman scripts
- https://graphite.sil.org/
世界のマイナー言語を対象とするフォントレンダラだそうです。自ら“smart”と謳っているのはかなり複雑なレンダリングに対応しているからだそうで、具体的には文脈に依存する形状決定やらリガチャやらグリフ分割やら双方向性やらを扱えるそうです。文字を並べるのも簡単じゃない。
greed
- Game of consumption
- http://www.catb.org/~esr/greed/
Greedはコマンドラインで遊べるゲームの1つです。@の位置が自分の現在のポジションで、そこから縦横斜めの8方向から好きな方向を選んで進んでいきます。選べるのは方向だけで、現在位置から選んだ方向1マス目にある数字のマス目だけ前進し、通過した部分にかかれている数字をポイントとして獲得することができます。1度通ったところは数字が消えてもう1度は踏めないので、一筆書きでなるべく長い距離を移動するのがこのゲームの肝となります。どの方向にも移動できなくなった時点でゲームが終了します。暇つぶしにはちょうどいい代物です。

grep
- GNU grep, egrep and fgrep
- https://www.gnu.org/software/grep/
GNU版のgrepです。もう言わなくてもわかると思いますが、macOS標準のgrepはBSD版です。このフォーミュラでインストールされるコマンドはデフォルトではggrepという名前になります。個人的な印象ですが、grepの動作はGNU版の方が遥かに高速です。GNU版実装をインストールしていても、基本的には標準のBSD系のコマンドを使用することが多いのですが、grepだけは動作速度の差が顕著なのでggrepの方を常用しています。
gv
- View and navigate through PostScript and PDF documents
- https://www.gnu.org/s/gv/
GhostscriptのフロントエンドでPSファイルやPDFファイルの閲覧に用いるビューアです。macOSではネイティブアプリとして実装されていないので利用するにはXQuartzが必要です。
macOS標準のPreview.appでもPSファイルを開くことができる(厳密には裏でPDFへの変換が行なわれる)こともあり、開発上の特殊事情があって動作確認をしたい場合を除いて、滅多に使うことはありません。
gzip
- Popular GNU data compression program
- https://www.gnu.org/software/gzip
GNU zipの略でgzipで、それ自体が1つの圧縮方式のはずです。zipとは言いますがWindowsで一般的なzip形式とはあまり関連はないようです。解凍コマンドであるgunzipはgzipにより圧縮したもの以外にもzip, compress, compress -H, packを利用して作られた圧縮ファイルを扱うことができるようです。ただしgzipはmacOS標準のアーカイブユーティリティでも解凍できるので、個人的にはそちらを使うことが多いです。
harfbuzz
- OpenType text shaping engine
- https://wiki.freedesktop.org/www/Software/HarfBuzz/
HarfBuzzというのはOpenTypeレイアウトエンジンで、要するにOpenTypeフォントの持つ情報(機能)を用いて、文字列を適切にレンダリングするためのライブラリだと思います。特にアラビア語などではこのレンダリングは(欧州の諸言語やCJK言語と比べると?)複雑な処理になるようで、HarfBuzzはその辺りにもしっかり対応しているというのが売りのようです。Homebrewでインストールされるものはfontforgeやpangoで利用されています。実際のところ、エンドユーザがこういったバックエンドのライブラリを意識する機会は少ないでしょう。
Homebrewとは関係がないですが、TeXの世界でもHarfBuzzは重宝されています。まずXeTeXはかねてよりこのライブラリを内蔵しており、当然その機能を利用しています。LuaTeXでは独自のものが用いられていたようですが、最近になってLuaTeXにも組み込まれるようになり、TeX Live 2020からはluahbtex, luajithbtexとして利用可能になりました。そして、早くも標準のlualatexコマンドの背後で起動されるTeXエンジンはluahbtexに変更されています。このようにHarfBuzzが利用可能なLuaTeXエンジンにおいては、\font宣言時にmode=harfを指定することでその機能を活用できるようです。
haskell-stack
- The Haskell Tool Stack
- https://haskellstack.org/
Haskellプロジェクトを管理するためのツールです。ビルドツールと紹介されていることもありますが、ビルドだけではなく処理系(コンパイラ)のインストールやパッケージ管理もできるようなので、総合ツールのようです。一時期、遊び目的でHaskellを使用していたのでインストールされていますが、個人的にHaskellコードを書くことはほとんどないので宝の持ち腐れというやつですね……
help2man
- Automatically generate simple man pages
- https://www.gnu.org/software/help2man/
コマンドラインツールについて、その--helpと--versionオプションで表示されるメッセージから簡易的なmanページを生成するためのツールです。やる気のないプロジェクトで採用されています。
私がTexdocのメンテナンスを引き継いだ時点では、そのmanページを生成するのに用いられていたので、その方法を再現するために導入しました。ただ、個人的にはmanページに載せる情報は--helpメッセージよりはいくらか詳しいものでないと用意する意味がないと思っているので、現在Texdocのmanページ作成には利用していません。
話が脱線しますが、manページというのは一般にroff系のツール・フォーマットで作成されます。これはいわば古のテクノロジーで(TeXより古いはず)今日直接手打ちしたくはないというのが正直なところです。そこで、TexdocのmanページはronnというRuby Gemを用いてMarkdownソースをroff形式に変換しています。ニッチですが、わざわざroffを学ばなくてもmanページが用意でき、なかなか便利なツールなのでおすすめです。
htop
- Improved top (interactive process viewer)
- https://hisham.hm/htop/
現在生きているプロセスの一覧やメモリの使用状況を確認するための標準的なコマンドラインツールにtopというのがありますが、htopはその代替を目指すプロジェクトです。macOSではOS標準のActivity Monitor.appがあるので滅多に使うことはありませんが、topよりは見やすく、また動作も軽快なので稀に使用します。というかtopは何であんなに重いのでしょうか……
hub
- Add GitHub support to git on the command-line
- https://hub.github.com/
Gitコマンドを拡張し、コマンドラインからGitHubを操作しやすくするためのツールです。ログインシェルの設定でgitとしてエイリアスしておくと便利です。
$ eval "$(hub alias -s)"
細かい使い方については、公式サイトやREADME、そのほか第三者によるブログ記事などで多数解説があるので、ここでは割愛します。
hugo
- Configurable static site generator
- https://gohugo.io/
Hugoというのは静的サイトジェネレータです。このブログも2016年の開設時から現在に至るまでHugoを利用して生成しています。もう4年も前のことですが、その際の顛末を書いた記事がこのブログにおける最初の投稿でした:
icdiff
- Improved colored diff
- https://github.com/jeffkaufman/icdiff
diffやcolordiffの高機能版みたいなやつです。主な特徴として、差分を取るファイルを上下ではなく左右カラムに並べて表示できたり、行ごとにハイライトするだけでなく文字単位でハイライトできたりということが挙げられます。
個人的には、メインで用いているテキストエディタがVimなので、当然vimdiffの使い勝手がとてもよく、icdiffを使用することはほとんどありません。
icu4c
- C/C++ and Java libraries for Unicode and globalization
- http://site.icu-project.org/home
このフォーミュラはC言語系向けのICU (International Components for Unicode) ライブラリということで、上記の概要通りUnicodeやグローバル化のための機構を備えるもののようです。ウェブサイトにこのライブラリを使用している企業やプロダクトが一覧にされていますが、GoogleやApple, Microsoftなど、誰もが知る企業の誰もが知るプロダクトが名を連ねています。
ilmbase
- OpenEXR ILM Base libraries (high dynamic-range image file format)
- https://www.openexr.com/
OpenEXRというのはILM社によって開発されたラスタ系の画像ファイル形式だそうです。WikipediaによるとCG業界では広く使われているらしいです。私のマシンにおいては、次項のImageMagickが利用していました。
imagemagick
- Tools and libraries to manipulate images in many formats
- https://www.imagemagick.org/
ImageMagickとは様々な画像操作を行うことができるコマンドラインツールおよびライブラリです。機能も取り扱える画像形式も膨大(100以上)で、非常に利便性が高く、有名です。その使い方については、多くの解説記事が存在しているので、ここでは省略します。
isl
- Integer Set Library for the polyhedral model
- https://isl.gforge.inria.fr/
整数の集合に関する演算を行うライブラリのようです。gccが内部的に利用しているようです。そもそもgccが依存しているライブラリはわずか(brew depsで確認する限りgmp, isl, libmpc, mpfrの4つだけ)なので、その中に入っているというのは格好いいですね。
一方で、その開発はほぼ1人で行っているようです。PDFにて266ページになるマニュアルが整備されています。ちなみにLaTeX製でした。
jansson
- C library for encoding, decoding, and manipulating JSON
- http://www.digip.org/jansson/
C言語向けのjsonライブラリのようです。使いやすいのか、PHPやWiresharkなど、様々な有名プロダクトで採用されています。
jemalloc
- malloc implementation emphasizing fragmentation avoidance
- http://jemalloc.net/
jemallocというのはメモリアロケーションを担うmallocのJason Evans氏による実装です。glibcの実装では特にマルチスレッド環境下では性能面で不足があるらしく、代替として用いられる場合があるようです。BSD系のOSではjemallocがデフォルトということもあるようです(macOSについては不明です。もしかすると独自実装?)。
john
- Featureful UNIX password cracker
- https://www.openwall.com/john/
古参で有名なパスワードクラッカーです。CTF用にインストールしたものです。悪用したことも、その予定もありません。というかローカルマシンとjohnで簡単に破れるようなパスワード設定って……
jpeg
- Image manipulation library
- https://www.ijg.org/
言わずとしれた画像圧縮形式JPEGを扱うためのライブラリです。もちろんJPEGと他形式の相互変換も可能で、具体的にはPBMPLUS, BMP, GIF, Targa, RLEあたりの形式をサポートしているようです。いくつかコマンドラインインターフェースも含まれています:
cjpeg: JPEG形式に圧縮djpeg: JPEG画像を他形式に展開rdjpgcom,wdjpgcom: JPEGファイルのテキストコメントを読み書きjpegtran: JPEG画像の操作(画像劣化は発生しない)
jq
- Lightweight and flexible command-line JSON processor
- https://stedolan.github.io/jq/
コマンドラインで利用可能なJSONパーサということになっています。パーサと言っていますが、実際にはパース結果に対してかなり柔軟な操作を行うことが可能です。シェル芸なんかで使うとチート級です。
私自身も何度か実用したことがあります。その本来の目的からしてクセのある文法ですが、機能的には一種のプログラミング言語と言って差し支えないようなものです。嫌な予感がして調べてみたところ、案の定チューリング完全のようでした。
今回はここまでです。だいぶ飽きてきましたが、続きが書かれることを祈りましょう。