Files
Beyond-KLE/implementation-plan.md
T
ewdernaandClaude Opus 5 ec36a5139a typescript-implementation-plan.md を運用ルールに沿って再編
決まったことだけを書く文書にし、implementation-plan.md に改名した。
TypeScriptの採否も技術選定のやり直しに含まれるため。

本文には自作の決定と検証用サンプルを残した。データ例は旧形式なので
変換が必要と明記した(変換は後日)。技術スタック・構成・フェーズ・
優先度・セットアップ手順はjournalに原文のまま移し、未確認事項に
P-2 技術選定、P-3 リポジトリ構成を立てた。CLAUDE.md の地図も更新。

Journal: journal/2026-09-18-typescript-implementation-plan.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 22:24:02 +09:00

3.2 KiB

Beyond KLE: 実装計画

PHY Editor の土台

PHY Editor は自作する。既存のレイアウトエディタのコードを土台にしない。 PHYの正本は相対座標の木だが、既存エディタ(KLE, kle-ng)の移動・回転・undoはフラットな絶対座標の配列を直接書き換える作りで、改造しても中核は書き直しになるため。

  • ijprest/keyboard-layout-editor のコードは取り込まない。全権利留保で、作者はフォークを避けたい意向を明記している。ソースを読んで挙動を確かめるのは可
  • adamws/kle-ng は MIT ライセンスで、参考実装として読める

検証用サンプル

テストケース

  1. 60% ANSI - 標準的なレイアウト
  2. Split keyboard - 左右分離型
  3. Ergonomic layout - カラムスタッガード + 回転
  4. Macro pad - シンプルな4x4

データ例

以下は旧形式(keys 配列、position / size.width)で書かれており、現行のPHYスキーマ(phase1-json-schema.md)に合わせた変換が必要。

60% ANSI PHY Layer

{
  "version": "1.0.0",
  "metadata": {
    "name": "60% ANSI",
    "description": "Standard 60% layout"
  },
  "profiles": [
    {
      "id": "standard",
      "name": "Cherry MX",
      "unitSize": { "x": 19.05, "y": 19.05 }
    }
  ],
  "keys": [
    // Escape key
    {
      "id": "k00", "profile": "standard",
      "position": { "x": 0, "y": 0 },
      "size": { "width": 1, "height": 1 },
      "metadata": { "label": "Esc" }
    },
    // Space bar
    {
      "id": "k60", "profile": "standard", 
      "position": { "x": 5, "y": 4 },
      "size": { "width": 6.25, "height": 1 },
      "metadata": { "label": "Space" }
    }
  ]
}

検討済み・非採用

  • ijprest/keyboard-layout-editor の改造 (journal/2026-09-18-editor-base.md)
  • adamws/kle-ng の改造 (journal/2026-09-18-editor-base.md)

未確認事項

P-1 kle-serial2 の serialize がKLE本体のコードに由来しないか

  • 位置づけ: 未解決の問い。KLE JSONの書き出しに kle-serial2 (MIT) を使うかの判断に関わる
  • 現状の認識: 本家 kle-serial は書き出しを「KLE本体から移植予定」としていた。kle-serial2 の serialize は KLE の serial.js と構造が似るが、KLEフォーマットがその構造を要求するため由来の証拠にはならない
  • 格上げ条件: kle-serial2 の作者に出自を確認する。確認できない場合は書き出しを自前で書くかをユーザーが決める

P-2 技術選定

  • 位置づけ: 未解決の問い。言語、UIフレームワーク、描画方式、状態管理、テスト、KLE JSONの読み書きに使うライブラリ
  • 現状の認識: 旧計画はReact系の構成を挙げていたが、選定の根拠はない。Vueの案もNuxtに慣れているというだけ
  • 格上げ条件: 過去の自作エディタ(Documents/Dev/kbd-editor)を振り返ったうえで、ユーザーが選ぶ

P-3 リポジトリ構成

  • 位置づけ: 未解決の問い。モノレポにするか、パッケージをどう分割するか
  • 格上げ条件: P-2 の決定後に、ユーザーと分割単位を決める