# mergedサブセット版の調査・計画 更新日:2026-10-21。状態:ユーザー指定により保留。頻度資料の選定、別資料での評価、基礎文字補助枠の提案・Regular試作まで実施済み。 初回調査:HEAD `1d15c08bb202887fe7a04bc14a83c358376a6899`、続行調査:HEAD `932344750dc8ee3e5f317ebf45081ef395ab28d3`。 いずれも調査開始時のGit差分はなし。配布用ビルドへのサブセット対応は未実装。 ## 現在の判断:サブセット版の計画を保留 2026-10-21ユーザー指定。ユーザー自身のゲーム開発では、ゲーム内で使う文字から開発時にサブセット化する方が効率的だったため、 YakuHanJPの配布用サブセット版の調査・選定・実装を一旦保留する。 - 人名追加枠・低頻度文字の除外リストの調査と実装、命名の確定、`merged/full`・`merged/subset`への移行、通常ビルド・ZIPへの組み込みは進めない。 - 調査資料・候補文字リスト・評価結果・調査スクリプトは、再検討時の参考として保持する。 - 既存の配布用フォント・通常ビルド・ZIP構成は、この計画に基づいて変更しない。 - 再開はユーザーの明示的な指示を受けてから行う。以下の計画・次段階・未完了事項は、保留前の記録であり現在の実行予定ではない。 今回の変更は保留状態の文書化のみ。ゲーム側でのサブセット化手順の作成や、新しい生成処理の実装は行っていない。 ## 依頼で示された前提 - `merged/full`と`merged/subset`で分ける想定。 - ゲーム・アプリへの内包を主用途とする。 - サブセットのWebフォント版(WOFF/WOFF2・CSS・unicode-range分割)は作らない。 - 第一水準・第二水準だけで分けず、現代日本語での使用頻度を反映した文字セットを検討する。 - ファイル名のどこに`subset`を入れるかは未定。 - [ixkaito/NotoSansJP-subset](https://github.com/ixkaito/NotoSansJP-subset/blob/master/README.md)は参考例。互換や踏襲は要件ではない。 ## 保留前の推奨案(提案) 「共通の基礎文字+頻出漢字+用途上必要な追加文字」で、包含関係のある候補を比較する。 公開する段階数は容量・欠字の実測後に決める。最初から多数のバリエーションを配布しない。 続行調査ではTUBELEXを暫定採用し、BCCWJ文字表は非営利条件のため採用を保留した。 比較結果から3,000漢字前後を次の検討の中心にする案。詳細は末尾の続行調査を参照。 別資料での評価後は、上位3,000漢字+基礎679文字(既存602文字+ギリシャ文字/数学記号77文字)を土台とする。 2026-10-21のユーザー指定により、初回から人名への対応も含める。人名用の追加文字はこれから選定するため、最終総文字数は未確定。 これは追加枠の提案であり、承認済みの文字セットや公開仕様ではない。元の6候補と順位は変更していない。 汎用プリセットだけでは固有名詞や作品独自の語彙を保証できないため、将来の作品テキスト追加・欠字検査にも使える 機械可読の文字リストを設計する。初期公開の中心は汎用プリセットとし、作品専用生成機能は別段階の候補とする。 フォントの字形・約物幅・OpenType機能を維持し、文字削減と機能削除を一緒に行わない。 ### 決定:候補にあるが元フォントにない文字の扱い 2026-10-21ユーザー指定。大元の文字選定は維持し、元フォントにない候補文字は、そのフォントの生成から省いて記録する。 - 共通候補集合を`S`、対象フォントのcmapにある文字集合を`F`として、実収録文字は`S ∩ F`、省略文字は`S − F`とする。 - 一つの書体にないことを理由に、共通候補や他書体の生成対象からその文字を除かない。 - 省いた分を下位順位の文字で補充せず、別書体の字形も移植しない。同じ候補IDでも実収録数は書体ごとに異なり得る。 - 省略記録には候補ID・元フォントの識別情報・ファミリー/スタイル・文字・コードポイント・件数・理由(元フォント未収録)を含める。 内容が同じスタイルはまとめてよい。TTF/OTFで収録範囲が異なる場合は形式別にも記録する。 - 候補の目標文字数/カバー率と、実際に生成したフォントの収録数/カバー率を区別して表示する。 - この省略は生成エラーにしない。一方、元フォントにある選択文字が生成過程で落ちた場合は検証エラーにする。 現在の調査スクリプトは既にこの方式で試作しており、`report.json`の`missing_by_family`に省略文字のコードポイントと 対象スタイル、`regular_support`に基礎文字/漢字別の省略一覧と実カバー率を保存している。 候補IDは各結果のキー、元フォントのハッシュは`font_inventory`に記録し、文字はコードポイントから復元できる。 配布用ビルドへ実装するときは、人が読める文字・件数・理由も明示した省略一覧を添える。 ### 初回公開範囲・配布方針の更新 2026-10-21ユーザー指定と、それを受けた命名案の整理。 - 人名への対応を初回の範囲に含める。頻度上位漢字の選定は維持し、人名向けの追加枠を同じサブセットに統合する。 常用漢字・人名用漢字・名前に使われる異体字を比較対象として調べ、追加理由・元の候補との差・容量増を記録する。 頻度のみでは漏れる`𠮷`等も検討対象とする。具体的な文字一覧と収録数は未確定で、任意の人名を保証するという意味ではない。 - ZIPは1本とし、`YakuHanJP_v.zip`へcore・merged/full・merged/subsetをまとめる。サブセット専用ZIPへの分割案は採らない。 - `Standard`は将来の軽量版・拡張版の区別用にアシスタントが置いた仮名で、ユーザー要件ではなかった。 初回1セットの構成では外し、`merged/subset//…`、`MergedYakuHanJPSubset-Regular.ttf`のような命名案へ簡略化する。 `Subset`のファイル名内の位置は引き続き提案。内部名にも`Standard`は付けず、文字集合の版はmanifestで管理する案。 - 人名追加後も、元フォントにない文字はそのフォントだけ生成から省き、共通選定と省略記録を維持する。 既存の3,679文字の草案・実測値は、人名枠を追加する前の比較資料として保持する。通常ビルド・配布物はまだ変更していない。 ### 低頻度文字の除外候補リスト(検討方針) 2026-10-21ユーザー提案。日本語で極めて使用頻度が低い文字について、subset向けの除外候補リストを別途設ける。 この段階では文字の自動削除を承認したものではなく、具体的な除外文字・頻度の閾値は未確定。 - 元の頻度順位・基礎文字・人名追加枠の選定根拠は維持し、除外の判断を別リストで追跡する。 上位3,000に入らず初めから選ばれない漢字と、選定済み候補から意図的に除く文字を区別する。 - 調査対象は、用途上不要な可能性のある古い表記・互換記号・特殊な文字など。分類だけで一括除外せず、 各文字の実際の利用と用途を確認する。候補リスト外の文字を列挙するだけでは現在の試作容量は減らない。 - TUBELEXの不出現だけで除外しない。語彙表での記号の欠落・資料の偏りがあるため、 頻度値は資料/版・文字種・対象ジャンルとともに記録し、人名・UI・別資料で必要性を確認する。 - 基本のかな・coreの対象約物・採用する人名文字など、用途上残すと決めた文字は保持指定を優先する。 一般文章では低頻度でも人名に必要な漢字・異体字は、低頻度という理由だけで除かない。 - リストの項目は文字・コードポイント・除外理由・資料別頻度/出典・影響する用途・状態(候補/除外/維持)・判断日。 保持指定との衝突も記録し、未判断の候補をそのまま生成へ適用しない。 - 将来の生成は、共通の原候補から承認済み除外文字を引いた有効候補を作り、その後に各元フォントとの積集合を取る。 「選定上の除外」と「有効候補にはあるが元フォント未収録のため省略」を別の理由・一覧として出力する。 前者は共通の選定判断、後者はフォントごとの収録差であり、既存の省略方針を変更しない。 - 除外前後で容量、文字/文字列カバー率、人名・UIサンプル、縦書き・UVSの挙動を比較する。 コードポイントを減らしても共有グリフやOpenType依存字形が残る場合があるため、削減効果は字数から推定せず実測する。 次の選定作業では、人名追加枠と保持指定を整理したうえで除外候補を抽出する。fullの文字集合はこの除外リストの対象外。 除外リスト・適用処理は未実装で、既存の候補リストや試作フォントから文字は削っていない。 ## 現在の実装との照合 - [`scripts/build_fonts.py`](../scripts/build_fonts.py)の`merged_font()`は元フォントのcmapを保ち、約物と縦書き代替字形を置換する。 `palt/halt/vpal/vhal`による置換約物の二重詰めを抑止している。 - 現在の出力は`packages/merged//{ttf,otf}/Merged-