はじめに

12 月 1 日に書いてますがアドベントカレンダーでもなんでもないただの記事です。

Glyphs 形式のフォントと UFO のフォントの仕様が違くて何かと扱いづらいという話です。

Glyphs 形式

Glyphs を使ったことがある人はわかると思いますが、新しいグリフを作る時には、フォントにグリフを追加します。

これだけ見ると、至極当然のように思えます。では、新しく同じ文字のボールドを作りたいときはどうすればいいでしょう?

フォント直下に同じ文字のレギュラーとボールドが存在していてはウエイト間の関係性が薄れてしまいます。

そのため Glyphs では最初に新しいグリフを追加した際にグリフという概念の元にレギュラーのレイヤーが自動で追加されます。そしてグリフ名や Unicode などの文字情報はグリフに納められ、字形はレイヤーに納められるのです。

ボールドを追加したい時には、このグリフの元にボールドという新しいレイヤーを追加すれば良いのです。

つまり、階層構造は以下のようになります。

Font
┣ Glyph01
┃ ┣ Layer01
┃ ┗ Layer02
┗ Glyph02
  ┣ Layer01
  ┣ Layer02
  ┗ Layer03

ここではあえて Glyph01Glyph02 で持っているレイヤーが異なる例を出しましたが、このようなことができてしまう仕様が Glyphs 形式です。

これは次に紹介する UFO との決定的な違いになるので覚えておいてください。

UFO

UFO は特定のアプリの形式などではなく XML を用いた仕様です。

UFO でフォントを 1 つのフォルダとして表現されます。そして、フォント直下に来るのはレイヤーです。このレイヤーもまたフォルダとして表現されます。ではグリフはというと、レイヤーのフォルダの中に 1 文字 1 文字がファイルとして保存されています。

なのでレイヤーを追加したいときはフォルダを、グリフを追加したい時には、追加したいレイヤーにファイルを追加します。

つまり、階層構造は以下のようになります。

Font
┣ Layer01
┃ ┣ Glyph01
┃ ┗ Glyph02
┗ Layer02
  ┣ Glyph01
  ┣ Glyph02
  ┗ Glyph03

レイヤーごとに持っているグリフ数が異なってしまいますね。UFO ではこのようなことがありえてしまいます。

比較

階層構造

それぞれの階層構造を見てみましょう。

Glyphs          UFO

Font            Font
┣ Glyph01       ┣ Layer01
┃ ┣ Layer01     ┃ ┣ Glyph01
┃ ┗ Layer02     ┃ ┗ Glyph02
┗ Glyph02       ┗ Layer02
  ┣ Layer01       ┣ Glyph01
  ┣ Layer02       ┣ Glyph02
  ┗ Layer03       ┗ Glyph03

形は似てますが、レイヤーとグリフの関係性が真逆です。これが原因で相互の絶妙な扱いづらさが生じてしまいます。

もちろん Glyphs の機能でも UFO は扱えますし Python のライブラリでも相互変化をできるものがあります。ただ、この構造の違いにより扱いやすい状態での互換は取れません。

どっちがいいのか

これは難しい話です。どちらにも良いところと悪いところがあります。例えば OTF などのフォントファイルは各ウエイトごとにファイルがあってそれぞれグリフがあるので UFO の階層構造は直感的な気がします。しかし UFO では共通する文字情報があっても、レイヤーごとに重複して持たなければなりません。

そう考えると Glyphs の形式は効率が良さそうです。ただ文字ごとに持っているレイヤーが異なったりフォントファイルと構造が違うため直感に反する気がします。

どっちもどっちですね。

おわりに

個人的には UFO の形式の方が好きなのですが Glyphs の構造の思想もすごくよくわかるので難しいところです。使ったことはないですけどバーチャルマスターとかは Glyphs の構造ならではな気がします。