0
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?

More than 5 years have passed since last update.

ElectronでのWebフォントのキャッシュについて

Posted at

モチベーション

Electronで作るアプリでも、Google FontのようなWebフォントが使いたい。この場合、どうやって指定するのが良いのか?例えば、指定の仕方として次の候補が考えられる

  • 方法1:Web fontをダウンロードしてアプリに同梱する。使用するときはCSSの@font-facesrc: url('./font/FONTNAME);などの様に同梱したファイルを相対パスで指定。
  • 方法2:レンダラープロセスのHTMLのheadにて<link href="https://fonts.googleapis.com/css2?family=FONTNAME&display=swap" rel="stylesheet">で読み込む
  • 方法3:CSSの先頭で、@import url('https://fonts.googleapis.com/css2?family=FONTNAME');で読み込む

この中で、Electronアプリとしてベターなものはどれだろう。

Electronアプリに求めるもの

上の「ベター」とは、そもそもElectronでアプリ化する時点で、次ことを要求しているのではないだろうか

  • ローカルPCでの起動を目的としている。
  • オフラインでの使用も視野に入れている

オフラインを想定した時、最初は方法1(ダウンロードして同梱)しか解が無いと思っていた。ただ、フォントの同梱は、次の問題もある

  • フォントの再配布に関するライセンスの問題(Google fontは再配布OK)
  • アプリのパッケージサイズが大きくなる
  • アプリの見た目(テーマ)をCSSでカスタマイズやユーザー定義できるようにしたい場合、未同梱のWebフォントを使うにはどうするか

ただでさえファイルサイズが大きいと揶揄されるElectronアプリがさらに大きくなるのは困る人も多そう。

また、リッチテキストエディタやビューアなどを作っている時は、三番目のテーマのCSSカスタマイズなどもやりたいでしょう(少なくとも私の開発しているエディタではやってみたい)。すると、フォントの同梱では必ずしも解決しない。さらに、このテーマのカスタマイズに関しては、方法2(linkタグで指定)を行うのは、カスタマイズに合わせてDOMを操作しないといけないので、あまり好ましくない。

となると、消去法で方法3が残る。

ElectronアプリでもWebフォントのキャッシュが効く?!

方法3(CSS中で@import)でWebフォントを指定する場合、初回起動時にオフラインだと確かにフォントが読み込めず、代替フォントでの表示になってしまいます。ただ、(初回に限らず)オンラインで一度でもWebフォントを読み込めた場合は、Electronアプリでもフォントのキャッシュが残るようで、以後の起動ではオフラインでもWebフォントが使えるようです。そして、OSの再起動をしてもこのキャッシュが有効のまま生きています。

とりあえず動作確認した環境

  • Windows10 (1909)
  • Mac OS 10.14.6

ただし、フォントをキャッシュしている仕組みは理解していません。OSのキャッシュなのか、Chromiumのキャッシュなのか、Chromeのキャッシュと共通なのか、アプリごとに独立したキャッシュになっているのか。OS再起動ではどうなるのか。詳しい人がいたら教えてほしいです。

結局

この時代、完全にオフラインではなく、オンラインの状態での起動もあり得る、と割り切れるなら、Electronアプリにおいて@importでWebフォントを読み込ませてしまっても大丈夫かもしれません。

皆さんがどうしているか、是非コメント欄にでも情報共有いただけると勉強になります。

0
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
0
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?