{"id":51110325,"url":"https://github.com/syscat64/kanji-roman","last_synced_at":"2026-06-24T17:01:16.610Z","repository":{"id":366683107,"uuid":"1277361078","full_name":"sysCat64/Kanji-Roman","owner":"sysCat64","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-22T22:58:05.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-22T23:14:21.240Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sysCat64.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-22T20:34:27.000Z","updated_at":"2026-06-22T22:58:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sysCat64/Kanji-Roman","commit_stats":null,"previous_names":["syscat64/kanji-roman"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sysCat64/Kanji-Roman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysCat64%2FKanji-Roman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysCat64%2FKanji-Roman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysCat64%2FKanji-Roman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysCat64%2FKanji-Roman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sysCat64","download_url":"https://codeload.github.com/sysCat64/Kanji-Roman/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysCat64%2FKanji-Roman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34741320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-24T17:01:13.898Z","updated_at":"2026-06-24T17:01:16.594Z","avatar_url":"https://github.com/sysCat64.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kanji-Roman\n\nJIS第一・第二水準の漢字を部首別JSONとして整理し、海外の日本語・漢字好き向けに静的HTMLサイトで公開するための設計・試作プロジェクトです。\n\n最初のMVPでは、JIS X 0208の第一・第二水準漢字を対象に、Unicode Unihanの部首情報を使って「魚へん」「糸へん」「草かんむり」「木へん」などのテーマ別データを生成します。読み、ローマ字、英語名、文化的説明、タグなどの人手確認が必要な内容は、機械生成データとは分けてキュレーションJSONとして重ねます。\n\n## Documents\n\n主要な設計と計画は `docs/` と `tools/json-generator/docs/` にあります。\n\n| File | Role |\n|---|---|\n| `docs/radical-kanji-json-tool-design.md` | JIS列挙、Unihan部首判定、キュレーションマージ、JSON生成CLIの設計書 |\n| `docs/PLAN.md` | 静的HTMLと外部JSONへ分離する公開サイトMVPの作成計画 |\n| `docs/IMPROVEMENT_BACKLOG.md` | MVP後の改善候補と、読み・ローマ字などのキュレーション追加手順 |\n| `tools/json-generator/docs/PLAN.md` | 公開サイト用JSON設計書の作成計画と、生成ツール設計への最小追記方針 |\n\n`design/radical-kanji-ui.html` は既存MVP UIの基準です。設計やデータ契約だけを扱う作業では、不用意に変更しません。\n\n## Scope\n\nこのプロジェクトでは、生成ツール側と公開サイト側の責務を分けます。\n\n| Area | Responsibility |\n|---|---|\n| JSON generation tool | JIS第一・第二水準の列挙、Unicodeコードポイント出力、JIS水準と区点の出力、Unihan `kRSUnicode` による部首絞り込み、キュレーションJSONのマージ、出力検証 |\n| Static public site | `data/site-index.json` と `data/radicals/*.json` を読み込み、部首ナビ、検索、タグ絞り込み、詳細カード、テーマ切替をクライアント側で表示 |\n\nMVPの部首分類は、見た目の位置ではなく辞書上の部首に基づきます。たとえば「漁」は構成要素として魚を含みますが、部首は水なので「魚へん」のMVPデータには含めません。構成要素検索は将来のIDS連携で扱う拡張です。\n\n## Data Generation Design\n\n生成ツールは、JIS X 0208の漢字領域をEUC-JPの区点から列挙します。\n\n- 第一水準: 16区から47区\n- 第二水準: 48区から84区\n- 対象文字数: 6,355字\n\n部首判定にはUnicode Unihanの `kRSUnicode` を使い、康熙部首番号で対象グループを絞り込みます。部首定義は `fish`, `thread`, `grass`, `tree` などの安定したIDを持ち、表示名として「魚へん」「糸へん」「草かんむり」「木へん」などを使います。\n\n生成されるitemには、次のような情報を含めます。\n\n- `char`\n- `unicode`\n- `codePoint`\n- `jis.level`\n- `jis.kuten`\n- `radical`\n- `name`\n- `meaning`\n- `readings.ja[]`\n- `readings.romaji[]`\n- `parts.ja`\n- `parts.en`\n- `note`\n- `tags[]`\n- `curationStatus`\n\n`parts.ja` と `parts.en` はUI向けの読みやすい構成表示であり、語源や成り立ちの断定ではありません。たとえば魚へんの字では `魚 + 里` や `Fish + 里 component` のように、右側の字形を残した表現を基本にします。\n\n機械生成で確定できるJIS、Unicode、部首情報と、人手確認が必要な読み、英語名、文化メモ、構成表示、タグは分離します。再生成しても手作業のキュレーションが失われない構造にします。\n出典名、出典URL、確認日、レビュー注記は generator 側のキュレーション入力と内部JSONに残し、公開サイト用JSONには出さない方針です。\n\n## Static Site JSON Contract\n\n公開サイトMVPは、サーバーAPIやDBを使わない静的構成です。UIは最初に `data/site-index.json` を読み込み、部首ナビと初期表示対象を決めます。\n\n`data/site-index.json` の主なフィールド:\n\n- `schemaVersion`\n- `defaultRadical`\n- `radicals[]`\n- `radicals[].id`\n- `radicals[].glyph`\n- `radicals[].labelJa`\n- `radicals[].labelEn`\n- `radicals[].file`\n- `radicals[].theme`\n\n部首別JSONは `data/radicals/\u003cid\u003e.json` に配置します。`site-index.json` 内の `file` は、`site-index.json` から見た相対パスにします。\n\n部首別JSONの主なフィールド:\n\n- `schemaVersion`\n- `id`\n- `glyph`\n- `title`\n- `copy`\n- `tags`\n- `items[]`\n\n`tags` には `\"All\"` を含めません。UI側がタグ一覧の先頭に `\"All\"` を追加します。\n\n`items[]` の主なフィールド:\n\n- `char`\n- `name`\n- `meaning`\n- `readings.ja[]`\n- `readings.romaji[]`\n- `unicode`\n- `jis.level`\n- `jis.kuten`\n- `parts.ja`\n- `parts.en`\n- `note`\n- `tags[]`\n- `curationStatus`\n\n公開サイトで使うJSON取得パスは、GitHub Pagesのサブパス公開でも壊れにくい相対パスにします。ローカルファイルを直接開く動作は対応前提にせず、確認はHTTPサーバー経由で行います。\n\n## UI Behavior\n\n公開サイトMVPでは、既存UIの次の挙動を維持します。\n\n- ライトテーマとダークテーマの切替\n- 部首ナビの切替\n- 検索\n- タグ絞り込み\n- ホバーまたはクリックによる詳細カード表示\n- JSON読み込み中のloading表示\n- JSON読み込み失敗時のエラー表示\n\nテーマ設定のみ `localStorage` に保存します。JSONデータはブラウザストレージに保存しません。\n\n## Local Preview\n\nローカル確認はHTTPサーバー経由で行います。\n\n```bash\npython3 -m http.server 8000\n```\n\nGitHub Pages と同じ入口を確認する場合は、ブラウザで次を開きます。\n\n```text\nhttp://localhost:8000/\n```\n\n既存MVP UIを直接確認する場合は、次を開きます。\n\n```text\nhttp://localhost:8000/design/radical-kanji-ui.html\n```\n\n静的公開用JSON分離への移行後は、初期表示、部首切替、検索、タグ、詳細カード、テーマ切替を確認します。\n\n## GitHub Pages Publishing\n\nGitHub Pages で公開する場合は、リポジトリ設定の Pages source を GitHub Actions にします。\n\n`.github/workflows/pages.yml` は `main` への push または手動実行で動きます。workflow は `hooks/preflight.sh` で公開サイト用JSONとパスを検証し、`.nojekyll`、`data/site-index.json`、`data/radicals/`、`design/radical-kanji-ui.html` を `_site` にまとめます。公開URLでアプリを直接開けるように、`design/radical-kanji-ui.html` は `_site/index.html` としても配置します。その後、`.nojekyll` を含めるために hidden files を有効にした Pages artifact としてアップロードし、`github-pages` 環境へデプロイします。\n\n## Validation\n\n設計と実装の確認では、次を重視します。\n\n- Markdownの本文が確定した表現になっていること\n- JSONが存在する場合は全件パースできること\n- `site-index.json` から参照される部首別JSONファイルが存在すること\n- `tools/json-generator/config/radicals.json` の部首ID、康熙部首番号、テーマ項目、タグが妥当であること\n- `char` と `unicode` が一致すること\n- JIS区点と `char` が重複しないこと\n- `jis.level` が1または2であること\n- 部首番号がグループ定義と一致すること\n- キュレーション対象の文字がJIS第一・第二水準に含まれること\n- 公開サイト用のパスが相対パスとして扱われること\n\n## Data Sources And Licensing\n\n生成ツールは、JIS X 0208の列挙、Unicode Unihan、将来拡張としてCJKVI IDSの利用を想定します。Unihan、IDS、辞書説明文、フォントなど外部由来データを使う場合は、ライセンスと再配布条件を確認します。\n\n英語名や文化的説明は揺れが出やすいため、`needsReview` や `curationStatus` を使って確認状態を明示します。Unicodeコードポイントは符号位置であり、表示字体はフォントに依存します。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyscat64%2Fkanji-roman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyscat64%2Fkanji-roman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyscat64%2Fkanji-roman/lists"}