行政事務標準文字検索が提供するREST API、MCPサーバー、データベース構造、および文字コードの技術的背景を解説します。 データベースの内容を直接閲覧・検索したい場合は開発者モードをご利用ください。
検索ボックスに入力するクエリは、パターンに応じて自動判別されます。以下の記法がすべて利用可能です。
| 記法 | 入力例 | 説明 |
|---|---|---|
| 単一漢字 | 漢 | 文字の詳細情報(読み・意味・異体字・IVS等)を表示 |
| 複数漢字 | 漢字 | 2文字以上のCJK文字を並べると比較表示 |
| Unicodeコードポイント | U+4E00、U+20BB7 | U+に続く4〜6桁の16進数。大文字・小文字不問、U+ の + は省略可 |
| VS付きコードポイント | U+845B U+E0100 | ベース文字+異体字セレクタ(SVS: U+FE00〜FE0F / IVS: U+E0100〜E01EF)をスペース区切りで入力。ベース文字の詳細を表示し該当IVSタイルをハイライト |
| VS付き文字ペースト | 葛󠄀(葛+VS17) | IVS/SVS付き文字をそのままペーストしても同様にベース文字で検索し該当IVSをハイライト |
| UTF-8バイト列 | E6 BC A2、E6-BC-A2、0xE6 0xBC 0xA2 | UTF-8/UTF-16BE/UTF-32BEバイト列を自動デコードしてコードポイントに変換 |
| 記法 | 入力例 | 説明 |
|---|---|---|
| MJコード | MJ015223 | MJ文字情報の6桁コード(大文字・小文字不問) |
| GJコード | GJ000001 | 行政事務標準文字の6桁コード |
| 戸籍統一文字番号 | 123456 | 6桁の数字のみで入力すると戸籍統一文字番号として検索 |
| 行政コード(明示指定) | koseki:123456、juki:1234、x0213:1-16-01 | プレフィックスでコード体系を明示。戸籍:、住基:、jis:、gj: も使用可 |
| 記法 | 入力例 | 説明 |
|---|---|---|
| ひらがな | かん | 読みで検索(音読み・訓読み・名乗り)。同時に部首名も検索 |
| カタカナ | セイ | 読みで検索。長音符(ー)も使用可 |
| 画数 | 12 | 1〜2桁の数字(6桁以外)で画数検索 |
| 読み+画数 | かん 12、セイ 20 | 読みと画数をスペースで区切って複合検索 |
| 記法 | 入力例 | 対応辞書 |
|---|---|---|
大漢和 / morohashi | 大漢和12345、morohashi:12345 | 大漢和辞典 |
康熙 / kangxi | kangxi:0100.01 | 康煕字典 |
nelson | nelson:1234 | Nelson字典 |
漢語 / hanyu | 漢語:12345 | 漢語大字典 |
matthews / karlgren / sbgy | matthews:1234 | その他の辞書 |
| 記法 | 入力例 | 説明 |
|---|---|---|
| IDS(漢字構成記述) | ⿰亻寺 | IDC演算子(⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻)と部品で構造検索。丸数字(①〜⑧)で未符号化部品を指定可 |
| 英語の意味 | water、big river | ラテン文字のみの入力は英語の意味で全文検索(FTS5) |
入力が複数のパターンに該当する場合、以下の優先順位で判別されます。
U+ で始まる)MJ + 6桁数字)GJ + 6桁数字)すべてのエンドポイントはGETメソッドで、認証不要です。レスポンスはJSON形式で返されます。
ベースURL: https://gjs-api.<your-account>.workers.dev
variants=true(異体字を含める), hops=2(異体字の探索深度 1-4)
サブセットフォントは元フォントからの派生プログラム(Derived Program)です。レスポンスヘッダにライセンス情報を付与しています。
| フォント | ライセンス | オリジナル |
|---|---|---|
| ipamjm / acgjm | IPAフォントライセンス v1.0 | IPAmj明朝 |
| HanaMinB | SIL Open Font License 1.1 | 花園明朝B (GlyphWiki) |
| TWSungPlus / TWSungExtB | SIL Open Font License 1.1 | 全字庫正宋體 (CNS 11643) |
| NotoSerifCJKJP / SC / TC / HK / KR | SIL Open Font License 1.1 | Noto Serif CJK |
| 160+ Noto Sans/Serif フォント | SIL Open Font License 1.1 | Google Fonts |
IPAフォントライセンスでは、サブセット(派生プログラム)の再配布にあたり、ライセンス条文の同梱と原著作物へのリンクが必要です。
本APIは X-Font-License および X-Original-Font レスポンスヘッダでこれらの情報を提供します。
なお、サブセットフォントは元のフォント名(IPAmj明朝等)とは異なるファミリー名で生成されます。
# 「漢」の詳細情報(異体字含む)
curl 'https://gjs-api.<your-account>.workers.dev/api/lookup/漢?variants=true'
# 音読み「カン」で検索
curl 'https://gjs-api.<your-account>.workers.dev/api/search/reading?q=カン&type=on&limit=10'
# IDS構造で検索(「⿰亻寺」を含む文字)
curl 'https://gjs-api.<your-account>.workers.dev/api/search/ids?q=⿰亻寺'
# MJコードで検索
curl 'https://gjs-api.<your-account>.workers.dev/api/search/code?system=mj&value=MJ015223'
Model Context Protocol(MCP)を通じて、AIアシスタントから漢字データベースを直接利用できます。17のツールを提供しています。
claude_desktop_config.json に以下を追加:
{
"mcpServers": {
"gjs-kanji": {
"command": "bun",
"args": ["/path/to/gjs/src/mcp/server.ts"],
"env": {
"GJS_DB_PATH": "/path/to/gjs/data/output/gjs.db"
}
}
}
}
Bunサーバー(コンテナ含む)は /mcp エンドポイントでHTTP経由のMCPプロトコルに対応しています。
{
"mcpServers": {
"gjs-kanji": {
"url": "https://your-server.example.com/mcp"
}
}
}
全データが公開の読み取り専用データのため、認証は不要です。
| ツール名 | 説明 | 必須パラメータ |
|---|---|---|
lookup_kanji | 文字・コードポイント・MJコード・戸籍統一文字番号で検索 | query |
search_kanji | 読みまたは意味で検索 | query |
get_variants | 異体字の取得 | character |
list_by_radical | 康煕部首番号で一覧 | radicalNumber |
search_by_stroke | 画数で検索 | strokeCount |
search_reading_stroke | 読み+画数の複合検索 | reading, strokeCount |
search_by_dict | 辞書参照番号で検索 | dictionaryCode, referenceValue |
search_by_code | 行政コードで検索 | codeSystem, codeValue |
search_by_ids | IDS(漢字構成記述)で検索 | pattern |
search_radical_name | 部首名で検索 | query |
get_cluster_edges | 異体字グラフのエッジ取得 | query |
database_stats | データベース統計 | — |
query_database | SQL SELECT実行(読み取り専用) | sql |
lookup_ivs | 文字のIVS一覧 | character |
search_ivs | 識別子でIVD検索 | identifier |
list_ivd_collections | IVDコレクション一覧 | — |
# Claude Desktop/Code で以下のように質問:
「漢」の異体字を教えて
MJ015223 の文字情報を調べて
音読み「カン」で13画の漢字を探して
部首「水」に属する漢字を一覧して
大漢和辞典の番号18270を検索して
SQLiteデータベース。112,459文字、252,719読み、40,321異体字関係、26,258 IVSシーケンスを収録。
全文字のマスターテーブル。Unihan、MJ文字情報、行政事務標準文字(GJ)の全文字を収録。
| カラム | 型 | 説明 |
|---|---|---|
id | INTEGER PK | 内部ID |
character | TEXT | 文字そのもの |
codepoint | INTEGER | Unicodeコードポイント(数値) |
codepoint_hex | TEXT | 16進表記(例: 4E00) |
unicode_block_id | INTEGER | Unicodeブロック |
unicode_plane | INTEGER | 面番号(0=BMP, 2=SIP, 3=TIP) |
radical_id | INTEGER | 康煕部首番号(1-214) |
stroke_count | INTEGER | 総画数 |
| カラム | 型 | 説明 |
|---|---|---|
character_id | INTEGER | → characters.id |
reading_type | TEXT | on / kun / nanori / pinyin / jyutping / hangul |
reading_value | TEXT | 読み文字列 |
language | TEXT | 言語コード |
| カラム | 型 | 説明 |
|---|---|---|
character_id | INTEGER | → characters.id |
meaning_text | TEXT | 意味テキスト(英語) |
language | TEXT | 言語(en等) |
各種コード体系との紐付け。
| カラム | 型 | 説明 |
|---|---|---|
character_id | INTEGER | → characters.id |
code_system | TEXT | コード体系 |
code_value | TEXT | コード値 |
主なコード体系:
| code_system | 件数 | 説明 |
|---|---|---|
mj | 58,856 | MJ文字情報番号(MJ000001〜MJ060632) |
koseki | 55,822 | 戸籍統一文字番号 |
juki | 19,562 | 住基ネット統一文字コード |
x0213 | 10,216 | JIS X 0213 面区点 |
gj | 9,175 | 行政事務標準文字内部コード |
joyo | 2,136 | 常用漢字 |
jinmei | 858 | 人名用漢字 |
irg_j / irg_g / irg_t / irg_k | 各数万 | IRGソース(日本・中国・台湾・韓国等のISO 10646提案典拠) |
| カラム | 型 | 説明 |
|---|---|---|
character_id | INTEGER | → characters.id |
dictionary_code | TEXT | 辞書コード(morohashi / kangxi / nelson 等) |
reference_value | TEXT | 参照値 |
IDS(漢字構成記述文字列)。⿰亻寺のように漢字の構造を記述。詳細はIDSの節を参照。
| カラム | 型 | 説明 |
|---|---|---|
character_id | INTEGER | → characters.id |
ids_string | TEXT | IDS文字列 |
異体字ペアの直接的な関係。詳細は異体字モデルの節を参照。
| カラム | 型 | 説明 |
|---|---|---|
from_character_id | INTEGER | → characters.id |
to_character_id | INTEGER | → characters.id |
relation_type | TEXT | 関係の種類(後述) |
source | TEXT | 出典 |
推移的閉包(ベン図用)。A→B、B→Cの関係からA→C(hop_count=2)を最大4ホップまで事前計算。一部の関係タイプは推移閉包から除外されています。
Union-Findで構築した異体字クラスタ(8,561グループ、最大117文字)。全関係タイプを使用し、同一クラスタの文字は何らかの異体字関係で到達可能。
| カラム | 型 | 説明 |
|---|---|---|
base_codepoint | INTEGER | 基底文字のコードポイント |
variation_selector | INTEGER | 異体字セレクタ(U+E0100〜U+E01EF) |
collection_id | INTEGER | → ivd_collections.id |
identifier | TEXT | コレクション内の識別子(MJ000001、CID+1234等) |
Adobe-Japan1、Hanyo-Denshi、Moji_Joho、KRName。
IVSシーケンスごとの行政コード紐付け。特定の字形がどのMJコード・戸籍コードに対応するかを示します。
康煕部首マスター。部首文字、画数、日本語名、英語名。
収録されているUnicodeブロック情報(CJK Unified Ideographs、CJK Extension A〜I等)。
変体仮名。音価(かな)と元の漢字への参照。MJ変体仮名表(MJIH00201.csv)より。
本データベースは複数の公開データソースを統合して構築されています。ビルドパイプライン(data/scripts/)により、ダウンロードから統合・加工・検証までを自動化しています。
| データソース | 提供元 | 取得データ |
|---|---|---|
| Unihan Database | Unicode Consortium | 102,998文字の基本情報 — 読み(音訓・ピンイン・粤拼・ハングル)、意味、部首、画数、異体字関係(kSimplifiedVariant / kTraditionalVariant / kSemanticVariant / kSpecializedSemanticVariant / kZVariant / kCompatibilityVariant)、辞書参照、IRGソース、GB 2312 / GB 12345マッピング(13,629件) |
| MJ文字情報一覧表 | IPA(情報処理推進機構) | 58,856のMJコード紐付け、戸籍統一文字番号、住基ネット統一文字コード、常用漢字・人名用漢字フラグ、JIS X 0213面区点 |
| MJ縮退マップ | IPA | JIS X 0213 代替マッピング(18,925件)— 代替変換区分1(異体字変換)と区分2(非異体字変換)を区別して取込 |
| 行政事務標準文字 | デジタル庁 | 9,175文字の行政事務標準文字(GJ)コードと読み |
| v2n異体字マッピング | 手整備(複数出典に基づく注釈付き) | 2,692件の異体字ペア。Unihan・MJでカバーされない関係を補完 |
| CHISE IDS | CJKVI / CHISE | 88,480文字のIDS(漢字構成記述文字列) |
| IVD(Ideographic Variation Database) | Unicode Consortium | 26,258のIVSシーケンス(Adobe-Japan1、Moji_Joho、KRName等) |
| MJ変体仮名表 | IPA | 399の変体仮名エントリ(MJIH00201.csv) |
| CNS 11643(全字庫) | 中華民国教育部 | 筆順データ(94,900件)、構成部品(97,067件)、字源情報(104,661件)、CNSコードマッピング(139,175件) |
| GB18030-2022 | ICU Project(Unicode Consortium) | GB18030-2022エンコーディングマッピング(28,195件)— 2バイト(GBK互換)および4バイト拡張の往復マッピング |
| ICU Unicode データ | ICU Project(Unicode Consortium) | 視覚的類似文字ペア(confusables、4,462件)、簡体↔繁体中国語マッピング(Hans/Hant、2,789件) |
| 韓国人名用漢字 | 大韓民国大法院 | 人名用漢字(9,057件)— 韓国法務で使用可能な漢字リスト |
| 韓国教育漢字 | 韓国語文会 | 教育漢字配当級別データ(5,978件) |
| 後方互換PUP→IVSマッピング | 行政事務標準当用明朝フォントから抽出 | Plane 16 PUA(U+101000〜U+104295)からIVSへの変換表(10,207件) |
bun run data:all で全工程を実行します。
漢字の異体字関係を3層で管理しています。
異なるデータソースから収集した文字ペアの直接的な異体字関係です。全40,321件。
| relation_type | 件数 | 出典 | 説明 |
|---|---|---|---|
mj_substitution | 12,575 | MJ縮退マップ | 代替変換区分1(異体字変換): 仕様書に「客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換」と定義。MJ文字からJIS X 0213文字への代替先 |
jis_inclusion | 6,350 | MJ縮退マップ | 代替変換区分2(非異体字変換): 近似する文字への便宜的な変換。異体字関係ではなく符号化の包摂 |
gj_inclusion | 5,495 | GJデータ | 行政事務標準文字における包摂(jis_inclusionのGJ版) |
traditional | 4,890 | Unihan | 繁体字関係(kTraditionalVariant) |
gj_substitution | 3,087 | GJデータ | GJ版の異体字変換(mj_substitutionのGJ版) |
v2n | 2,692 | v2n注釈付き | 手整備の異体字マッピング。Unihan・MJでカバーされない関係を補完 |
semantic | 2,170 | Unihan | kSemanticVariant: 意味的に等価または近い異体字。字形が異なるものも含まれる |
simplified | 1,672 | Unihan | 簡体字関係(kSimplifiedVariant) |
compat | 1,001 | Unihan | 互換漢字関係(kCompatibilityVariant): CJK互換漢字からの正規化先 |
specialized_semantic | 304 | Unihan | kSpecializedSemanticVariant: 特定分野でのみ意味が部分的に重複する関係 |
z_variant | 85 | Unihan | kZVariant: 字形差異のみの異体字(同一の抽象文字) |
variant_relationsの一部を使い、最大4ホップの推移的閉包を事前計算したテーブルです(178,016行)。UI上の「ベン図」(異体字一覧)の表示に使用されます。
推移閉包では、連鎖により無関係な文字がグループに合流することを防ぐため、以下の関係タイプを除外しています:
| 除外する関係タイプ | 除外理由 |
|---|---|
jis_inclusion / gj_inclusion | 非異体字変換(代替変換区分2)。近似文字への便宜的な包摂であり、推移閉包に含めると楠→枬→丹→周のように無関係な文字が連鎖する |
specialized_semantic | 特定分野での部分的意味重複。中↔塚のように字義が異なる文字が混入する |
以下は推移閉包に含めています:
| 含める関係タイプ | 含める理由 |
|---|---|
mj_substitution / gj_substitution | 代替変換区分1(異体字変換)。仕様書で「客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換」と定義されている正当な異体字関係 |
traditional / simplified | 繁体字・簡体字の対応関係 |
semantic | kSemanticVariant。一部に意味が近いだけの緩い関係も含まれるが、大半は正当な異体字 |
compat / z_variant / v2n | 互換漢字・Z異体字・手整備の異体字関係 |
variant_relationsの全関係タイプ(包摂・非異体字変換含む)を使い、Union-Findアルゴリズムで連結成分を計算したテーブルです。8,561グループ、最大117文字。
closuresと異なりフィルタリングしないため、包摂や近似関係を経由して大きなクラスタが形成される場合があります。主に内部的なグループ化に使用し、UI上のベン図表示にはvariant_closuresを使用します。
MJ縮退マップ(substitute_jisx0213_mj_1.0.txt)は、MJ文字情報の各文字についてJIS X 0213への代替変換先を定義しています。代替変換区分(typeフィールド)により、変換の性質が分かれます:
| 区分 | 値 | relation_type | 説明 |
|---|---|---|---|
| 区分0 | 0 | (対象外) | 変更なし(JIS X 0213に含まれる文字) |
| 区分1 | 1 | mj_substitution | 異体字変換: 客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換 |
| 区分2 | 2 | jis_inclusion | 非異体字変換: 異体字関係にはないが、近似する文字として変換先を提示 |
| 区分3 | 3 | (対象外) | 未定義(データ上存在しない) |
区分1は異体字として信頼できる関係であり、ベン図の推移閉包に含めています。区分2は符号化の便宜上の近似であり、推移閉包からは除外しています。
IDS(Ideographic Description Sequence)は、漢字の構造を部品の組み合わせで記述する仕組みです。Unicode規格で定義されたIDC(Ideographic Description Characters, U+2FF0〜U+2FFF)を演算子として使い、構成要素を組み合わせます。
| IDC | コードポイント | 意味 | 引数 | 例 |
|---|---|---|---|---|
| ⿰ | U+2FF0 | 左右 | 2 | ⿰亻寺 → 侍 |
| ⿱ | U+2FF1 | 上下 | 2 | ⿱日月 → 明 |
| ⿲ | U+2FF2 | 左中右 | 3 | ⿲彳龷亍 → 行 |
| ⿳ | U+2FF3 | 上中下 | 3 | ⿳亠口小 → 京 |
| ⿴ | U+2FF4 | 全囲み | 2 | ⿴囗人 → 囚 |
| ⿵ | U+2FF5 | 上三方囲み | 2 | ⿵門日 → 間 |
| ⿶ | U+2FF6 | 下三方囲み | 2 | ⿶凵出 → 凶 |
| ⿷ | U+2FF7 | 左三方囲み | 2 | ⿷匚矢 → 医 |
| ⿸ | U+2FF8 | 左上囲み | 2 | ⿸广木 → 床 |
| ⿹ | U+2FF9 | 右上囲み | 2 | ⿹气米 → 氣 |
| ⿺ | U+2FFA | 左下囲み | 2 | ⿺走己 → 起 |
| ⿻ | U+2FFB | 重ね | 2 | ⿻木一 |
本データベースのIDS情報はCJKVI IDS(CHISE IDSに基づく)を元にしています。 CHISE IDSでは、Unicodeに収録されていない部品(未符号化コンポーネント)を丸数字(①〜⑳)で表記します。
例えば龍の IDS は ⿰𦚏⑦ です。ここで ⑦ は「鳥の上部(灬を除いた部分)」を表す未符号化部品のプレースホルダーです。Unicodeにはこの部品単体のコードポイントが存在しないため、丸数字で代替されています。
主な丸数字と、それが表す部品の使用例:
| 丸数字 | 使用数 | 使用例 | 部品の概要 |
|---|---|---|---|
| ② | 176 | 与、丝、之、兜 | 乃に類似するストロークパターン |
| ③ | 142 | 不、乌、劉、印 | 特定の筆画組み合わせ |
| ④ | 164 | 业、严、亙、亦 | 特定の筆画組み合わせ |
| ⑤ | 139 | 免、兎、其、典 | 特定の筆画組み合わせ |
| ⑥ | 98 | 亞、典、垂、壺、烏 | 特定の筆画組み合わせ |
| ⑦ | 85 | 島、鳥、龍、華、梟 | 鳥の上部(灬を除いた部分) |
| ⑧ | 62 | 壷、夀、婁、專、惠 | 特定の筆画組み合わせ |
丸数字はIDS検索でそのまま使用できます。例えば ⑦ を含む文字を検索すると、鳥系の部品を持つ漢字が一覧されます。
なお、IDS内にCJK統合漢字拡張B以降(U+20000〜)の文字が部品として使われている場合、一般的なフォントではグリフが存在しないため、本サイトではフォントサブセット技術により動的にフォントを生成して表示しています。
CHISE IDSでは、同一の漢字でも地域により構成が異なる場合、[GTKV] のような地域タグで区別されています。
G: 中国大陸(GB規格)T: 台湾(CNS規格)J: 日本(JIS規格)K: 韓国(KS規格)V: ベトナム例: 与 の IDS は ⿹②一[GTKV] — 地域タグにより、この構成解析がG/T/K/V地域に適用されることを示しています。
Unicodeは世界中のすべての文字に固有の番号(コードポイント)を割り当てる国際規格です。コードポイントは U+ に続く16進数で表記します(例: U+4E00「一」、U+20BB7「𠮷」)。
文字空間は面(Plane)に分かれます:
本データベースは BMP・SIP・TIP の全CJK統合漢字 112,459字を収録しています。さらにPlane 16(U+100000〜)にデジタル庁行政事務標準文字(GJ)の私用領域文字を含みます。
Unicodeでは日本語(J)、中国語(C)、韓国語(K)の漢字をCJK統合漢字として統合管理しています。同じ字形の漢字には同一のコードポイントが割り当てられます(包摂規準)。
これにより文字数は大幅に削減されましたが、微妙な字形差が同じコードポイントに包摂される問題も生じます。例えば「骨」は日本・中国・台湾で字形が微妙に異なりますが、すべて U+9AA8 です。
包摂で統合された字形差を区別するために IVS(後述)が導入されました。また、本データベースの異体字関係のうち jis_inclusion / gj_inclusion は、この包摂に類似した「近似文字への便宜的な変換」であり、真の異体字関係とは区別して扱っています。
包摂規準で統合された字形差を区別するための仕組みがIVS(Ideographic Variation Sequence)です。基底文字の直後に異体字セレクタ(Variation Selector)を付加して特定の字形を指定します。
# 「葛」のIVSの例
U+845B → 葛(基底文字、デフォルト字形)
U+845B U+E0100 → 葛󠄀(Adobe-Japan1の字形)
U+845B U+E0102 → 葛󠄂(Moji_Johoの字形)
異体字セレクタの範囲:
IVSの登録はIVD(Ideographic Variation Database)で管理されています。本データベースに収録されているコレクション:
| コレクション | 管理者 | 用途 |
|---|---|---|
| Adobe-Japan1 | Adobe | Adobe-Japan1グリフ集合。DTP・印刷業界標準 |
| Moji_Joho | IPA | MJ文字情報一覧。IPAmj明朝フォントの基盤 |
| KRName | 韓国 | 韓国人名用 |
同じ字形でもコレクションによって異なる異体字セレクタが割り当てられている場合があるため、利用時には注意が必要です。
CJK統合漢字の拡張領域(Extension B以降、U+20000〜)の文字は一般的なシステムフォントに収録されていないことが多く、ブラウザ上で表示できない場合があります。本サイトでは176種類のフォントをサーバーサイドで動的にサブセット化し、必要なグリフだけをWebフォントとして配信しています。
| フォント | 収録範囲 | グリフ数 | ライセンス |
|---|---|---|---|
| IPAmj明朝 | BMP CJK統合漢字・Ext-A・互換漢字・ひらがな・カタカナ・変体仮名 | 約60,000 | IPA Font License v1.0 |
| 行政事務標準文字明朝(acgjm) | Plane 16 PUA(GJ文字)・BMP PUA(後方互換) | 9,175 | IPA Font License v1.0 |
| 花園明朝B(HanaMinB) | CJK Ext-B〜F(SIP: U+20000〜U+2EBEF) | 60,317 | SIL OFL 1.1 |
| 全字庫正宋體Plus(TWSungPlus) | Plane 15 PUA 台湾行政文字(U+F0000〜U+FFFFD) | 24,966 | SIL OFL 1.1 |
| 全字庫正宋體Ext-B(TWSungExtB) | CJK Ext-B以降(U+20000〜U+2FA1D) | 48,812 | SIL OFL 1.1 |
| Noto Serif CJK JP | 日本語CJK統合漢字(BMP + SIP) | 65,535 | SIL OFL 1.1 |
| Noto Serif CJK SC/TC/HK/KR | 各地域のCJK統合漢字(簡体字・繁体字・香港・韓国) | 各65,535 | SIL OFL 1.1 |
| Noto Serif(ラテン・ギリシャ・キリル) | 基本ラテン文字・ギリシャ文字・キリル文字 | 2,965 | SIL OFL 1.1 |
| Noto Sans Math | 数学記号(U+2200〜U+23FF, U+1D400〜U+1D7FF) | 2,655 | SIL OFL 1.1 |
| Noto Sans Symbols 2 | 記号・絵文字(U+2600〜U+27BF, U+1F000〜U+1FAFF) | 2,655 | SIL OFL 1.1 |
CJK以外のUnicodeスクリプトには、GoogleのNoto font familyを使用しています。 コードマップでは291個のUnicode範囲と160種類のNotoフォントの対応表をテーブル駆動で管理し、二分探索で最適なフォントを解決します。
| スクリプト例 | Unicode範囲 | フォント |
|---|---|---|
| ハングル | U+AC00〜U+D7AF(音節), U+1100〜U+11FF(字母) | Noto Serif CJK KR |
| デーヴァナーガリー | U+0900〜U+097F | Noto Serif Devanagari |
| アラビア文字 | U+0600〜U+06FF | Noto Naskh Arabic |
| ヘブライ文字 | U+0590〜U+05FF | Noto Serif Hebrew |
| アルメニア文字 | U+0531〜U+058F | Noto Serif Armenian |
| グルジア文字 | U+10A0〜U+10FF | Noto Serif Georgian |
| タイ文字 | U+0E01〜U+0E5B | Noto Serif Thai |
| エチオピア文字 | U+1200〜U+1399 | Noto Serif Ethiopic |
| 西夏文字(タングート) | U+17000〜U+18D7F | Noto Serif Tangut |
| 契丹小字 | U+18B00〜U+18CD5 | Noto Serif Khitan Small Script |
| 楔形文字 | U+12000〜U+12543 | Noto Sans Cuneiform |
| エジプト聖刻文字 | U+13000〜U+13446 | Noto Sans Egyptian Hieroglyphs |
完全なフォント対応表(291エントリ)はソースコード src/app/codemap/index.ts の FONT_RANGES テーブルに記載されています。
コードポイントからフォントを決定する際、以下の優先順位で解決されます:
コードマップではUnicode空間を256コードポイント単位の「チャンク」に分割し、可視範囲に応じてオンデマンドでWOFF2サブセットをフェッチします。
各チャンクは {fontId}:{plane}:{row}(例: ipamjm:0:78 = U+4E00〜U+4EFF)で管理され、最大4チャンクを並列にロードします。
サブセットフォントはブラウザ・CDN双方で積極的にキャッシュされ(Cache-Control: public, max-age=31536000, immutable)、2回目以降のアクセスではネットワーク通信が発生しません。
IDS内の部品文字(CJK Extension B以降)についても同じ仕組みで動的にフォントを適用しています。