行政事務標準文字検索

技術詳細

行政事務標準文字検索が提供するREST API、MCPサーバー、データベース構造、および文字コードの技術的背景を解説します。 データベースの内容を直接閲覧・検索したい場合は開発者モードをご利用ください。

検索クエリ記法リファレンス

検索ボックスに入力するクエリは、パターンに応じて自動判別されます。以下の記法がすべて利用可能です。

文字・コードポイント

記法入力例説明
単一漢字文字の詳細情報(読み・意味・異体字・IVS等)を表示
複数漢字漢字2文字以上のCJK文字を並べると比較表示
UnicodeコードポイントU+4E00U+20BB7U+に続く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 A2E6-BC-A20xE6 0xBC 0xA2UTF-8/UTF-16BE/UTF-32BEバイト列を自動デコードしてコードポイントに変換

行政コード・識別子

記法入力例説明
MJコードMJ015223MJ文字情報の6桁コード(大文字・小文字不問)
GJコードGJ000001行政事務標準文字の6桁コード
戸籍統一文字番号1234566桁の数字のみで入力すると戸籍統一文字番号として検索
行政コード(明示指定)koseki:123456juki:1234x0213:1-16-01プレフィックスでコード体系を明示。戸籍:住基:jis:gj: も使用可

読み・画数

記法入力例説明
ひらがなかん読みで検索(音読み・訓読み・名乗り)。同時に部首名も検索
カタカナセイ読みで検索。長音符(ー)も使用可
画数121〜2桁の数字(6桁以外)で画数検索
読み+画数かん 12セイ 20読みと画数をスペースで区切って複合検索

辞書参照

記法入力例対応辞書
大漢和 / morohashi大漢和12345morohashi:12345大漢和辞典
康熙 / kangxikangxi:0100.01康煕字典
nelsonnelson:1234Nelson字典
漢語 / hanyu漢語:12345漢語大字典
matthews / karlgren / sbgymatthews:1234その他の辞書

構造・意味

記法入力例説明
IDS(漢字構成記述)⿰亻寺IDC演算子(⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻)と部品で構造検索。丸数字(①〜⑧)で未符号化部品を指定可
英語の意味waterbig riverラテン文字のみの入力は英語の意味で全文検索(FTS5)

判別の優先順位

入力が複数のパターンに該当する場合、以下の優先順位で判別されます。

  1. Unicodeコードポイント(U+ で始まる)
  2. MJコード(MJ + 6桁数字)
  3. GJコード(GJ + 6桁数字)
  4. 戸籍統一文字番号(6桁数字)
  5. 辞書参照(辞書名プレフィックス)
  6. 行政コード明示(コード体系プレフィックス)
  7. 読み+画数(かな + スペース + 数字)
  8. UTF-8バイト列(16進バイト列)
  9. 画数(1〜2桁の数字)
  10. ひらがな・カタカナ(読み+部首名の同時検索)
  11. 複数漢字(2文字以上のCJK文字 → 比較表示)
  12. 単一漢字
  13. 英語(ラテン文字のみ → 意味検索)

REST API リファレンス

すべてのエンドポイントはGETメソッドで、認証不要です。レスポンスはJSON形式で返されます。

ベースURL: https://gjs-api.<your-account>.workers.dev

文字検索

GET /api/lookup/:query
文字、コードポイント(U+XXXX)、MJコード、戸籍統一文字番号で検索。読み・意味・異体字・IVSを含む詳細情報を返します。
パラメータ: variants=true(異体字を含める), hops=2(異体字の探索深度 1-4)
GET /api/search/reading?q=かん&type=on&limit=50
読みで検索。on(音読み)、kun(訓読み)、nanori(名乗り)、pinyin(ピンイン)、jyutping(粤拼)、hangul(ハングル)に対応。
GET /api/search/meaning?q=water&limit=50
英語の意味で検索。全文検索(FTS5)対応。
GET /api/search/stroke?count=12&limit=200
画数で検索。
GET /api/search/reading-stroke?reading=かん&stroke=13&type=on
読みと画数の複合検索。
GET /api/search/dict?dict=morohashi&ref=12345
辞書参照番号で検索。大漢和辞典(morohashi)、康煕字典(kangxi)等。
GET /api/search/code?system=mj&value=MJ015223
行政コードで検索。MJ文字情報(mj)、戸籍統一文字(koseki)、住基ネット(juki)等。
GET /api/search/ids?q=⿰亻寺&match=contains
IDS(漢字構成記述)で検索。match=exact で完全一致、contains で部分一致。

部首

GET /api/radical/:number?limit=100
康煕部首番号(1-214)で文字を一覧。
GET /api/radicals/search?q=水
部首名(日本語・英語)で部首を検索。

異体字

GET /api/variants/:query
異体字クラスタの全メンバーを返します。推移的閉包によりグループ化されています。
GET /api/cluster-edges/:query
異体字グラフのノード(文字)とエッジ(関係の種類を含む)を返します。可視化用。

IVS / IVD

GET /api/ivd/collections
登録されているIVDコレクション一覧(Moji_Joho、Adobe-Japan1等)とシーケンス数。
GET /api/ivd/search?q=MJ015223
識別子(MJコード、CID等)でIVDシーケンスを検索。

フォント

GET /api/font/subset?font=ipamjm&text=漢字
指定テキストのサブセットフォントを動的生成。IVS対応。176種類のフォント(ipamjm、acgjm、HanaMinB、TWSungPlus、TWSungExtB、NotoSerifCJK JP/SC/TC/HK/KR、160+ Notoフォント)に対応。フォールバックチェーン付き。

フォントライセンス

サブセットフォントは元フォントからの派生プログラム(Derived Program)です。レスポンスヘッダにライセンス情報を付与しています。

フォントライセンスオリジナル
ipamjm / acgjmIPAフォントライセンス v1.0IPAmj明朝
HanaMinBSIL Open Font License 1.1花園明朝B (GlyphWiki)
TWSungPlus / TWSungExtBSIL Open Font License 1.1全字庫正宋體 (CNS 11643)
NotoSerifCJKJP / SC / TC / HK / KRSIL Open Font License 1.1Noto Serif CJK
160+ Noto Sans/Serif フォントSIL Open Font License 1.1Google Fonts

IPAフォントライセンスでは、サブセット(派生プログラム)の再配布にあたり、ライセンス条文の同梱と原著作物へのリンクが必要です。 本APIは X-Font-License および X-Original-Font レスポンスヘッダでこれらの情報を提供します。 なお、サブセットフォントは元のフォント名(IPAmj明朝等)とは異なるファミリー名で生成されます。

システム

GET /api/health
ヘルスチェック。
GET /api/stats
データベース統計(文字数、読み数、異体字関係数、IVSシーケンス数)。

使用例

# 「漢」の詳細情報(異体字含む)
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'

MCPサーバー

Model Context Protocol(MCP)を通じて、AIアシスタントから漢字データベースを直接利用できます。17のツールを提供しています。

接続方法

Claude Desktop / CLI(stdio)

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"
      }
    }
  }
}

リモート接続(Streamable HTTP)

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_idsIDS(漢字構成記述)で検索pattern
search_radical_name部首名で検索query
get_cluster_edges異体字グラフのエッジ取得query
database_statsデータベース統計
query_databaseSQL SELECT実行(読み取り専用)sql
lookup_ivs文字のIVS一覧character
search_ivs識別子でIVD検索identifier
list_ivd_collectionsIVDコレクション一覧

利用例(プロンプト)

# Claude Desktop/Code で以下のように質問:
「漢」の異体字を教えて
MJ015223 の文字情報を調べて
音読み「カン」で13画の漢字を探して
部首「水」に属する漢字を一覧して
大漢和辞典の番号18270を検索して

データベーススキーマ

SQLiteデータベース。112,459文字、252,719読み、40,321異体字関係、26,258 IVSシーケンスを収録。

主要テーブル

characters(112,459行)

全文字のマスターテーブル。Unihan、MJ文字情報、行政事務標準文字(GJ)の全文字を収録。

カラム説明
idINTEGER PK内部ID
characterTEXT文字そのもの
codepointINTEGERUnicodeコードポイント(数値)
codepoint_hexTEXT16進表記(例: 4E00)
unicode_block_idINTEGERUnicodeブロック
unicode_planeINTEGER面番号(0=BMP, 2=SIP, 3=TIP)
radical_idINTEGER康煕部首番号(1-214)
stroke_countINTEGER総画数

readings(252,719行)

カラム説明
character_idINTEGER→ characters.id
reading_typeTEXTon / kun / nanori / pinyin / jyutping / hangul
reading_valueTEXT読み文字列
languageTEXT言語コード

meanings(23,285行)

カラム説明
character_idINTEGER→ characters.id
meaning_textTEXT意味テキスト(英語)
languageTEXT言語(en等)

admin_codes(491,969行)

各種コード体系との紐付け。

カラム説明
character_idINTEGER→ characters.id
code_systemTEXTコード体系
code_valueTEXTコード値

主なコード体系:

code_system件数説明
mj58,856MJ文字情報番号(MJ000001〜MJ060632)
koseki55,822戸籍統一文字番号
juki19,562住基ネット統一文字コード
x021310,216JIS X 0213 面区点
gj9,175行政事務標準文字内部コード
joyo2,136常用漢字
jinmei858人名用漢字
irg_j / irg_g / irg_t / irg_k各数万IRGソース(日本・中国・台湾・韓国等のISO 10646提案典拠)

dictionary_references(379,830行)

カラム説明
character_idINTEGER→ characters.id
dictionary_codeTEXT辞書コード(morohashi / kangxi / nelson 等)
reference_valueTEXT参照値

ids_entries(88,475行)

IDS(漢字構成記述文字列)。⿰亻寺のように漢字の構造を記述。詳細はIDSの節を参照。

カラム説明
character_idINTEGER→ characters.id
ids_stringTEXTIDS文字列

異体字テーブル

variant_relations(40,321行)

異体字ペアの直接的な関係。詳細は異体字モデルの節を参照。

カラム説明
from_character_idINTEGER→ characters.id
to_character_idINTEGER→ characters.id
relation_typeTEXT関係の種類(後述)
sourceTEXT出典

variant_closures(178,016行)

推移的閉包(ベン図用)。A→B、B→Cの関係からA→C(hop_count=2)を最大4ホップまで事前計算。一部の関係タイプは推移閉包から除外されています。

variant_clusters(45,491行)

Union-Findで構築した異体字クラスタ(8,561グループ、最大117文字)。全関係タイプを使用し、同一クラスタの文字は何らかの異体字関係で到達可能。

IVS / IVDテーブル

ivd_sequences(26,258行)

カラム説明
base_codepointINTEGER基底文字のコードポイント
variation_selectorINTEGER異体字セレクタ(U+E0100〜U+E01EF)
collection_idINTEGER→ ivd_collections.id
identifierTEXTコレクション内の識別子(MJ000001、CID+1234等)

ivd_collections(4コレクション)

Adobe-Japan1、Hanyo-Denshi、Moji_Joho、KRName。

ivs_admin_codes(24,051行)

IVSシーケンスごとの行政コード紐付け。特定の字形がどのMJコード・戸籍コードに対応するかを示します。

その他

radicals(214行)

康煕部首マスター。部首文字、画数、日本語名、英語名。

unicode_blocks(14ブロック)

収録されているUnicodeブロック情報(CJK Unified Ideographs、CJK Extension A〜I等)。

hentaigana(293行)

変体仮名。音価(かな)と元の漢字への参照。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 で全工程を実行します。

  1. ダウンロード: Unihan、MJ文字情報、MJ縮退マップ、GJデータ、IDS、IVD、CNS 11643、GB18030、韓国漢字データをダウンロード
  2. スキーマ作成: SQLiteテーブル・インデックス・FTS5仮想テーブルを作成
  3. Phase 1: Unicodeブロック・康煕部首のマスターデータ投入
  4. Phase 2: Unihan → MJ文字情報 → IDS → 変体仮名 の順に文字データを投入
  5. Phase 2.5: GJ文字・v2n異体字・MJ縮退マップなどカスタムデータを投入
  6. Phase 2.7: CNS 11643(筆順・部品・字源)、韓国人名用漢字・教育漢字、後方互換PUPマッピングを投入
  7. Phase 2.9: GB18030-2022エンコーディングマッピングを投入
  8. Phase 3: variant_relations から推移的閉包(variant_closures)とUnion-Findクラスタ(variant_clusters)を計算
  9. Phase 4: IVDデータを投入
  10. 検証: 行数チェック・整合性検証

異体字モデル

漢字の異体字関係を3層で管理しています。

variant_relations: 直接関係

異なるデータソースから収集した文字ペアの直接的な異体字関係です。全40,321件。

関係タイプ一覧

relation_type件数出典説明
mj_substitution12,575MJ縮退マップ代替変換区分1(異体字変換): 仕様書に「客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換」と定義。MJ文字からJIS X 0213文字への代替先
jis_inclusion6,350MJ縮退マップ代替変換区分2(非異体字変換): 近似する文字への便宜的な変換。異体字関係ではなく符号化の包摂
gj_inclusion5,495GJデータ行政事務標準文字における包摂(jis_inclusionのGJ版)
traditional4,890Unihan繁体字関係(kTraditionalVariant)
gj_substitution3,087GJデータGJ版の異体字変換(mj_substitutionのGJ版)
v2n2,692v2n注釈付き手整備の異体字マッピング。Unihan・MJでカバーされない関係を補完
semantic2,170UnihankSemanticVariant: 意味的に等価または近い異体字。字形が異なるものも含まれる
simplified1,672Unihan簡体字関係(kSimplifiedVariant)
compat1,001Unihan互換漢字関係(kCompatibilityVariant): CJK互換漢字からの正規化先
specialized_semantic304UnihankSpecializedSemanticVariant: 特定分野でのみ意味が部分的に重複する関係
z_variant85UnihankZVariant: 字形差異のみの異体字(同一の抽象文字)

variant_closures: 推移的閉包(ベン図)

variant_relationsの一部を使い、最大4ホップの推移的閉包を事前計算したテーブルです(178,016行)。UI上の「ベン図」(異体字一覧)の表示に使用されます。

推移閉包では、連鎖により無関係な文字がグループに合流することを防ぐため、以下の関係タイプを除外しています:

除外する関係タイプ除外理由
jis_inclusion / gj_inclusion非異体字変換(代替変換区分2)。近似文字への便宜的な包摂であり、推移閉包に含めると楠→枬→丹→周のように無関係な文字が連鎖する
specialized_semantic特定分野での部分的意味重複。中↔塚のように字義が異なる文字が混入する

以下は推移閉包に含めています

含める関係タイプ含める理由
mj_substitution / gj_substitution代替変換区分1(異体字変換)。仕様書で「客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換」と定義されている正当な異体字関係
traditional / simplified繁体字・簡体字の対応関係
semantickSemanticVariant。一部に意味が近いだけの緩い関係も含まれるが、大半は正当な異体字
compat / z_variant / v2n互換漢字・Z異体字・手整備の異体字関係

variant_clusters: Union-Findクラスタ

variant_relationsの全関係タイプ(包摂・非異体字変換含む)を使い、Union-Findアルゴリズムで連結成分を計算したテーブルです。8,561グループ、最大117文字。

closuresと異なりフィルタリングしないため、包摂や近似関係を経由して大きなクラスタが形成される場合があります。主に内部的なグループ化に使用し、UI上のベン図表示にはvariant_closuresを使用します。

MJ縮退マップの代替変換区分

MJ縮退マップ(substitute_jisx0213_mj_1.0.txt)は、MJ文字情報の各文字についてJIS X 0213への代替変換先を定義しています。代替変換区分(typeフィールド)により、変換の性質が分かれます:

区分relation_type説明
区分00(対象外)変更なし(JIS X 0213に含まれる文字)
区分11mj_substitution異体字変換: 客観的な根拠や有識者知見に基づき、異体字関係にあると判断された文字への変換
区分22jis_inclusion非異体字変換: 異体字関係にはないが、近似する文字として変換先を提示
区分33(対象外)未定義(データ上存在しない)

区分1は異体字として信頼できる関係であり、ベン図の推移閉包に含めています。区分2は符号化の便宜上の近似であり、推移閉包からは除外しています。

IDS(漢字構成記述)詳細

IDS(Ideographic Description Sequence)は、漢字の構造を部品の組み合わせで記述する仕組みです。Unicode規格で定義されたIDC(Ideographic Description Characters, U+2FF0〜U+2FFF)を演算子として使い、構成要素を組み合わせます。

IDC(構成演算子)一覧

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⿻木一

CHISE IDS の丸数字記法

本データベースのIDS情報はCJKVI IDS(CHISE IDSに基づく)を元にしています。 CHISE IDSでは、Unicodeに収録されていない部品(未符号化コンポーネント)を丸数字(①〜⑳)で表記します。

例えば龍の IDS は ⿰𦚏⑦ です。ここで は「鳥の上部(灬を除いた部分)」を表す未符号化部品のプレースホルダーです。Unicodeにはこの部品単体のコードポイントが存在しないため、丸数字で代替されています。

主な丸数字と、それが表す部品の使用例:

丸数字使用数使用例部品の概要
176与、丝、之、兜乃に類似するストロークパターン
142不、乌、劉、印特定の筆画組み合わせ
164业、严、亙、亦特定の筆画組み合わせ
139免、兎、其、典特定の筆画組み合わせ
98亞、典、垂、壺、烏特定の筆画組み合わせ
85島、鳥、龍、華、梟鳥の上部(灬を除いた部分)
62壷、夀、婁、專、惠特定の筆画組み合わせ

丸数字はIDS検索でそのまま使用できます。例えば を含む文字を検索すると、鳥系の部品を持つ漢字が一覧されます。

なお、IDS内にCJK統合漢字拡張B以降(U+20000〜)の文字が部品として使われている場合、一般的なフォントではグリフが存在しないため、本サイトではフォントサブセット技術により動的にフォントを生成して表示しています。

IDSの地域別差異

CHISE IDSでは、同一の漢字でも地域により構成が異なる場合、[GTKV] のような地域タグで区別されています。

例: の IDS は ⿹②一[GTKV] — 地域タグにより、この構成解析がG/T/K/V地域に適用されることを示しています。

文字コードの基礎知識

Unicodeとコードポイント

Unicodeは世界中のすべての文字に固有の番号(コードポイント)を割り当てる国際規格です。コードポイントは U+ に続く16進数で表記します(例: U+4E00「一」、U+20BB7「𠮷」)。

文字空間は(Plane)に分かれます:

本データベースは BMP・SIP・TIP の全CJK統合漢字 112,459字を収録しています。さらにPlane 16(U+100000〜)にデジタル庁行政事務標準文字(GJ)の私用領域文字を含みます。

CJK統合漢字と包摂規準

Unicodeでは日本語(J)、中国語(C)、韓国語(K)の漢字をCJK統合漢字として統合管理しています。同じ字形の漢字には同一のコードポイントが割り当てられます(包摂規準)。

これにより文字数は大幅に削減されましたが、微妙な字形差が同じコードポイントに包摂される問題も生じます。例えば「骨」は日本・中国・台湾で字形が微妙に異なりますが、すべて U+9AA8 です。

包摂で統合された字形差を区別するために IVS(後述)が導入されました。また、本データベースの異体字関係のうち jis_inclusion / gj_inclusion は、この包摂に類似した「近似文字への便宜的な変換」であり、真の異体字関係とは区別して扱っています。

IVS(異体字シーケンス)

包摂規準で統合された字形差を区別するための仕組みがIVS(Ideographic Variation Sequence)です。基底文字の直後に異体字セレクタ(Variation Selector)を付加して特定の字形を指定します。

# 「葛」のIVSの例
U+845B              → 葛(基底文字、デフォルト字形)
U+845B U+E0100      → 葛󠄀(Adobe-Japan1の字形)
U+845B U+E0102      → 葛󠄂(Moji_Johoの字形)

異体字セレクタの範囲:

IVDコレクション

IVSの登録はIVD(Ideographic Variation Database)で管理されています。本データベースに収録されているコレクション:

コレクション管理者用途
Adobe-Japan1AdobeAdobe-Japan1グリフ集合。DTP・印刷業界標準
Moji_JohoIPAMJ文字情報一覧。IPAmj明朝フォントの基盤
KRName韓国韓国人名用

同じ字形でもコレクションによって異なる異体字セレクタが割り当てられている場合があるため、利用時には注意が必要です。

フォントとグリフ

CJK統合漢字の拡張領域(Extension B以降、U+20000〜)の文字は一般的なシステムフォントに収録されていないことが多く、ブラウザ上で表示できない場合があります。本サイトでは176種類のフォントをサーバーサイドで動的にサブセット化し、必要なグリフだけをWebフォントとして配信しています。

主要フォント

フォント収録範囲グリフ数ライセンス
IPAmj明朝BMP CJK統合漢字・Ext-A・互換漢字・ひらがな・カタカナ・変体仮名約60,000IPA Font License v1.0
行政事務標準文字明朝(acgjm)Plane 16 PUA(GJ文字)・BMP PUA(後方互換)9,175IPA Font License v1.0
花園明朝B(HanaMinB)CJK Ext-B〜F(SIP: U+20000〜U+2EBEF)60,317SIL OFL 1.1
全字庫正宋體Plus(TWSungPlus)Plane 15 PUA 台湾行政文字(U+F0000〜U+FFFFD)24,966SIL OFL 1.1
全字庫正宋體Ext-B(TWSungExtB)CJK Ext-B以降(U+20000〜U+2FA1D)48,812SIL OFL 1.1
Noto Serif CJK JP日本語CJK統合漢字(BMP + SIP)65,535SIL OFL 1.1
Noto Serif CJK SC/TC/HK/KR各地域のCJK統合漢字(簡体字・繁体字・香港・韓国)各65,535SIL OFL 1.1
Noto Serif(ラテン・ギリシャ・キリル)基本ラテン文字・ギリシャ文字・キリル文字2,965SIL OFL 1.1
Noto Sans Math数学記号(U+2200〜U+23FF, U+1D400〜U+1D7FF)2,655SIL OFL 1.1
Noto Sans Symbols 2記号・絵文字(U+2600〜U+27BF, U+1F000〜U+1FAFF)2,655SIL OFL 1.1

多言語スクリプト対応(160+ Noto フォント)

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+097FNoto Serif Devanagari
アラビア文字U+0600〜U+06FFNoto Naskh Arabic
ヘブライ文字U+0590〜U+05FFNoto Serif Hebrew
アルメニア文字U+0531〜U+058FNoto Serif Armenian
グルジア文字U+10A0〜U+10FFNoto Serif Georgian
タイ文字U+0E01〜U+0E5BNoto Serif Thai
エチオピア文字U+1200〜U+1399Noto Serif Ethiopic
西夏文字(タングート)U+17000〜U+18D7FNoto Serif Tangut
契丹小字U+18B00〜U+18CD5Noto Serif Khitan Small Script
楔形文字U+12000〜U+12543Noto Sans Cuneiform
エジプト聖刻文字U+13000〜U+13446Noto Sans Egyptian Hieroglyphs

完全なフォント対応表(291エントリ)はソースコード src/app/codemap/index.tsFONT_RANGES テーブルに記載されています。

フォント解決の優先順位

コードポイントからフォントを決定する際、以下の優先順位で解決されます:

  1. Plane 16 PUA(U+100000〜)→ acgjm(行政事務標準文字)
  2. Plane 15 PUA(U+F0000〜U+FFFFF)→ TWSungPlus(台湾全字庫)
  3. BMP PUA(U+E000〜U+F8FF)→ acgjm(後方互換PUA)
  4. 変体仮名(U+1B000〜U+1B16F)→ ipamjm
  5. CJK統合漢字・Ext-A・互換漢字 → ipamjm
  6. CJK Ext-B〜F(U+20000〜U+2EBEF)→ HanaMinB(60,317字)
  7. CJK Ext-I(U+2EBF0〜U+2F7FF)→ HanaMinB
  8. CJK互換補助・Ext-G/H(U+2F800〜U+3FFFF)→ NotoSerifCJKJP
  9. 数学記号 → NotoSansMath
  10. 記号・絵文字 → NotoSansSymbols2
  11. ハングル → NotoSerifCJKKR
  12. ひらがな・カタカナ・CJK記号 → ipamjm
  13. 注音符号 → NotoSerifCJKTC
  14. その他全スクリプト → FONT_RANGESテーブル(二分探索)→ NotoSerif(フォールバック)

チャンク方式によるWebフォント配信

コードマップでは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以降)についても同じ仕組みで動的にフォントを適用しています。