プログラミング向けフォント「Explex」を使ってみた

## はじめに
プログラミング学習を本格的に始めて半年ほど経つが、とりあえず VSCode のフォントをいじったりはせずデフォルトのまま進めていた。
 先日「ヒラギノ」作成に携わっていた方のお話を聞く機会があり、コーディングでフォント変えてないな？と今更気づいたのでフォントを切り替えてみた。

## 動作環境
- Mac OS Ventura(13.3.1)
- Visual Studio Code バージョン: 1.92.0 (Universal)

## デフォルトの書体
```
"editor.fontFamily": "Menlo, Monaco, 'Courier New', monospace"
```

私の環境ではデフォルトがこの設定で、基本的に Menlo が表示されていた。

##  Menlo について
公式の説明などないかなと思って調べたらパッと出てこなかったので、 Wikipedia を読んでみた。

https://en.wikipedia.org/wiki/Menlo_(typeface)

 Mac で2009年以降、ターミナル等で使われる等幅フォントのデフォルトとして使われていた書体とのこと。2015年からは SF Mono が採用されているらしいが、こちらはライセンスの関係でインストールしないとVSCodeなどでは使えないらしい。

正直 Menlo で困っていたわけではなく、非常に読み易く疲れにくいフォントだなと思っていた。

## なんで変えようと思ったのか
ひとことで言えば、「合字（リガチャ）使ってみたい！」
それだけ。

プログラミングでよく出てくる
```
=== -> => 
```
のような表現のアキが気になってはいたので、それをどうにかできないかと思っていた。
矢印なんてくっついた方が絶対見やすい。

## フォントを選ぶにあたって考えたこと
選定にあたっては、「見やすくかつ合字を使えること」を要件に探した。
具体的には、

- 合字が使えること（変更の目的）
- 等幅フォントであること
- 疲れにくい書体であること

最初に考えていたのはこれくらい。

## 合字について
まずコーディング用フォントとして合字が良いとして挙げられる Fira Code 。
使っている人もそこそこいるみたいで、まず真っ先に候補として上がった。

https://github.com/tonsky/FiraCode

![スクリーンショット 2024-09-15 21.34.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3689214/87b6e42d-57f6-7dea-844e-3e01baef3ff9.png)

このような感じで、あきらかに合字なしのものとは書き方が異なる。
これだと確実に見間違いなどは起こさず作業を進められるので、一定数のファンがいるのはうなずける。
しかし、今回は採用を見送った。

## なぜ Fira Code にしなかったのか
非常に識別しやすい合字を採用した Fira Code だが、一つ心配なことがあった。
「あまりこれに慣れたら他の人のコード読む時に支障が出ないか？」
ということだ。
一般的な表示とは大きく異なるため、レビュー時に不便な思いをしたら嫌だなということだ。また、この特徴からこのフォント使うには「慣れ」がある程度必要、というのが想像できた。

結果的に、イニシャルコスト（慣れ）と、レビュー時など一般環境での表示を読む時に支障が出そう、ということから見送った。

個人的には、設計とかとても面白くていつか試験的に入れてみたいなとは思っている。

## 代替として上がってきた 0xProto
その他合字ができるフォントとして検索していて、気になったのが 0xProto 。

https://github.com/0xType/0xProto

今回はこのフォントについては合字機能についてだけ軽く説明したい。
まずは合字の画像が以下。左が合字機能アリ、右がナシ。

![スクリーンショット 2024-09-15 21.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3689214/fa49d755-26ba-aaf7-c0f5-8e270298ee6c.png)

 Fira Code と比べると、だいぶ控えめな変更。読みやすくはなっているが、元の形が充分連想できる。このくらいであれば、自分の要件を満たせているのでは？と思い、とりあえずこの線で進めてみた。

ちなみに、この 0xProto には Texture Healing などいろいろ他にも機能があるのだが、今回は趣旨がズレるので説明は割愛する。
それらの紹介についてはドキュメントや他のレビューを参考にしていただきい。

https://forest.watch.impress.co.jp/docs/review/1504899.html

https://qiita.com/usamik26/items/2ab0c4b88bf7c00845dd

## 日本語の表示について
実は（「実は」でもなんでもないが）、 0xProto には日本語が含まれていない。
基本的に欧文書体には漢字を含む文字数の多い日本語は入っておらず、下位で設定されているフォントや、それですらなければ、デバイスやブラウザなどのデフォルトの書体が適用される。

実際和欧混植は DTP などでは当たり前で、和文書体のアルファベットがイマイチだと欧文書体から探してくることもある。

今回はその逆である。

実際のところ、意識せずに導入して「まあこれでいいか」となることもある。
しかし、「欧文と和文の幅が綺麗に揃っていないと嫌だなーと思っていたところ、個人で 0xProto と和文書体を合成している方がおられたので、今回はありがたくそれを使ってみようということになった。

## Explexについて
今回は「たわら氏」の作成された、 Explex を使用した。

https://github.com/yuru7/Explex?tab=readme-ov-file

基本的にフォントの説明は、とてもわかりやすくドキュメントを書いてくださっているので、そちらを読んでいただければと思う。

合成してある IBM Plex Sans JP は以下が参照しやすい。

https://fonts.adobe.com/fonts/ibm-plex-sans-jp

半角：全角（日本語）の比率が 3:5 と 1:1 の2種類を作っていただいていたので、今回は 3:5 の方を採用した。
理由としては、私のデフォルト環境では 3:5 でバランスが取れていた（っぽい）ため、スムーズに移行できると考えたため。

## 使ってみて
今のところ、合字部分がとても読みやすくなって満足。
ただ、 0xProto が若干太めのため、 Menlo と比べると、視認性は上がったがそのぶん少し疲れやすいように感じる（眠い時に見たら少ししんどかった）。

デフォルトと切り替えて思ったのは、
- Menlo はこれはこれでめっちゃ読みやすい（'D'とか高さがあって読みやすい）
- 合字部分以外はぶっちゃけ Menlo 好きかもしれない
- 細い書体の方が疲れにくさという面では優れている

とはいえ、やっぱ合字できるといいな〜、となってしまったので、しばらくは使い続けようかなと考えている。