SFMono + FiraCode記号リガチャ + NerdFont化 したらイイ感じのプログラミングフォントが爆誕した

MacにはSFMonoというシュっとした等幅フォントがあります。
FiraCodeというフリーフォントは特定の文字の組み合わせで文字が変化するリガチャを利用したプログラミング特化の記号があります。
Shellのプロンプトを見やすくするPowerLineに対応したアイコンフォントに対応したNerdFontsというプロジェクトがあります。
この3つを組み合わせたら「これぞまさしく僕の求めていたもの!」と思えるプログラミングフォントが出来ました。
メガテンで言うと強いヤツを掛け合わせた三身合体したら最高の仲魔ができました、みたいな。

できたもの

まず最初にできたもののお披露目。
どんな感じかというと

こんな感じです。良いでしょ? 最高でしょ?

SFMono

SFMonoは通常では選択できませんが、macOS Sierra以降のTerminalの中にあります。Terminal以外で使うにはこれをいったんTerminalから取り出す必要があります。
FinderからMacintoshHD/Applications/Utilities/Terminal.appがあるので、Ctrl+クリック(or右クリック)してパッケージの中身を表示とすると中が見れます。
中のContents/Resources/Fonts/の中にSFMono-*という各ウェイトに対応したフォントがあります。
よく場所がわからなければFinderでCmd+shift+gを押して移動先を指定するところで/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/と入力してください。

今回はこれを合成したいのでいったん、デスクトップなどのわかりやすい場所にコピーしてください。普通に使うだけならダブルクリックするかFontBook.appで開くかしてインストールすればSFMonoが使えます。

リガチャ合成

リガチャによる記号の変化はFiraCodeを参照するとわかりやすいと思います。

この素敵なリガチャ対応記号を他のフォントに合成してしまおうというプロジェクトとしてLigaturizerというのがあります。
これを動作させるにはfontforgeというライブラリが必要なので

$ brew install fontforge

で入れます。
が、ここに少し落とし穴があって現在入る最新のfontforgeはpython3系のものらしく、LigaturizerはPython2系なので動作しないみたいです。
そこでPython3系で動作するForkのほうを使います。

なお、もしかしたら

$ brew link fontforge

が必要かもしれません。
Ligaturizerの使い方は適宜READMEを参照してください。

これで、リガチャ記号入りのSFMonoができると思います。

NerdFont化

さらにTerminal上でも快適に使うために、PowerLine対応のフォントにしたいと思います。
これにはNerdFontsプロジェクトを使います。ちなみにこのNerdFontsリポジトリは多数のNerdFont化されたフォントを含むためかなりcloneに時間がかかりますのでご注意ください。

の中にあるFontPatherというのスクリプトがあるので、それを使って先程作ったリガチャ入りSFMonoにアイコンフォントを合成していきます。
こちらでもfontforgeを使いますが、Ligaturizerが動いたなら問題なく動くと思います。
ちなみに、ちょっと面倒ですが1フォントづつ処理する必要があるので、ウェイトそれぞれにあてていく必要があります。

具体的には

$ fontforge -script ./font-patcher -c fonts/LigaSFMono-Regular.otf

みたいな感じです。fontforgeにスクリプトとしてfontpacherを指定します。-cオプションはとにかく全部のアイコンフォントをぶっこみます。

無事に処理されたら、rootディレクトリにLiga SFMono Regular Nerd Font Complete.otfみたいに合成されたフォントが出来ます。全部にあてたらダブルクリックやFontBook.appで開いてインストールすれば完了です。

使いかた

ここまでやって特に設定の変更などをしていなければLigaSFMono Nerd Fontという名前のフォントファミリーで作られたはずなので、使いたいアプリケーションでそのフォントを指定すればOKです。ヤッタネ!

余談

ちなみにここに至る経緯として

を見てみて凄く良かったんですが、VSCode上でなんだか文字間が良い感じに表示できなかったのと、和文フォントがMigu 1Mだったので使いませんでした。
どうも僕はMigu 1Mの独特のまるっこい感じが好きになれません(もちろん素晴しいフォントだと思いますが、僕個人の好みの問題です)。

そして僕はNoto Sans JP系のコンセプトと字体が好きです。見やすさを調整されたNasuは是非オススメしたい。

FiraCodeのリガチャは素晴しいんですが、フォント自体はあまり好きになれませんでした(もちろんこれも好みの話です)。
ちなみに今まで使ってたのはSource Code Proの流れをくむHasklig。

です。

自分の好みのフォントで作業をすると気分がご機嫌になるので、皆さんもぜひ俺の考えた最高の合成フォントを作ってみてください。

textlintをてんこ盛りカスタマイズしたRuboCopのオプションを再入門したら、pre-commitフック経由の問題も解決した