あの IBM が作ったオープンソース日本語フォントを使い、プログラミングフォント『PlemolJP』を作ってみた

(2021/08/07) Nerd Fonts 対応版となる v0.2.1 をリリースしました。

---

こんにちは。
以前 [HackGen](https://qiita.com/tawara_/items/374f3ca0a386fab8b305) というフォントを公開した人です。

先日、IBM がリリースしたオープンソース日本語フォント「IBM Plex Sans JP」が素敵だったので、同 IBM Plex シリーズの「IBM Plex Mono」と組み合わせた、プログラミングフォント『 **PlemolJP (プレモル ジェイピー)** 』を製作・公開しました。

***Ple***x ***Mo***no ***L***anguage ***JP*** の頭文字を取っています。
なんだか美味しそうな名前ですよね🍺

# PlemolJP (プレモル ジェイピー) の特徴

- IBM Plex Sans JP 由来の **懐が広く読み取りやすい日本語文字**
- IBM Plex Mono 由来の **判読性に優れた英数字**
- **全8種類** の豊富なウェイト
- IBM Plex Sans JP では用意されていない **イタリック体** を提供
  - IBM Plex Mono のイタリック体は独自字体となっているため英数字部分がお洒落
- **全角スペースを可視化**
- SIL Open Font License (OFL) 適用で、 **商用・非商用問わず利用が可能**

IBM Plex シリーズは読みやすさにこだわり抜かれた書体であるため、プログラミングに限らず執筆などでも使いやすいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164949/ceb67c9f-a104-65ad-6455-06f7da01f2ea.png)

# フォントファミリーの種類

|     **フォント ファミリー**     | **説明**                                                                                                           |
| :--------------------: | :--------------------------------------------------------------------------------------------------------------- |
|      **PlemolJP**      | 文字幅比率「半角1:全角2」の通常版の PlemolJP。主にASCIIコードの英数字記号に IBM Plex Mono の字体を使い、その他の記号類やかな文字・漢字を IBM Plex Sans JP にしている      |
|  **PlemolJP Console**  | IBM Plex Mono の字体を除外せずに全て適用したフォントファミリー。矢印記号などの多くの記号が半角で表示されるため、コンソールでの利用や記号類は可能な限り半角で表示したい人にオススメ                 |
|     **PlemolJP35**     | 通常版の PlemolJP の文字幅比率を「半角3:全角5」にしたフォントファミリー。英数字が通常版の PlemolJP よりも大きく表示される。日本語が少ない文書やコードの場合にはこちらの方が読みやすいと感じるかもしれない |
| **PlemolJP35 Console** | PlemolJP Console の文字幅比率を 半角3:全角5 にしたフォントファミリー                                                                    |

# ダウンロード

GitHub のリリースページからダウンロードできます。
各リリースノートの下部にある `Assets` という箇所を開くと、zip ファイルをダウンロードできます。

> ✅ `PlemolJP_HS_vx.x.x.zip` になっているものは全角スペースを可視化しない版（HS: Hidden Space）
> ✅ `PlemolJP_NF_vx.x.x.zip` になっているものは Nerd Fonts 対応版（NF: Nerd Fonts） Powerline を始めとした多くのアイコンが表示できます。 ※Console 版のみの提供

ダウンロード⏩ [Releases](https://github.com/yuru7/PlemolJP/releases)

気に入ったら GitHub でも Star🌟 を付けてもらえると大変嬉しいです！

# 謝辞

IBM Plex シリーズを提供してくださっている IBM 社へ、この場を借りてお礼申し上げます。

# IBM Plex Sans JP は優れたフォント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164949/93d592df-8d0c-aed5-58fa-ca9276075dcc.png)

業界人なら誰もが知る IBM、実は以前からオープンソースフォント「IBM Plex」シリーズを公開していました。 
ちなみに [IBM Plex コンセプト](https://www.ibm.com/plex/concept/) に掲載されているメッセージが素敵です。（原文は英語）

> IBMは常に人類と機械の間の媒体としての役割を果たしてきました。自然と設計の間。感情的で合理的。クラシックで最先端。私たちの最も重要な仕事は、人類と技術が共に前進するのを助けることです。 IBM Plex®は、レターフォームを通じてこれらの関係を実現します。

このシリーズは2018年頃にリリースされ着々と多言語に対応してきましたが、日本語版である「IBM Plex Sans JP」はつい先日、2021/7/24 にやっとリリースされたのでした。

源ノ角ゴシックというオープンソース日本語フォント界のビッグネームが君臨する今、IBM Plex Sans JP がユーザーからどういった反応を受けるものかと少々心配していましたが、ネット上の反応を見るに好意的に受け止められている印象でした。

実際使ってみると、文字幅・高さをいっぱいいっぱいに取って描かれた読みやすい文字群で、M+ FONTS を彷彿とさせる美しい字体であることが分かります。特に Thin ウェイトはモダンさが際立っていて、ポスターにでも使われていそうな上品な印象を受けました。

## だけどプログラミング用途としてはもう一歩

実は IBM Plex Sans JP が出てくるより以前から IBM Plex シリーズの読みやすい等幅英字フォント「IBM Plex Mono」が気になっていました。そのため IBM Plex Sans JP もプログラミング用途でも使えることを期待していたのですが、以下の理由からプログラミングには不適当だと判断しました。

- 読み間違えやすい英数字をもう少し差別化してほしい
- そもそもプロポーショナルフォントしか用意されていない

こういったオープンソース書体、しかも IBM が作っているともなればスタンダード性が求められるところがありますから、上記のような状況が出てくるのは予想の範疇でした。
**…が、どうしても IBM Plex Mono が使いたい…！折角、ウェイトも IBM Plex Mono のように豊富なのに…！**

そうした想いから、PlemolJP を作成・公開しました。

ちなみに HackGen の製作ノウハウもあり、IBM Plex Sans JP 公開の翌日には試作品の公開に至りました。
雑でも一旦公開すると品質が気になってくるので、サボらずに数日アップデートでき、数年メンテしている HackGen にも負けず劣らずな出来映えになったかなーと思っています。（更新が頻繁でごめんなさい…なところもあるのですが）

# 本家には無いこだわり

HackGen で培ったノウハウや個人的なこだわりから、以下の点を独自に改変しています。

- 英数字部分にヒンティングを付与する
- 全角スペースを可視化
  - ウェイトが豊富なことでプログラミング用途以外にも使いやすいため、可視化しない版も用意
- 半角 `;` `:` `,` `.` をほんのり大きくする
- 英数字の字体が変わるイタリック体 (IBM Plex Sans JP にはイタリック体が用意されていない)

# 生成に使ったツール類について

以下の環境で生成しています。すべてフリーのツールです。

- OS: Kubuntu 20.04
- ttfautohint: `sudo apt install ttfautohint`
- fonttools: Python 2 の pip で `sudo pip2 install fonttools`
  - fonttools に含まれるサブツール `pyftmerge` と `ttx` をコマンドとして利用している
- fontforge: [公式サイト](https://fontforge.org/en-US/downloads/) よりダウンロード

fontforge はスクリプトで扱うことができます。言語は python、fontforge 独自言語から選べます。

fontforge 独自言語で HackGen や PlemolJP のビルドスクリプトは書いていますが、新規でやるなら python の方が使い勝手がいいと思います。fontforge 独自言語もよく出来ているのですが、動的配列が扱えなかったりと後々苦労しますので…。

## 表示検証に便利なテキストエディタ

私が文章をしたためる際によく使うテキストエディタで、「Mery」(対応OSは Windows のみ) というフリーソフトがあります。こちらのソフト、珍しいことに **フォントファイルを直接読み込む機能** が搭載されています。

本来は、「エディタもフォントもインストール不要でポータブルに使える！」という仕組みの1つだと思うのですが、実はフォントデバッグで便利に使えます。
「フォントを生成→差し替えて確認」の作業フローでは、Windows にフォントをインストールを繰り返すことになります。そうすると意図せずゴミファイルが残ることがあり、そうなると解消が面倒になるので当機能を使ってこの確認作業を行っています。

ちなみに使い方は、`Mery.exe` が置かれているフォルダに `Fonts` フォルダを作成し、その中にフォントファイルを配置するだけ。あとはいつものように Mery のフォント設定で選べるようになります。

フォントデバッグ用途でなくとも、VSCode のようにマルチカーソルが扱えたり (v3.0.4 以上のみ) と、フットワークの軽い軽量エディタとして大変優秀です。

- Mery ダウンロード
  - 最新版 (Beta): [作者HP](https://www.haijin-boys.com)
  - 安定版: [窓の杜](https://forest.watch.impress.co.jp/library/software/mery/)