Open1

Noto Sans JPなどのWebフォントを一部だけ切り出してファイルサイズを小さくするメモ

yamadashyyamadashy

やりたいこと

特定のフォントファイルの使う際に、どの文字を使うかが決まっている場合に、その文字だけに絞る。
Noto Sans JPなど、ファイルサイズが大きい場合などに有用。

これをサブセット化という。

使うツール

python の fonttools を使う。コマンドで実行できる。
https://github.com/fonttools/fonttools

調べてみると様々なツールがあるが、コマンドで実行できるほうが数年後にアプデしたくなったときなどにも使える可能性が高く手順も思い出しやすいので個人的には運用しやすく感じる。

手順

fonttools インストール。pipがない場合はpythonをまずインストールしておく。

$ pip install fonttools

pyftsubset というコマンドが実行できるようになる。

pyftsubset に --text で渡すと、列挙した文字だけに絞ってくれる。
文字をファイルにして --text-file で指定も可能。

コマンドにすると以下のようになる。

pyftsubset NotoSansJP-Medium.ttf \
  --text=┬└├│ \
  --layout-features="*" \
  --output-file=SlackChannelsGrounping-NotoSansJP-Medium.ttf

shファイルにしておくことで、今後の更新もしやすい。

build.sh
#!/bin/bash

pyftsubset NotoSansJP-Medium.ttf \
  --text=┬└├│ \
  --layout-features="*" \
  --output-file=SlackChannelsGrounping-NotoSansJP-Medium.ttf

具体例

実際に使っている例
https://github.com/yamadashy/slack-channels-grouping/tree/main/tools/font-builder

Noto Sans JP は元々5.4MBあるが、この4文字だけに絞れば4KBまで削れる。