No more Tofu!

このページは「福岡大学情報基盤センター」のWebサイトにある「情報の糧(平成30年5月)」に寄稿したものと内容が同じです。

コンピュータで用いられる「文字」についての深い議論を含みますので,時間の許すときにゆっくりお読みください。

「見出し要素」(h1, h2, h3, 等々)に連番を自動付与する仕組みは responsive.css の中で規定しています。

このページで紹介している Noto フォントのうち「線文字B,繁體字简化字한글の一部,日本語の漢字・ひらがな・カタカナ」については「Webフォント」技術を用いてこれらの文字が表示される仕組みにしてあります。設定は noto.css で行っています。

Noto のうち「ロシア語(キリル文字),ギリシア語(ギリシア文字),ヘブライ語(ヘブライ文字),中国語,朝鮮語」箇所と,「IPAmj明朝フォント」を使った箇所は画像です。

仮にこれらを全てWebフォントで処理させると,このページ全体を表示させるのにとても長い時間がかかってしまいます。

このページでは,ブラウザの表示幅がせまくなった際に現れる「3本線アイコン」はわざとアニメーションさせない設定にしてあります。本ページのHTMLソース no_more_tofu.html を例えば multilang.html と比較して,どこの記述に異同があるのか確認してみてください。



No more Tofu!

Google によって開発が進められているオープンソースの巨大なフォントファミリ,それが Noto です。フリーですから誰でも自由に無償で使えます(SIL Open Font License に従います)。

Noto は2018年5月現在,ユニコード・バージョン10.0(2017年6月発布)で定義される全136,755文字のうち約64,000字をカバーしており,CJKChinese/Japanese/Korean)統合漢字の一部を除けば,ユニコード・バージョン6.0(2010年10月発布)に含まれる全スクリプト(テキスト表記のための文字集合)が使えるレベルに達しています。Noto には特定のスクリプトに分類されない Emoji(携帯電話端末における 😂 や 😱 など日本発の「絵文字」は全世界に普及し,2010年にはユニコード・バージョン6.0の中に取り入れられました)のような文字も含まれています。

さて,皆さんはテキストを端末のディスプレイに表示しようとした際,文字の代わりに四角いボックスが表示されてしまうという経験をされたことはありませんか? この現象は当該文字を含むフォントがシステムにインストールされていないことに起因するのですが,こうしたボックスは俗に「トーフ」(豆腐)と呼ばれています。次の例を御覧ください。

紀元前1500年から紀元前1200年頃ギリシア本土およびクレタ島で使われていたミケーネ・ギリシア語を表記する線文字Bでは,牡ウシは 𐂍 牝ウシは 𐂌 牡ヤギは 𐂉 牝ヤギは 𐂈 牡ウマは 𐂃 牝ウマは 𐂄 牡ブタは 𐂋 牝ブタは 𐂊 でそれぞれ表されていた。Noto を使わない場合

Noto をお持ちでなければトーフが出現していることと思います。そして Google による Noto 開発の目標は,これら「トーフを失くす」(No more Tofu)ことなのです。

紀元前1500年から紀元前1200年頃ギリシア本土およびクレタ島で使われていたミケーネ・ギリシア語を表記する線文字Bでは,牡ウシは 𐂍 牝ウシは 𐂌 牡ヤギは 𐂉 牝ヤギは 𐂈 牡ウマは 𐂃 牝ウマは 𐂄 牡ブタは 𐂋 牝ブタは 𐂊 でそれぞれ表されていた。Noto を使った場合

目次に戻る

1つのトーフにも5桁のユニコード

上のトーフの例では分かりにくいのですが,これらのトーフは実はそれぞれが互いに異なっています。HTMLソースを GNU Emacs(フリーでクロスプラットフォームのテキストエディタ)で開き,当該箇所を確認してみますと,図1のように各トーフにはコードポイント(ユニコード文字集合の中における当該文字の符号位置)が16進数で振られていることが分かります。

Tofu on Emacs
図1: Emacs 上のトーフ

Emacs はフル・ユニコード・サポートのアプリケーションソフトですから,例えば「線文字Bの牡ウシ」文字のコードポイントは16進数で 1008d,10進数で 65677,8進数で 200215 であることも分かります。Emacs では Ctrl x 8 キーを打った後 Enter キーを叩き,続けて当該文字の16進数コードもしくはユニコードによる正式名称 LINEAR B IDEOGRAM B109M BULL を打ち込むことで全ユニコード文字を入力できるようになっています。出力には,しかし,当該文字を含むフォントが必要です。図1の Emacs では Noto を設定していなかったためこのようにトーフが現れてしまいましたが,Emacs に正しく Noto を設定してやれば線文字Bも正しく表示されるようになります。

目次に戻る

Pan-Language Harmony

たとえば Noto Color Emoji の使用は Linux(Android も含む)上に限られ,Windows と Mac では使えない(白黒の Noto Emoji でしたら Windows や Mac でも使えます)とか,欧文フォントの基本ファミリ(書体)であるセリフ体とサンセリフ体の双方に対応する Upright や Italic シェイプはあるものの,専用にデザインされた Small Caps シェイプは存在しないとか,現時点で少々の瑕疵がなくはないとは言え,それでも Noto は画期的な素晴らしいフリーのフォントです。特に,統一されたフォントデザインから来る多言語混在時の「多文字種間の視覚的調和美」(Pan-Language Harmony)は特筆ものです。図2は『創世記』1:1 のテキストを Noto を使って英語(ラテン文字),ロシア語(キリル文字),ギリシア語(ギリシア文字,アクセント・気息記号も含む),ヘブライ語(ヘブライ文字,右から左書き,ニクード記号も含む),中国語(繁體字および简化字),日本語,朝鮮語(한글)で混在表示させたものです。

Pan-Language Harmony
図2: Pan-Language Harmony

CJK に関しては 简化字として GB 18030(「信息技术中文编码字符集」)および「通用规范汉字表」の漢字全て,繁體字として Big5(台湾)および HKSCS(香港)の漢字(「教育部國字標準字體」)全て,朝鮮語では各種ハングル(한글)および KS X 1001 と KS X 1002 の漢字全て,日本語では平仮名・片仮名をはじめ Adobe-Japan1-6(JIS X 0208 と JIS X 0213 および JIS X 0212)の漢字全て,がセリフ体(明朝体)およびサンセリフ体(ゴシック体)の2種で,しかも,7種類のウェイト(文字の線の太さ)で用意されているという充実ぶりです。

目次に戻る

CJK 統合漢字

さて,情報交換用の世界中の文字に関する国際標準となっているのが「世界標準符号化文字集合」(UCS: Universal Coded Character Set)です。UCS は情報処理用の業界規格であるユニコードと互換ですが,「複数の異なる字形に対して1つのコードを与える」場合があり,これを「統合」(JIS の用語では「包摂」)と呼んでいます。たとえば日本の JIS X 0213 に規定されている「骨」という漢字はコードポイントが16進数で 9aa8 となっていますが,同じコードポイントを持つにも拘らず简化字繁體字ではそれぞれ字形が異なっています。このことから「骨」という文字は「CJK 統合漢字」(CJK Unified Ideographs)と呼ばれます。図3を御覧ください。

Sample of CJK Unified Ideographs
図3: CJK 統合漢字「骨」

意味的な情報交換を旨とする場合,UCS によるこの措置は十分理に適っています。しかし私達が実際に漢字を使うとき,それは意味的な情報交換を超えたレベルで行われることがあるのも事実です。具体的には,ある特定の字形選択には歴史に裏打ちされた地域の独自性や個の尊厳といったものまでが反映していることが少なくありません。次の例を御覧ください。

外と田百は,奈良県葛󠄀城市から上京した森外と田百と合流して,東京都飾区の台にある島屋で買物を楽しんだ後,田横丁にある𠮷野屋で牛丼の大盛を平らげた。Noto を使った異体字の表示

いわゆる「異体字」の問題です。

目次に戻る

異体字符号列

UCS(ユニコード)は,既存の様々な規格を取り込み拡張してきたという歴史的経緯のゆえに,コードポイントの付与に関して色々な内部不整合を抱えています。

たとえば上の異体字の例で「鷗」(9dd7)・「鴎」(9d0e),「內」(5167)・「内」(5185),「閒」(9592)・「聞」(805e),「高」(9ad8)・「髙」(9ad9),「吉」(5409)・「𠮷」(20bb7)はそれぞれ一意のコードポイント(カッコ内に16進数を記しておきました)が振られている別字となっていますが,「葛」(845b)と「葛󠄀」(845b)は「統合」(包摂)されているため文字コードとしての区別がありません。では,「葛・葛󠄀」の各々の字形を正確に使い分けたい場合,どうすれば良いのでしょうか?

こうした問題を回避するため UCS では「字形選択子」(VS: Variation Selector)を定めています。「葛」の例で言えば,コードポイント(845b)の後に異体字を特定するための字形選択子 e0100 を付すことにより「葛」の異体字「葛󠄀」を正確に指定できるようになる,という具合です。コードポイントと VS を組み合わせた全体は「異体字符号列」(IVS: Ideographic Variation Sequence)と呼ばれ,IVS は「異体字と VS の対応関係」(これを「コレクション」と言います)を定めたデータベース(IVD: Ideographic Variation Database)に登録して利用することが UCS で決められています。2018年5月現在,この IVD には Adobe-Japan1, Hanyo-Denshi, KRName, MSARG, Moji_Joho という5つのコレクションが登録されています。

Adobe-Japan1(2018年5月現在での最新バージョンは Adobe-Japan1-6)は主に出版・印刷業界で用いられている規格で,先にも書きましたが,Noto は Adobe-Japan1-6 の全文字(23,058字,うち漢字は14,667字)をカバーしています。日本語の文字表記については,異体字も含め,ほとんどの文字がこの Adobe-Japan1-6 の範囲内で間に合うと思います。Adobe 製品に附随する「小塚明朝 Pr6N」や「小塚ゴシック Pr6N」も Adobe-Japan1-6 の全23,058字を収録しています。他には商用フォントの「ヒラギノPr6Nフォント」が Adobe-Japan1-6 に完全対応していますが,Mac に標準バンドルされている「ヒラギノ」は Adobe-Japan1-6 のサブセット(つまり完全対応のフルセットではない)となっているようです。

目次に戻る

もっと文字を!

特殊な状況下では「もっと文字を!」という必要に駆られる場合があります。IVD コレクションの一つである Hanyo-Denshi は,法務省が管轄する「戸籍統一文字」と総務省が選定する「住民基本台帳ネットワークシステム統一文字」で用いられる字形を整理統合するために,経済産業省の委託により「国立国語研究所・日本情報処理学会・日本規格協会」の三者共同事業「汎用電子情報交換環境整備プログラム」を基に2010年11月に策定され,IVD に登録されました。「人名」での利用を主目的とした Hanyo-Denshi は Adobe-Japan1 に含まれない漢字やもっと多くの異体字を持っています。

そして2014年には独立行政法人「情報処理推進機構」(IPA: Information-technology Promotion Agency)の「文字情報基盤整備事業」により Hanyo-Denshi を継承する形で Moji_Joho コレクションが IVD に追加登録され,2017年12月には更新された Moji_Joho の全「58,862文字」の UCS での規格化が完了(このことはマスコミでも報道されました)し,2018年1月26日にはこの最新版 Moji_Joho に対応する「IPAmj明朝フォント」がリリースされました。IPAmj明朝 もフリーですから誰でも自由に無償で使えます(「IPAフォントライセンス」に従います)。図4を御覧ください。Noto(Adobe-Japan1 対応) と IPAmj明朝(Moji_Joho 対応)のそれぞれが備えている字形を,いくつかの異体字(変体仮名も含む)について比較したものです。なお IPAmj明朝 は明朝体しか持ちませんので,Noto もこれに合わせて Noto Serif を使っています。

IPAmjm Font
図4: Noto Serif と IPAmj明朝

目次に戻る

まとめ

  1. Webページであれプリントアウトを目的とした文書であれ,多言語や多文字種を取り扱う場合に用いるフォントはフリーの Noto がおすすめ
  2. 異体字(変体仮名も含む)に関し Noto でもなお力不足であればフリーの IPAmj明朝 を使うと良い(ただし明朝体のみ)

ドイツ古典主義時代の文豪ゲーテの今際の言葉は「もっと光を!」(原語で Mehr Licht! 英語では More Light!)であったとされています。大詩人に相応しい見事な辞世の句ですが,何やら出来過ぎの感無きにしも非ずです。生粋のフランクフルトっ子であったゲーテはフランクフルト方言をしゃべっていたので,実際は Mer lischt [hier so schlescht].(ここはとっても寝心地悪い)だったのでは,という説もあります。真相は不明です。

Noto も IPAmj明朝 も「もっと文字を!」という方針で開発が続けられていますが,大きな弱点が一つあります。それは巨大なフォントファミリはファイルサイズも巨大である,という点です。このことはフォントのロードやレンダリングに時間がかかることを意味し,使用勝手に「心地悪さ」を感じる原因の一つとなります。

本稿では「Webフォント」と呼ばれる技術を使って,クライアント(本稿をお読みくださっている皆さんがお使いの端末)側に Noto がなくとも,サーバから当該フォントが自動的に読み込まれ表示が行われるような仕組みにしてあります。しかし「多言語・多字形」に関わる箇所では「画像」を用いています。これは,全てをWebフォントで処理しようとすると表示までに長い時間がかかってしまうためです。

Noto は全部のフォントを揃えると 1.45GB もあります。

目次に戻る