IVS 完全解説: 同じ漢字の47通りの字形を表示する
異体字セレクタ(IVS/SVS)の仕組み。登録された全バリアントをフォントで実際に表示。
問題: 1つのコードポイント、多数の字形
漢字統合(Han Unification)は同じ起源を共有する文字を単一のコードポイントに統合しました。しかし、正確なグリフ変種を指定する必要がある場合はどうすればよいでしょうか? 日本人の名前、歴史文書、書道の伝統は、フォントのデフォルトレンダリングを超えた精密なグリフ制御を要求します。
例えば、辻(U+8FBB、一般的な日本の姓)には2つの認められた字形があります: 左の部首に点が1つのもの(一点しんにょう)と2つのもの(二点しんにょう)。どちらも「正しい」のですが、どちらが表示されるかはフォントに依存し、基本コードポイントだけでは選択できません。
Unicode の解決策が異体字シーケンス(Variation Sequences)です: 基底文字の後に特別な異体字セレクタ文字を続けることで、正確なグリフ形式を指定します。
IVS の仕組み: E0100 範囲
漢字異体字シーケンス(IVS: Ideographic Variation Sequences)は U+E0100 から U+E01EF の範囲の異体字セレクタ(VS17〜VS256、240個)を使用します。IVS は2文字のシーケンスです:
基底文字 + 異体字セレクタ = IVS 例: 葛 (U+845B) + VS17 (U+E0100) = 葛󠄀 (特定の異体字) 葛 (U+845B) 単体 = 葛 (デフォルトグリフ)
異体字セレクタは不可視です — それ自体はグリフを生成しません。しかし IVS 対応フォントはこのシーケンスを検出すると異なるグリフをレンダリングします。
| 構成要素 | コードポイント | 可視? |
|---|---|---|
| 基底文字: 葛 | U+845B | はい |
| 異体字セレクタ: VS17 | U+E0100 | いいえ(不可視) |
| シーケンス: 葛󠄀 | U+845B U+E0100 | はい(異体字グリフ) |
JavaScript では、この範囲の各異体字セレクタはサロゲートペア(2 UTF-16 コードユニット)を必要とするため、IVS は1書記素クラスタにもかかわらず合計3〜4コードユニットを占めます。
SVS: 絵文字と記号の異体字セレクタ
標準化異体字シーケンス(SVS: Standardized Variation Sequences)は、より小さな異体字セレクタセット U+FE00〜U+FE0F(VS1〜VS16)を使用します。用途は以下の通りです:
| セレクタ | 主な用途 | 例 |
|---|---|---|
| VS1 (U+FE00) | CJK 互換変種 | 芦 + VS1 で特定字形 |
| VS15 (U+FE0E) | テキスト表示 | ☺︎(テキストスタイル) |
| VS16 (U+FE0F) | 絵文字表示 | ☺️(絵文字スタイル) |
最も広く知られた SVS の用法はテキスト/絵文字の切り替えです。多くの文字にはテキスト表示(モノクロ、シンプル)と絵文字表示(カラフル)の両方があります。VS15 でテキストスタイル、VS16 で絵文字スタイルを強制します:
// 同じ基底文字、異なる表示: "\u2764" // ❤(デフォルト、通常は絵文字) "\u2764\uFE0E" // ❤︎(テキスト表示、VS15) "\u2764\uFE0F" // ❤️(絵文字表示、VS16) // セレクタは不可視だがレンダリングを変更: "❤️".length // 2(基底 + VS16、両方 BMP 内)
IVS セレクタ(SMP にあり要サロゲート)と異なり、SVS セレクタは BMP(U+FE00〜FE0F)にあり、各1 UTF-16 コードユニットです。
IVD コレクション: Adobe-Japan1 と Moji_Joho
どの異体字セレクタがどのグリフにマッピングされるかは任意ではなく、Unicode コンソーシアムが管理する漢字異体字データベース(IVD: Ideographic Variation Database)に記録されています。IVD には名前付きのコレクションが含まれます:
| コレクション | 範囲 | エントリ数 |
|---|---|---|
| Adobe-Japan1 | 日本語タイポグラフィ(AJ1 CID) | 約14,700 |
| Moji_Joho | 日本政府の文字情報 | 約11,000 |
| Hanyo-Denshi | 日本の行政システム | 約11,000 |
| KRName | 韓国の人名異体字 | 約2,200 |
Adobe-Japan1 は最も広くサポートされているコレクションです。IVS シーケンスを Adobe-Japan1-7 文字コレクションの特定の CID(Character ID)番号にマッピングし、プロフェッショナルな日本語フォントがこれを実装しています。Adobe-Japan1 IVS 対応フォントは数千のグリフ変種をレンダリングできます。
Moji_Joho(文字情報)は IPA(情報処理推進機構)が管理し、公式な政府文書や戸籍システムで使用される文字変種に焦点を当てています。
フォントサポート: IVS が実際に機能する条件
IVS はフォントがサポートしている場合のみ機能します。フォントには以下が必要です:
- サポートする各 IVS シーケンスのグリフ変種
- 基底文字+セレクタのペアをグリフにマッピングする
cmapテーブル(具体的にはフォーマット14、Unicode Variation Sequences)
IVS をサポートする主なフォント:
| フォント | コレクション | プラットフォーム |
|---|---|---|
| IPAmj明朝 | Moji_Joho | クロスプラットフォーム(無料) |
| Noto Sans CJK | Adobe-Japan1(部分的) | クロスプラットフォーム(無料) |
| 小塚明朝 | Adobe-Japan1 | Adobe 製品 |
| 游明朝 | Adobe-Japan1(部分的) | Windows / macOS |
| ヒラギノ明朝 | Adobe-Japan1(部分的) | macOS |
フォントが特定の IVS をサポートしていない場合、単に基底文字のデフォルトグリフを描画し、異体字セレクタを無視します。これは優雅なフォールバックです — テキストは読める状態のまま、ただし要求された特定の変種ではありません。
レコードホルダー: 邉とその47の異体字
邉(U+9089)は登録 IVS シーケンス数の最多記録を保持しています。Moji_Joho コレクションに約47の変種形式があり、この文字が数世紀にわたって日本の戸籍でどれほど多様に書かれてきたかを反映しています。
姓の「渡邉」(わたなべ)は日本で数十の異体字綴りがあることで悪名高い存在です。戸籍を管理する市区町村役場は各家庭の記録に使用された正確な変種を忠実に再現する必要があり、これが Moji_Joho コレクションがこれほど多くの字形を登録している理由です。
| 文字 | IVS 変種(Moji_Joho) | 代表的用途 |
|---|---|---|
| 邉 U+9089 | 約47 | 渡邉 姓の変種 |
| 邊 U+908A | 約30 | 渡邊 姓の変種 |
| 辺 U+8FBA | 約10 | 渡辺 姓の変種 |
| 葛 U+845B | 約8 | 地名(葛飾 等) |
これは IVS が不可欠なケースです: IVS なしでは、日本の法律が保存を要求する法的に異なる名前の変種を政府システムが正確に記録することができません。
// 邉の異なる IVS:
"邉" // デフォルトグリフ
"邉\u{E0100}" // 異体字1(VS17)
"邉\u{E0101}" // 異体字2(VS18)
// ... 約47の登録変種まで
// 各々は1書記素クラスタ:
const seg = new Intl.Segmenter();
[...seg.segment("邉\u{E0100}")].length // 1