3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お久しぶりです。
アドベントカレンダー以外での投稿です。

とある案件で時間を表示するWebアプリを作っていたのですが、その時に独自のフォントを使うことになり、
これがなかなかのデータサイズだったのでフォントのサブセット化を行いました。

その時に調べたことをまとめます。

作っていたアプリ

数字で時間を表示するアプリです。
ここに独自のフォントを当てます。

イメージ図
スクリーンショット 2024-04-11 16.21.00.png

使用するフォントは以下の通りです。
0123456789:

サブセット化前のサイズ

とりあえずサブセット化しない状態で、使ってみます。
※ 案件で使っているフォントは見せられないので、 たぬき油性マジック で代用します。

計測
スクリーンショット 2024-04-11 15.59.55.png

時計を表示するだけなのに フォントファイルだけで 8.8MB あります。
デカすぎる。

サブセット化

フォントのサブセット化を行います。
fonttools というものが良さげだったのそれを使うことにしました。

インストール

poetry でインストールします。

$ poetry add fonttools

サブセット化したフォントファイルを作成

fonttools のコマンドでサブセット化を行います。

$ poetry shell
$ pyftsubset ./TanukiMagic.ttf --text=0123456789: --layout-features='*' 
// TanukiMagic.subset.ttf というファイルが生成される

サブセット化後のサイズ

サブセット化したフォントファイルをWebアプリに当てて再度計測します。

計測
スクリーンショット 2024-04-11 16.09.18.png

サブセット化後は 8.8MB から 6.6KB になりました。
いい感じです。

さらなる高みへ

サブセット化したフォントファイルをさらに圧縮することもできます。
woff2 に変換をすることでファイルサイズをさらに小さくすることが可能です。

インストール

fonttools と別途 brotli をインストールします。

$ poetry add fonttools
$ poetry add brotli

サブセット化したフォントファイルを作成(woff2)

サブセット化しつつ、 woff2 に変換します。

$ poetry shell
$ pyftsubset ./TanukiMagic.ttf --text=0123456789: --layout-features='*' --flavor=woff2
// TanukiMagic.subset.woff2 というファイルが生成される

woff2 化後のサイズ

woff2 化したフォントファイルをWebアプリに当てて再度計測します。

計測
スクリーンショット 2024-04-11 16.10.15.png

3.2KB とかなり軽量になりました。

woff2 の注意

一部ブラウザやバージョンによっては woff2 がサポートされていない場合があるので、その辺りは確認しておくと良いです。
参考: https://caniuse.com/?search=woff2

まとめ

フォントのサブセット化を行うことでフォントファイルを軽量化することができました。
また、さらに woff2 に変換することでファイルサイズをさらに小さくすることができました。
フォントサイズにお困りでしたら、ぜひ試してみてください。

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?