グリフは「文字の見た目そのもの」
グリフ(glyph)は、ざっくり言うと画面や紙に実際に描かれる文字の形のことです。プログラミングやターミナルの話をしていると、たまに「このフォントにそのグリフが入っていない」「グリフが豆腐になる」といった言い回しが出てきます。最初に聞いたときは何のことか分からないと思うんですが、意味自体はシンプルで、「その形の絵が用意されているかどうか」の話をしています。
コンピュータの中で、文字は「これは○番の文字」という番号として扱われています。でも番号のままでは人間には読めないので、表示するときにその番号に対応する形を引っ張ってきて描きます。この「形」がグリフです。
ハンコの例で考える
昔の活版印刷を想像してみてください。「あ」という文字を刷りたいとき、職人さんは「あ」の形が彫られた金属のハンコ(活字)を箱から探してきて、並べて印刷しました。
このとき、「あという文字である」という情報と、「実際に彫られたあの形」は別物です。明朝体のハンコとゴシック体のハンコでは形が全然違いますが、どちらも「あ」という文字を表しています。この「実際に彫られた形のほう」がグリフにあたります。
そして重要なのが、箱の中にそのハンコが無ければ印刷できないということ。フォントで「グリフが無い」というのは、まさにこの状態です。
「豆腐」が出るのはグリフが無いから
ターミナルやエディタで、文字が □ のような四角い箱になって表示されることがあります。これは俗に「豆腐」と呼ばれる状態です。
つまり文字データ自体はちゃんと存在していて、壊れているわけではありません。ただ今使っているフォントに、その形が収録されていないだけです。だからフォントを変えると、同じテキストがちゃんと読めるようになることがあります。ここを勘違いして「データが壊れた」と焦る人は結構多いです。
文字とグリフは一対一じゃない
ややこしいのが、文字とグリフは必ずしも1個ずつ対応するわけではない点です。
- 同じ「A」という文字でも、フォントを変えればまったく別の形のグリフになる
- 逆に、複数の文字がくっついて1つのグリフとして描かれることもある(合字と呼ばれます)
プログラミング用フォントで => や != が矢印っぽい記号や「≠」に見える形で表示されるものがありますが、あれは合字の一例です。テキストとしては = と > の2文字のままなので、コピーすれば普通に2文字として貼り付けられます。見た目だけが繋がっている、というわけです。
アイコンもグリフとして入っている
ターミナル用のフォントには、フォルダやGitのブランチを表すアイコンなど、本来の文字ではない記号がグリフとして追加されているものがあります。こういうフォントを入れておくと、ターミナルのプロンプトやツールの表示がリッチになります。
逆に言うと、そういうフォントを入れていない環境で同じ設定を使うと、アイコン部分がごっそり豆腐になります。「先輩の画面ではきれいに出ているのに自分の画面だと文字化けする」というのは、だいたいこれが原因です。
覚えておくと得すること
グリフという言葉が出てきたときは、「中身のデータ」ではなく「表示される形」の話をしていると読み替えれば、たいてい意味が通ります。表示がおかしいときは、まずデータではなくフォントを疑う。これだけ覚えておくと、無駄に慌てずに済みます。
このページは役に立ちましたか?