⬜

豆腐文字について詳しくなろう

に公開

本記事はデザインサークルdp9の有志で実施した駒場祭での出店「Tofu for You」のアドカレ、Tofu Advent Calendar 2025の6日目の記事です。
デザインサークルであり豆腐でありエンジニアであるということで今回は豆腐文字についてまとめていこうと思います。

1. 豆腐文字とは?

まず、豆腐文字について解説していきます。
豆腐文字こと通称「豆腐(Tofu)」は、正式な呼び方は.notdef (Not Defined) グリフで、テキストエンジンが文字コードを読み取った時に、フォントセットの中に描画するためのグリフデータが存在しない場合に表示されるフォールバック記号です。
文字化けと混同されることがよくありますが、あっちはエンコーディングの段階でバイト列の解釈ミスを起こしてデータそのものが化けている(例:譁?ュ怜喧縺)のに対し、豆腐はレンダリング段階で発生するもので、データは正しいけど表示するものがない時に表示されるもの(例:῿(環境によっては豆腐にならないことがあります))です。

2. 豆腐文字の歴史

次に、豆腐文字の歴史について見ていきましょう。

活版印刷時代の「ゲタ(〓)」

デジタル以前の活版印刷では、文選と呼ばれる文字を拾う工程の際に必要な活字が見当たらなかった場合、そのスペースを確保するために、活字を逆さま、つまり溝のある面にして版を埋め込んでいました。そうすると、印刷された紙には活字の足にある「太い2本の線」という形で溝が写ります。これが下駄の歯に見えることから「ゲタ」と呼ばれました。JIS X 0208には区点コード 1-2-14 に「〓(ゲタ記号)」が正式に登録されており、初期の日本語DTPにおいて欠字を表す記号として多用されていました。

GUI黎明期の「豆腐」の誕生

コンピュータにGUI環境が普及してくると、欠字の際のプレースホルダーとして、シンプルな四角がシステムフォントに採用され始めました。このタイミングでゲタから豆腐がメジャーな表示形式となっていきました。日本においては、文章中に四角い箱が点在する様子が、味噌汁に浮かぶ豆腐や、パック詰めされた豆腐に似ていたことから、自然発生的に「豆腐文字」というスラングが生まれました。

Unicodeの普及と「No Tofu」プロジェクト

2000年以降、Unicodeが普及して世界中の文字を一つの企画で扱えるようになると、標準フォントではカバーしきれないマイナー言語の文字を表示しようとして画面に豆腐が大量発生する現象が世界中で発生しました。
これに対処するため、GoogleとAdobeは「世界中のあらゆる言語の文字を網羅する」という目的のためにプロジェクトを開始いました。そして、2014年に"No Tofu"の願いを込めて「Noto (Noto Sans / Noto Serif)」を公開しました。このプロジェクトが公開された際に今まで日本のローカルスラングだった豆腐という名前が世界中に知られるようになり「Tofu」という世界エンジニアにとっての共通語彙となりました。

3. OpenTypeにおける仕様

OpenTypeの内部仕様、OpenType Specificationにおいて豆腐がどのように扱われているのかについても解説していきます。
OpenTypeフォントファイル内部では、グリフはGID (Glyph ID)と呼ばれるIDで管理されています。

The .notdef glyph is very important for providing the user feedback that a glyph is not found in the font. This glyph should not be left without an outline as the user will only see what looks like a space if a glyph is missing and not be aware of the active font’s limitation.

つまり、GID 0には必ず .notdef を配置しなければならないのです。
テキストレンダリングエンジンは以下のロジックで文字を表示します。

  1. 文字コード(例: U+3042 "あ")を受け取る。
  2. フォント内の cmap テーブル(Character to Glyph Index Mapping Table)を参照する。
  3. 対応するGIDが見つかれば、そのグリフを描画する。
  4. マッピングが存在しない場合、エンジンは例外なく GID 0 を返す。
    このことからわかるように豆腐とはプログラム関数の戻り値が0の時が可視化された姿です。

デザイン推奨仕様

.notdef の形状についても明確な言及があります。

  • 推奨: 空の長方形(□)、または中に「?」や「×」が入った長方形。
  • 非推奨: 渦巻き模様や独自のアイコンなど、ユーザーが「そういう文字だ」と誤認する恐れがある形状。
  • 非推奨: 空白(スペース)。文字抜けに気づけなくなるため。
    豆腐文字
    皆さんも豆腐文字の参考にして見てください。

4. まとめ

このように豆腐文字とは単なる表示エラーであるだけではなく、グリフが存在しない文字コードを無視せず表示するための最後の砦であり、フォントファイルのGID 0 という特等席に鎮座する特殊グリフです。
今では見る機会は限られていますが、今度見かけた際はその文字が一体どういう理由で豆腐になってしまったのか考えてみてください。
次回は、"No Tofu"を目標にして生まれたフォントについて解説しようと思います。お楽しみに!

Discussion