私の Homebrew カタログ (3)

2020-03-08 (updated: 2020-07-15)  #macOS 

前回の続き.今回も25個分 (g-j) です.頭文字が G のソフトウェアはなんといっても GNU 関連のソフトウェアが膨大なので当面続きます.

gmp

有名な C 言語向けの多倍長演算ライブラリらしく,巨大な整数を扱う必要のある暗号関連のプログラムや数式処理システムの実装によく使われるそうです.どうやら GCC の実装にも用いられているようです.

gnu-sed

GNU 系列の sed です.macOS 標準の sed は BSD 系列のもので,GNU 版とはかなり異なった挙動をするようです.例によって標準では g プレフィックス付きで gsed としてインストールされます.このプロジェクトは Wikipedia によると元々は確かに GNU 傘下だったようですが,現在では独立しているようです.

gnu-tar

GNU 版の tar です.macOS 標準の tar コマンドは BSD の tar で bsdtar というコマンド名のものと同一だと思います.意外にも tar に関しては BSD 系列の方が多くのファイル形式に対応しているようです.

gnutls

SSL/TLS 実装の1つです.SSL のオープンソース実装と言えば OpenSSL が有名なわけですが,GNU 互換のライセンス(正確には LGPL)を採用しているのがこのプロジェクトの特徴だそうです.したがって GNU 系のアプリケーションが主な使用者ということになるのだと思います.手許のソフトウェアでは Wireshark がこの実装を採用していました.Wikipedia 情報ですが,このプロジェクトも元々 GNU 傘下だったものが現在は独立しているようです.

graphite2

世界のマイナー言語を対象とするフォントレンダラだそうです.自ら “smart” と謳っているのはかなり複雑なレンダリングに対応しているからだそうで,具体的には文脈に依存する形状決定やらリガチャやらグリフ分割やら双方向性やらを扱えるそうです.文字を並べるのも簡単じゃない.

greed

Greed はコマンドラインで遊べるゲームの1つです.@ の位置が自分の現在のポジションで,そこから縦横斜めの8方向から好きな方向を選んで進んでいきます.選べるのは方向だけで,現在位置から選んだ方向1マス目にある数字のマス目だけ前進し,通過した部分にかかれている数字をポイントとして獲得することができます.1度通ったところは数字が消えてもう1度は踏めないので,一筆書きでなるべく長い距離を移動するのがこのゲームの肝となります.どの方向にも移動できなくなった時点でゲームが終了します.暇つぶしにはちょうどいい代物です.

ゲーム greed のスクリーンショット

grep

GNU 版の grep です.もう言わなくてもわかると思いますが,macOS 標準の grep は BSD 版です.このフォーミュラでインストールされるコマンドはデフォルトでは ggrep という名前になります.個人的な印象ですが,grep の動作は GNU 版の方が遥かに高速です.GNU 版実装をインストールしていても,基本的には標準の BSD 系のコマンドを使用することが多いのですが,grep だけは動作速度の差が顕著なので ggrep の方を常用しています.

gv

Ghostscript のフロントエンドで PS ファイルや PDF ファイルの閲覧に用いるビューアです.macOS ではネイティブアプリとして実装されていないので利用するには XQuartz が必要です.

macOS 標準の Preview.app でも PS ファイルを開くことができる(厳密には裏で PDF への変換が行なわれる)こともあり,開発上の特殊事情があって動作確認をしたい場合を除いて,滅多に使うことはありません.

gzip

GNU zip の略で gzip で,それ自体が1つの圧縮方式のはずです.zip とは言いますが Windows で一般的な zip 形式とはあまり関連はないようです.解凍コマンドである gunzip は gzip により圧縮したもの以外にも zip, compress, compress -H, pack を利用して作られた圧縮ファイルを扱うことができるようです.ただし gzip は macOS 標準のアーカイブユーティリティでも解凍できるので,個人的にはそちらを使うことが多いです.

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

Haskell プロジェクトを管理するためのツールです.ビルドツールと紹介されていることもありますが,ビルドだけではなく処理系(コンパイラ)のインストールやパッケージ管理もできるようなので,総合ツールのようです.一時期,遊び目的で Haskell を使用していたのでインストールされていますが,個人的に Haskell コードを書くことはほとんどないので宝の持ち腐れというやつですね……

help2man

コマンドラインツールについて,その --help--version オプションで表示されるメッセージから簡易的な man ページを生成するためのツールです.やる気のないプロジェクトで採用されています.

私が Texdoc のメンテナンスを引き継いだ時点では,その man ページを生成するのに用いられていたので,その方法を再現するために導入しました.ただ,個人的には man ページに載せる情報は --help メッセージよりはいくらか詳しいものでないと用意する意味がないと思っているので,現在 Texdoc の man ページ作成には利用していません.

話が脱線しますが,man ページというのは一般に roff 系のツール・フォーマットで作成されます.これはいわば古のテクノロジーで(TeX より古いはず)今日直接手打ちしたくはないというのが正直なところです.そこで,Texdoc の man ページは ronn という Ruby Gem を用いて Markdown ソースを roff 形式に変換しています.ニッチですが,わざわざ roff を学ばなくても man ページが用意でき,なかなか便利なツールなのでおすすめです.

htop

現在生きているプロセスの一覧やメモリの使用状況を確認するための標準的なコマンドラインツールに top というのがありますが,htop はその代替を目指すプロジェクトです.macOS では OS 標準の Activity Monitor.app があるので滅多に使うことはありませんが,top よりは見やすく,また動作も軽快なので稀に使用します.というか top は何であんなに重いのでしょうか……

hub

Git コマンドを拡張し,コマンドラインから GitHub を操作しやすくするためのツールです.ログインシェルの設定で git としてエイリアスしておくと便利です.

$ eval "$(hub alias -s)"

細かい使い方については,公式サイトや README,そのほか第三者によるブログ記事などで多数解説があるので,ここでは割愛します.

hugo

Hugo というのは静的サイトジェネレータです.このブログも2016年の開設時から現在に至るまで Hugo を利用して生成しています.もう4年も前のことですが,その際の顛末を書いた記事がこのブログにおける最初の投稿でした:

icdiff

diffcolordiff の高機能版みたいなやつです.主な特徴として,差分を取るファイルを上下ではなく左右カラムに並べて表示できたり,行ごとにハイライトするだけでなく文字単位でハイライトできたりということが挙げられます.

個人的には,メインで用いているテキストエディタが Vim なので,当然 vimdiff の使い勝手がとてもよく,icdiff を使用することはほとんどありません.

icu4c

このフォーミュラは C 言語系向けの ICU (International Components for Unicode) ライブラリということで,上記の概要通り Unicode やグローバル化のための機構を備えるもののようです.ウェブサイトにこのライブラリを使用している企業やプロダクトが一覧にされていますが,Google や Apple, Microsoft など,誰もが知る企業の誰もが知るプロダクトが名を連ねています.

ilmbase

OpenEXR というのは ILM 社によって開発されたラスタ系の画像ファイル形式だそうです.Wikipedia によると CG 業界では広く使われているらしいです.私のマシンにおいては,次項の ImageMagick が利用していました.

imagemagick

ImageMagick とは様々な画像操作を行うことができるコマンドラインツールおよびライブラリです.機能も取り扱える画像形式も膨大(100以上)で,非常に利便性が高く,有名です.その使い方については,多くの解説記事が存在しているので,ここでは省略します.

isl

整数の集合に関する演算を行うライブラリのようです.gcc が内部的に利用しているようです.そもそも gcc が依存しているライブラリはわずか(brew deps で確認する限り gmp, isl, libmpc, mpfr の4つだけ)なので,その中に入っているというのは格好いいですね.

一方で,その開発はほぼ1人で行っているようです.PDF にて266ページになるマニュアルが整備されています.ちなみに LaTeX 製でした.

jansson

C 言語向けの json ライブラリのようです.使いやすいのか,PHP や Wireshark など,様々な有名プロダクトで採用されています.

jemalloc

jemalloc というのはメモリアロケーションを担う malloc の Jason Evans 氏による実装です.glibc の実装では特にマルチスレッド環境下では性能面で不足があるらしく,代替として用いられる場合があるようです.BSD 系の OS では jemalloc がデフォルトということもあるようです(macOS については不明です.もしかすると独自実装?).

john

古参で有名なパスワードクラッカーです.CTF 用にインストールしたものです.悪用したことも,その予定もありません.というかローカルマシンと john で簡単に破れるようなパスワード設定って……

jpeg

言わずとしれた画像圧縮形式 JPEG を扱うためのライブラリです.もちろん JPEG と他形式の相互変換も可能で,具体的には PBMPLUS, BMP, GIF, Targa, RLE あたりの形式をサポートしているようです.いくつかコマンドラインインターフェースも含まれています:

  • cjpeg: JPEG 形式に圧縮
  • djpeg: JPEG 画像を他形式に展開
  • rdjpgcom, wdjpgcom: JPEG ファイルのテキストコメントを読み書き
  • jpegtran: JPEG 画像の操作(画像劣化は発生しない)

jq

コマンドラインで利用可能な JSON パーサということになっています.パーサと言っていますが,実際にはパース結果に対してかなり柔軟な操作を行うことが可能です.シェル芸なんかで使うとチート級です.

私自身も何度か実用したことがあります.その本来の目的からしてクセのある文法ですが,機能的には一種のプログラミング言語と言って差し支えないようなものです.嫌な予感がして調べてみたところ,案の定チューリング完全のようでした.

今回はここまでです.だいぶ飽きてきましたが,続きが書かれることを祈りましょう.