やっぱり Ricty が好き

どんなフォントを使うかというのは、私のような PC を仕事に使っている人間にとって死活問題なのである（異論は認めない）。だからフォントが気になってしまうと、普通に２〜３日フォントの事ばかり考えてしまう。

[PlemolJPか、それ以外か – プログラミング用フォント徹底比較！ | Output 0.1](https://pouhon.net/font-plemol/6599/) によると、日本語対応のプログラミング用フリーフォントには３種類の系統しか無いとのことだが、私はそこに１種類加えて、以下の４種類じゃないかと思う。

* [M+フォント](https://ja.wikipedia.org/wiki/M%2B_FONTS)系：森下浩司氏による開発
* [源ノ角ゴシック](https://ja.wikipedia.org/wiki/%E6%BA%90%E3%83%8E%E8%A7%92%E3%82%B4%E3%82%B7%E3%83%83%E3%82%AF)系：Adobe と Google による共同開発
* [IBM Plex Sans JP](https://www.ibm.com/plex/)系：IBM による開発 ← 新興勢力！
* [IPA](https://ja.wikipedia.org/wiki/IPA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88) 系：独立行政法人情報処理推進機構（IPA）による配布

# 有名なフォントたち
私の独断と偏見で選ぶと、上記の系統でそれぞれ有名なフォントは以下だろう。

* 等幅フォント（エディタ用）
    * M+フォント系
        * Ricty, RictyDiminished
    * 源ノ角ゴシック系
        * Source Han Code JP
    * IBM Plex Sans JP 系
        * PlemolJP
    * IPA 系
        * Takao Font
            * 一昔前は、これか VL Gothic しか選択肢が無かった
* プロボーショナルフォント（ブラウザ・LaTeX用）
    * M+フォント系：
        * Migu 1P
    * 源ノ角ゴシック系：
        * Noto Sans Japanese、Noto Serif Japanese
        * Source Han Sans Japanese、Source Han Serif Japanese

## 等幅フォントについて
等幅フォントの多くは、ASCII文字のフォントと日本語フォントを組み合わせたものになっている。（Takao を除く）上記のフォントにおけるASCII 文字のフォントと日本語フォントを以下に示す。

| 等幅フォント | ASCII フォント | 日本語フォント |
|:---:|:---:|:---:|
| Ricty | Inconsolata | Migu 1M |
| Ricty Diminished | Inconsolata | Circle M+ 1M |
| Source Han Code JP | Source Code Pro | Source Han Sans Japanese |
| PlemolJP | IBM Plex Mono | IBM Plex Sans JP |

プログラム用の ASCII フォントとして圧倒的に有名なのは Inconsolata だと思うが、Source Code Pro は Adobe が出したフリーのプログラム用フォントということで興味があったし、IBM Plex Mono だってそうだ。
だから Ricty, Source Han Code JP, PlemolJP の３種類を抑えることで、有名所は一通りカバーすることが出来るのかと思う。

ということで比較してみる。Nerd Font と合成して、[powerline-shell](https://github.com/b-ryan/powerline-shell) や [VIM Airline](https://github.com/vim-airline/vim-airline) を使った時の感触も見てみる。

![monospaced_fonts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/a7184b48-04f3-3a83-4d45-81ab9ba31aac.png)

* Source Han Code JP
    * デカイ！確かに見やすいが、スカスカになってしまう
    * 数字のゼロが、目玉になってるやつ（好きじゃない）
    *  `$`, `%` がブチブチだなぁ
    * 日本語で見分けが難しい文字（漢字の一と長音とか）の区別はあまり頑張ってない印象
    * Nerd Font との合成が何故か上手くいかなかった
    * 全角スペースをなんとかして欲しかった（←すごい便利なのよ）
* PlemolJP
    * 細長い！縦にミヨ〜ンって長い印象
    * PlemolJP35 だと半角：全角＝３：５なので、だいぶ丸い印象になるが、半角：全角＝１：２じゃないと長さが揃わなくて嫌な人なんだよ・・・
    * 数字のゼロが、目玉になってるやつ（好きじゃない）
    * 波括弧、大袈裟すぎじゃね？
    * `#` が真ん中で切れてるのが気になる
    * 全角スペースが四角い点線になるのは、悪くない 
* Ricty
    * 他のフォントに比べると、圧倒的に丸い。行間が狭く、同じ大きさの画面でも多くの行が見れるので、素晴らしい
    * ひらがな・カタカナ・漢字で見分けにくいものには、工夫が施されている（Migu の作者さんの努力だろう）
    * チルダの波がもっとグネグネしている方が分かりやすいのではないか（IBM Plex Mono ぐらいグネって欲しい）
        * ↑ 自分で置き換えるスクリプトを作った！
    * 半濁音が異様にデカイけど、可愛くて好き
    * 数字のゼロが目玉じゃない！（嬉しい）
    * 全角スペースが点線の丸になっているの、本当に助かる
* Ricty と Ricty Diminished の違い
    * Migu の作者さんの努力のお蔭か、最新の Migu だと見分けが付かない
    * Diminished は Nerd Font と合成するとずれがち
    * もはや Diminished の必要性を感じない

ということで、やっぱり俺は Ricty なんだなぁと感じた次第。

このために３日間ぐらいフォントについて考えたんだけど、結論はやっぱり Ricty。

Ricty は生成スクリプトが公開されているので、それで作ると、Discord バージョン（文字の雰囲気を壊してまで見やすさを優先するバージョン）が作れる。
この Discord で変更されるフォントは以下。

![discord.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/3656a941-74d4-26c3-59ec-ec252136966e.png)

上が普通の Ricty で、下が Ricty Discord。

* `07DZlrz` は飾りが付いたり消えたりする
    * `0` は本当は目玉になるはずだけど、なぜかならない
* `|` は途中で途切れる
* `"'｀^` は大きくなる
* `~` はちょっと上にあがる
* `,.:;` も大きくなる
* `*+-=<>` はちょっと下にさがる
    * 半角アルファベットとのバランスが良くなる

全部やるんじゃなくて、変更しないものを選ぶことが出来る。私は `07DZlrz|~` をやめた。
すると、特に `"',.:;` あたりの効果が大きく、かなり見やすくなったと感じた。

ということで、ボクの考えた最強の Ricty を作ることが出来るのである。やっぱり Ricty が好き。

## プロポーショナルフォントについて
プロポーショナルフォントは、仕事（プログラミング）では使わないので、問題がなければ特に気にしていない。 Noto Sans Japanese で良いんじゃないかな。
（ちょっと前まで Noto Sans CJK JP って言ってたはずだけど、いつの間に変わったのか）

一応比較する。

![propotional_fonts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/65127671-bc16-550e-5937-df20ea10a914.png)

* Megu 1P は、普段使うのにはマルッこ過ぎるので、ほっこりしたい時に使う感じか
    * 行間はやはりちょっと狭いけど、プログラムじゃない場合は逆に見づらいかな
* Noto Sans Japanese と Source Han Sans Japanese は、変わんないんじゃない？

ということで、やはり Noto Sans Japanese で良いんじゃないかという結論。

# フォントのリンク集
今までに挙げたフォントのリンク集。ご参考までに

* Noto Sans Japanese
    * [Noto Sans Japanese - Google Fonts](https://fonts.google.com/noto/specimen/Noto+Sans+JP)
* Noto Serif Japanese
    * [Noto Serif Japanese - Google Fonts](https://fonts.google.com/noto/specimen/Noto+Serif+JP)
* Source Code Pro
    * [Source Code - Adobe Fonts](https://fonts.adobe.com/fonts/source-code-pro)
    * [Source Code Pro - Google Fonts](https://fonts.google.com/specimen/Source+Code+Pro)
* Source Han Sans Japanese
    * [源ノ角ゴシック - Adobe Fonts](https://fonts.adobe.com/fonts/source-han-sans-japanese)
    * [adobe-fonts/source-han-sans: Source Han Sans | 思源黑体 | 思源黑體 | 思源黑體 香港 | 源ノ角ゴシック | 본고딕 - GitHub](https://github.com/adobe-fonts/source-han-sans)
* Source Han Serif Japanese
    * [源ノ明朝 - Adobe Fonts](https://fonts.adobe.com/fonts/source-han-serif-japanese)
    * [adobe-fonts/source-han-serif: Source Han Serif | 思源宋体 | 思源宋體 | 源ノ明朝 | 본명조 - GitHub](https://github.com/adobe-fonts/source-han-serif)
* Source Han Code JP
    * [adobe-fonts/source-han-code-jp: Source Han Code JP | 源ノ角ゴシック Code - GitHub](https://github.com/adobe-fonts/source-han-code-jp)
* Inconsolata
    * [Inconsolata Official WebSite](https://www.levien.com/type/myfonts/inconsolata.html)
    * [Inconsolata - Google Fonts](https://fonts.google.com/specimen/Inconsolata)
    * [googlefonts/Inconsolata: Development repo of Inconsolata Fonts by Raph Levien - GitHub](https://github.com/googlefonts/Inconsolata)
* Migu 1P, Migu 1M
    * [Miguフォント - M+とIPAの合成フォント](https://mix-mplus-ipa.osdn.jp/migu/)
* Circle M+ 1M
    * [M+を元にしたフォント - M+とIPAの合成フォント](https://mix-mplus-ipa.osdn.jp/mplus/)
* Ricty, Ricty Diminished
    * [プログラミング用フォント Ricty](https://rictyfonts.github.io/)
* IBM Plex Mono, IBM Plex Sans JP
    * [IBM Plex Official WebSite](https://www.ibm.com/plex/)
    * [IBM/plex: The package of IBM’s typeface, IBM Plex. - GitHub](https://github.com/IBM/plex)
* PlemolJP
    * [あの IBM が作ったオープンソース日本語フォントを使い、プログラミングフォント『PlemolJP』を作ってみた - Qiita](https://qiita.com/tawara_/items/0a7b8c50a48ea86b2d91)
    * [yuru7/PlemolJP: IBM Plex Mono と IBM Plex Sans JP を合成したプログラミングフォント PlemolJP (プレモル ジェイピー) - GitHub](https://github.com/yuru7/PlemolJP)
* Nerd Fonts
    * [Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher](https://www.nerdfonts.com/)
    * [ryanoasis/nerd-fonts: Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more - GitHub](https://github.com/ryanoasis/nerd-fonts)

# Rictyを生成するスクリプト

ちなみに私が作った、Ricty を合成したり、なんやかんやするスクリプトは以下。

https://github.com/tetutaro/dotfiles/tree/main/fonts

「ボクが考える最強の Ricty」を作るために私がやったことリスト

* 使ったもの
    * Ricty 生成スクリプト
        * Version 4.1.1 （2017年12月3日）
    * Inconsolata フォント
        * v3.001
        * 上記に示した repository より[コチラ](https://github.com/google/fonts/raw/main/ofl/inconsolata/static/)の方が新しそう
    * Megu 1M フォント
        * バージョン 20200307
    * IBM Plex Mono フォント
        * v6.0.0
        * こちらは [Google Fonts の repository](https://github.com/google/fonts/tree/main/ofl/ibmplexmono) より上記の本家 IBM Plex の repository の方が新しそう
    * Nerd Fonts
        * Nerd Fonts version: 2.1.0
        * font-patcher script version: 3.0.1
* 作り方
    * Discord 化しない文字（`-d` オプション）として `07DZlrz|~` を指定して Ricty フォントの作成
    * `os2version_reviser.sh` は、たぶん悪さをしないので、かける
    * 生成された中で、Discord フォント（４種類）の `~` を IBM Plex Mono の `~` と置き換える
        * IBM Plex Mono の `~` は、em を 840x160 とした上で、横幅だけ 90% に縮小し、幅を 500 に設定
    * 生成された８種類のフォントにすべて Nerd Fonts をマージするパッチをかける
        * ライセンス的にヤバそうな pomicon を除く全てのアイコンをマージ
        * `--adjust-line-height` オプションを付けて、追加するグリフの高さを揃える
    * 生成された１６種類のフォントのTTF名・ファイル名を整理する
        * 特に Nerd Fonts をマージしたフォントの名前は酷いことになるから
        * `Oblique` って、言いたいことは分かるけど、ぱっと見わかりにくいし、対応しないアプリとかありそうだから、思い切って `Italic` って変更した

こんな感じに出来たので、とりあえずは満足（またいじるかもしれない）

![スクリーンショット 2021-10-04 9.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/bdf396c9-3dfb-22a5-dc27-5e58be756c7f.png)