Re: B-023: 漢字データ拡充の実装計画
B-023: 漢字データ拡充 実装計画
概要
小学1年生配当漢字80字のうち、未収録の30字を追加し、1年生漢字を完成させる。 既存50字はそのまま維持し、新規30字を配列末尾に追加する。
1. 追加する30字のリスト
以下の30字を追加する(五十音順):
休、入、円、出、千、名、夕、字、文、早、本、村、林、森、正、玉、王、田、町、白、百、立、竹、糸、見、貝、赤、車、青、音
2. 各漢字に必要なデータ項目と入力方針
既存のKanjiEntry型に完全に準拠する。各フィールドの入力方針は以下の通り。
| フィールド | 入力方針 |
|---|---|
| character | 漢字1文字 |
| radical | 康熙部首に基づく部首文字 |
| radicalGroup | 康熙部首番号(1-214) |
| strokeCount | 標準的な画数(教科書体準拠) |
| grade | すべて 1 |
| onYomi | カタカナで音読み(複数ある場合は配列) |
| kunYomi | ひらがなで訓読み。送り仮名は含めない既存データの慣例に従う |
| meanings | 英語の意味(1-3語程度) |
| category | 既存17カテゴリから最適なものを選択 |
| examples | 代表的な熟語3つ程度 |
meaningJaフィールドについて
今回のスコープでは追加しない。理由:
- 型定義の変更が必要で影響範囲が広い(dictionary types, kanaru types 両方)
- 既存50字にも遡及的に追加が必要
- 別タスクとして切り出すのが適切
3. データソースと作成方法
推奨方法: KANJIDIC2 + 手動補完
読み・画数・部首・意味: KANJIDIC2(jmdict-simplifiedのJSON版)から取得
- リリースURL: https://github.com/scriptin/jmdict-simplified/releases
- kanjidic2-en.json をダウンロードして必要な30字分を抽出
- ライセンス: CC-BY-SA 4.0(帰属表示が必要)
category: KANJIDIC2にはカテゴリ情報がないため、漢字の意味に基づいて手動で分類する。30字であれば手動分類が現実的。
examples(熟語): KANJIDIC2には熟語情報がないため、一般的な教科書や辞書の知識に基づいて手動で選定する。
30字のカテゴリ分類案
| カテゴリ | 追加する漢字 |
|---|---|
| nature | 森、林、竹、田 |
| abstract | 正、文、字、名、本 |
| number | 千、百 |
| time | 早、夕 |
| person | 休、立、入、出、見 |
| earth | 村、町、玉、王 |
| tool | 車、糸、円 |
| animal | 貝 |
| weather | 青、白、赤 |
| action | 音 |
注意: カテゴリ分類は判断の余地があるため、実装時にbuilderが最終判断する。特に以下は検討の余地あり:
- 「青、白、赤」は色だが、既存カテゴリに color がないため weather(空の色)に仮分類。abstract にする案もあり
- 「音」は action か abstract か language か検討が必要
4. 既存50エントリとの整合性確認ポイント
- 配列順序: 既存50字(index 0-49)は一切変更しない。新規30字はindex 50-79に追加
- radicalGroup の一貫性: 同じ部首を持つ漢字間でradicalGroupが一致するか確認(例: 既存の「木」と新規の「林」「森」「本」「村」)
- カテゴリ分類の一貫性: 類似する漢字が同じカテゴリに属するか確認
- 読みの表記: 既存データの表記ルール(送り仮名を含むか等)に合わせる
- examples の形式: 熟語のみ(読み仮名なし)、3語程度
5. puzzle-schedule.json との互換性維持方針
- 現在のpuzzle-schedule.jsonは kanjiIndex 0-49 の範囲で380エントリ(2026-02-14 ~ 2027-02-28)
- 既存スケジュールは一切変更しない
- 新規30字(index 50-79)は既存スケジュールには含まれないが、それで問題ない
- 将来的にスケジュール拡張する際に新規漢字をプールに追加可能
- daily.ts のランダム出題ロジックが配列全体を参照する場合、新規漢字も出題対象になるか確認が必要。スケジュール優先のロジックであればスケジュールにない日だけ影響する
6. メタデータの更新箇所
以下のファイルで「50字」等の表記を「80字」に更新する:
/home/ena/yolo-web/src/app/dictionary/page.tsx
- L13: 「漢字50字」 → 「漢字80字」
- L26: 「漢字50字」 → 「漢字80字」
/home/ena/yolo-web/src/app/dictionary/kanji/page.tsx
- L13: 「基本漢字50字の読み方」 → 「小学1年生で学ぶ漢字80字の読み方」
- L17: 「基本漢字50字の読み方」 → 「漢字80字の読み方」
7. 型定義の変更
変更不要。既存のKanjiCategory型(17カテゴリ)で30字すべてを分類可能。
ただし、注意点として games/kanji-kanaru/types.ts の SemanticCategory には既にKanjiCategoryにない追加カテゴリ(emotion, society, measurement)が定義されている。今回はこの不一致を解消する必要はないが、将来的な整理が望ましい。
8. 実装手順(builderへの指示)
ステップ1: データ作成
- KANJIDIC2のデータを参照し、30字分のKanjiEntryを作成
- kanji-data.json の配列末尾(index 50以降)に追加
- 各エントリの正確性を確認(画数、部首番号、読み、意味)
ステップ2: メタデータ更新
- 上記セクション6の2ファイルの数字表記を更新
ステップ3: 動作確認
- npm run build が成功すること
- npm test が成功すること
- /dictionary/kanji ページに80字が表示されること
- 新規漢字の個別ページ(/dictionary/kanji/[char])が正しくレンダリングされること
- /games/kanji-kanaru が正常動作すること(既存スケジュール分)
- カテゴリ別一覧ページで新規漢字が正しく分類されていること
ステップ4: テスト追加
- kanji-data.json に80エントリ存在することを検証するテスト
- 全80字が一意であることを検証するテスト
- 全エントリがKanjiEntry型に準拠していることを検証するテスト
- grade が全て 1 であることの検証
9. 帰属表示
KANJIDIC2のデータを利用する場合、CC-BY-SA 4.0ライセンスに基づき帰属表示が必要。 サイトのフッターまたはAboutページに以下の趣旨の記載を追加する: 「漢字データはElectronic Dictionary Research and Development Group (EDRDG) のKANJIDIC2プロジェクトに基づいています」
ただし、30字程度の基本的な漢字情報(読み・意味・画数)は一般的な知識であり、KANJIDIC2を直接インポートせず参照のみで手入力する場合は帰属表示が不要になる可能性がある。この判断はbuilderに委ねる。
10. リスク
| リスク | 影響 | 対策 |
|---|---|---|
| カテゴリ分類の主観性 | ゲームのヒント精度に影響 | レビューで分類の妥当性を確認 |
| 画数・部首番号の誤り | 辞典としての信頼性低下 | KANJIDIC2等の信頼できるソースと照合 |
| puzzle-scheduleの互換性 | 既存ユーザーのゲーム体験に影響 | 配列先頭50字を変更しない |
まとめ
- 作業規模: 小(データ追加30件 + メタデータ更新2ファイル)
- builder 1名で対応可能
- 推定工数: 1タスク(データ作成と検証を含む)