RictyフォントとRicty Diminishedフォントが正式にサポート終了となった話

2023年1月現在、Qiitaのコードブロックでも採用されている有名な日本語対応プログラミング用フォントの[Ricty](https://rictyfonts.github.io/)と[Ricty Diminished](https://rictyfonts.github.io/diminished)が、[2023年1月28日をもって「正式に」サポート終了しました](https://github.com/rictyfonts/rictyfonts.github.io/commit/331d9c076c3c45f1ffe97125eac7f532c5c6d1eb)。具体的には、配布ページの冒頭に、以下の文章が追加されています。

> Ricty および Ricty Diminished は、2010 年代前半には欧文・和文合成プログラミング用フォントとして先駆的でしたが、現在は前時代的な存在となっています。不具合もいくつか確認されています。良質なプログラミング用フォントが数多く登場していますので、それらの利用をおすすめします。

よって今後は、他のフォントを使用するのが良いでしょう。
[移行先の候補となるフォントの一覧](#それじゃあこれからは何のフォントを使えばいいの)もあるので、ぜひ確認してみてください。

## 経緯

RictyフォントとRicty Diminishedフォントは、プログラミング用フォントの1つであり、人気なフォントの1つです。

* [【初心者必見】プログラミング学習にオススメのフォント 7選](https://zenn.dev/nameless_sn/articles/best_fonts_for_programming)
* [全角スペースを可視化できるプログラミング用フォントの導入方法 \| パソコンスクールシースリー](https://www.c3web.jp/archives/kouza_naiyou/ricty_diminished)
* [やっぱり Ricty が好き \- Qiita](https://qiita.com/tetutaro/items/f895a2ecb1360206aaba)

しかしこのフォントには、バッククォートの表示がおかしくなるという、非常に有名な問題が存在します。

* [Ricty Diminished のバッククォートが被る問題 \- Qiita](https://qiita.com/take8/items/7614895bdf2282bd9dd6)
* [Backquote position is incorrect with Ricty Diminished font · Issue \#84648 · microsoft/vscode](https://github.com/microsoft/vscode/issues/84648)

しかし、これだけ多くの情報が見つかるにも関わらず、本家の配布ページにはこれに関する一切の情報が存在しませんでした。最後の更新も2017年12月以降途絶えており、事実上のサポート終了状態となっていました。しかし、「サポートが終了している」とは明記されておらず、現在の状況が全く不明なままでした。

これにより何が起きるのか？まだ維持されているのかどうかが曖昧なため、これに関する不具合は「フォントの配布元に連絡するべき」と返されてしまいます。

> Please contact the font developer, I believe this to be a problem with the font.
> https://github.com/microsoft/vscode/issues/84648#issuecomment-555094472

> Even if the problem really exists, it would be better to tell the original author to fix it. That way the fix will be available to all users using ricty on all platform, instead of the user using this formula.
> https://github.com/sanemat/homebrew-font/pull/52#issuecomment-636286462

フォントの不具合はフォント側が直すべきです。しかし、全く直っていませんでした。これほど周知されている不具合にもかかわらず、「既知の問題」にも記載されていません。

もしかすると、誰もが記事に書いているのに、**誰一人作者に連絡していないのでは……？**[そんな不安が頭に浮かびました](https://twitter.com/sounisi5011Prog/status/1617842766779932673)。~~誰も…作者に報告していないのである!!!~~[^誰も〜していないのである]

[^誰も〜していないのである]: [元ネタは『しあわせアフロ田中』という漫画](https://dic.nicovideo.jp/a/%E8%AA%B0%E3%82%82%E6%B6%88%E9%98%B2%E8%BB%8A%E3%82%92%E5%91%BC%E3%82%93%E3%81%A7%E3%81%84%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8B%21)。本当はそれっぽいネタ画像を貼りたかったが、[公式のジェネレーターがもう非公開になっている](https://nlab.itmedia.co.jp/nl/articles/2008/28/news124.html)ので権利的に危ないと考え断念。

そこで、少し前まで[この不具合の存在すら知らずにmacOSのせいにしていた](https://twitter.com/sounisi5011/status/1599694345611145216)私が、[変な使命感を燃やして](https://twitter.com/sounisi5011Prog/status/1617843920133836802)作者に報告したところ、上述した「お知らせ」が追加された、という流れになります。本当に誰も報告していなかったのかは不明ですが、作者の遊佐泰紀氏の丁寧かつ素早い返信を見るに、おそらく誰も報告していなかったのだろうと思います。

## なぜこの記事を書いたのか

RictyフォントとRicty Diminishedフォントの配布ページには追記されたものの、おそらくそれだけではこの情報は広まらないでしょう。なぜなら、既にRictyフォントやRicty Diminishedフォントは、各パッケージマネージャを用いて全自動でインストールする方法が確立されていたり、インストール方法の記事が多数存在するためです。

例えば、[Homebrewを用いてRictyフォントをインストールするためのCask](https://github.com/sanemat/homebrew-font)が存在し、[それを用いた導入方法の記事](https://qiita.com/segur/items/50ae2697212a7bdb7c7f)も書かれています。配布URLから直接ダウンロードしてインストールするプログラムが、配布ページのお知らせを読むことはありません。また、利用者も、配布ページの存在すら認識せずに導入するでしょう。

この記事の存在によって、RictyフォントとRicty Diminishedフォントがもはや維持されなくなった古いフォントであり、新しいフォントを用いるべきということが周知されて欲しいと説に願います。

## それじゃあ、これからは何のフォントを使えばいいの？

えっとですね、経緯に書いたように、私はRictyフォントの存在を最近知ったくらいのフォント素人で、プログラミング用フォントのオススメを出せるような立場では無いんですね……だから各々で調べて好きなフォントを選んで欲しいんですけど……
この記事を書くにあたって調べたり、ツイートした事をきっかけにしてフォントの情報が来てるので、以下に候補を列挙しておきます。

* [Source Han Code JP / 源ノ角ゴシック Code JP](https://github.com/adobe-fonts/source-han-code-jp/blob/master/README-JP.md)
* [M<sup>+</sup> M Type-1](https://mplus-fonts.osdn.jp/about2.html)
* [SF Mono Square](https://qiita.com/delphinus/items/f472eb04ff91daf44274)（macOS限定）
* [白源 / HackGen](https://qiita.com/tawara_/items/374f3ca0a386fab8b305)
* [Firge](https://github.com/yuru7/Firge)
* [PlemolJP](https://qiita.com/tawara_/items/0a7b8c50a48ea86b2d91)
* [UDEV Gothic](https://github.com/yuru7/udev-gothic)
* [VLゴシック](http://vlgothic.dicey.org/)
* [更紗ゴシック](https://github.com/be5invis/Sarasa-Gothic)
* [Hack Nerd Font](https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Hack)
* [Myrica](https://myrica.estable.jp/)
* [Cica](https://github.com/miiton/Cica)
* [Clematis](https://github.com/niki/mono-font-clematis)
* [Ricty Kana](http://newjapanese.blog.jp/archives/14540652.html)
* [IncoUDJP](http://www.structure.kais.kyoto-u.ac.jp/lab/photo.html#event22a)
* [Ricty ShinDiminished](http://www.structure.kais.kyoto-u.ac.jp/lab/photo.html#event22d)
* [Ricty Diminished（非公式版） by M6M2](http://www.structure.kais.kyoto-u.ac.jp/lab/photo.html#event22c)
* [MeiryoKe_Console](https://meir000.github.io/MeiryoKe/)（Windows限定）

他にもこんなフォントがある！という方は、コメントや編集リクエストで教えてくれるとありがたいです！

## それでもRictyを使い続けたい！

公式のサポートは終了したRictyとRicty Diminishedですが、これは「今後は不具合の修正などが公式では行われないと明記された」ことを意味します。逆に言えば、非公式で良いのであれば今後もRictyを使い続ける事は可能です。

Rictyフォントは生成スクリプトのみが配布されています。よって、生成スクリプトを自分の手で修正し、不具合を直した修正版Rictyフォントを生成してインストールすることはできます。例えば[HomebrewでRictyフォントをインストールするためのCask`sanemat/homebrew-font`](https://github.com/sanemat/homebrew-font)では、[`backquote-fix`オプションを無効化しない限りバッククォートに対するこのような修正処理が自動で行われます](https://github.com/sanemat/homebrew-font/pull/52)。

Ricty Diminishedフォントの場合も、配布されているフォントファイルを修正してインストールすれば問題なく使用できます。バッククォートのみ修正したものであれば、渡辺基暉氏が[RickyDiminished-Regular-fixedという形で公開済み](https://github.com/XxGodmoonxX/config-files/tree/409c45bcf20d1e993999df3bc7c9339cb070d01c/fonts)です。

このように、Rictyを改変し、**自己責任で使う**のであれば問題はありません。
ただし、それはRictyに含まれる不具合を理解し、自らフォントを修正し続けられるユーザのみが行うべきです。

例えば上述のバッククォートの不具合を用いると、バッククォートの数をごまかせてしまいます。2字以上重なったバッククォートをさも1字かのように見せたり、グレイヴ・アクセント付きのラテン文字と誤認させることができます。これを悪用すれば、**ユーザーの環境のRictyフォントに依存した表示環境（例：Qiitaのコードブロック）からコピペさせることで、SQLインジェクションが可能になってしまう**と考えます。インストールされているフォントなので、もしエディタでもRictyフォントを使っていた場合は、最後まで気づけないでしょう[^SQLインジェクション]。

[^SQLインジェクション]: もちろん、そのようなコードを確かめもせずコピペして使うのが悪いというのは正論です。バッククォートの数をごまかしてもSQLインジェクション用のコードはそのまま含まれているので、よく読めば察しがつくはずです。また、コードの色分けでも気付けるでしょう。しかし、何も知らない初心者が記事にあるままコピペしたり、納期に追われる開発者がよく読まないまま色分けも見落として使用したり、といった可能性は十分に考えられます。

Rictyは有名なフォントであるため、よく知らないユーザーがインストール方法の記事に従い導入しうるフォントです。この場合、バッククォートの問題などを知らない可能性があり（私もそうでした）、上述したリスクが生じる危険があります。

もし自分がRictyを使い続けた場合、同僚や後輩や生徒や知人や読者や視聴者やフォロワーとの会話で、普段使いしているRictyを紹介する機会があるかもしれません。その時に、**それが改変版のRictyであることを正しく伝達できるでしょうか**？伝えるその時に、**改変したRictyだということを確実に思い出せるでしょうか**？紹介した相手は、何も知らぬまま何の修正も行われていない公式のRictyをインストールしてしまう可能性があります。

このことから私は、Rictyを使用し続けるのは、たとえ理解している自分用であったとしても控えたほうが良いと考えます。

## 最後に：“サポート終了”というミスリード

<!-- このセクションは、先頭に移動してはならない（MUST）。あえて隠すことでミスリードを誘う、意図したダークパターンであるため。このセクションはミスリードの存在を認めるという誠意を示すためのもの。読者にミスリードを回避させるような改修はおこなってはならない。このミスリードは、世界への悪影響よりも、むしろ良い影響を与えると考えるため、ミスリードそのものの修正も現時点（2023年2月7日 23時）では考えていない。 -->

<details>

最後まで読んでいただき、誠にありがとうございます。ここまでしっかりと読んだ方や、フォントに詳しい方は、1つの疑問が浮かんだかと思います。

「“サポート終了”って、それは違うんじゃないか？」

はい、そうです。適切に書き表すならば「メンテナンス終了」ではないかと私も思っています。

OSやソフトウェアの「サポート終了」とは異なり、フォントファイルは、それ単体ではセキュリティ脆弱性の原因にはなりません。実行可能ファイルではありませんし、フォントの用途も非常に限られています。不具合があった場合は自ら修正して使うこともできますし、FontForgeなどを用いることで修正も容易にできます。メンテナンスが終了したからと言って、即座に危険になる、という事はないでしょう。上述したSQLインジェクションの可能性も、フォントの問題ではなくヒューマンエラーと言うのが適当です。

しかし私は、あえて“サポート終了”と表記することにしました。
これはミスリードを誘い、Rictyからの移行を促そうと考えたためです。

前述したように、Rictyは非常に有名なフォントです。数多くのインストール方法に関する記事が書かれ、プログラムを書き始めたばかりの初心者も使用するほどに。そうした大勢の利用者の全員が、Rictyのメンテナンスを行い続けられるわけではありません。そして、不具合を含んだ「公式のRicty」を使用してしまい、ヒューマンエラーを誘発してしまう可能性が高くなってしまいます。また、知らずにRictyを使用し、バッククォートを始めとしたRictyに起因する問題を他のソフトウェアに報告してしまうかもしれません。

「Rictyのサポート終了」という情報を見て慌て、移行を考えるユーザーが増えれば、この問題は減っていくはずです。別のフォントやRictyのforkに移行することで、メンテナンスされない公式のRictyを使うことによる問題はなくなるでしょう。

そして、もはやメンテナンスされないRictyを自ら修正できる程のユーザーであれば、このミスリードを見抜き、冷静になって、こだわりのRictyを使い続けると思います。

</details>