PHY Editor は既存エディタを改造せず自作する
PHYの正本を相対座標の木にしたため、フラットな絶対座標配列を直接 書き換える既存エディタ(KLE, kle-ng)を改造しても、編集操作の中核は 書き直しになる。ijprest KLE は全権利留保でフォーク不可。 実装計画の既存記述は未整理のまま、決定と制約だけを冒頭に追記した。 kle-serial2 の書き出しコードの出自を未確認事項 P-1 として残した。 Journal: journal/2026-09-18-editor-base.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,82 @@
|
|||||||
|
# PHY Editor の土台: KLE改造か自作か
|
||||||
|
|
||||||
|
## 結論
|
||||||
|
|
||||||
|
- **自作に決定**(ユーザー判断 2026-09-18)。以下は判断材料になった調査結果
|
||||||
|
|
||||||
|
- ijprest/keyboard-layout-editor の改造は不可。全権利留保で、作者はフォークを避けたいと明記している
|
||||||
|
- 改造の現実的な候補は adamws/kle-ng (MIT, Vue3+TS, 2026-09時点で活発)。法的には可
|
||||||
|
- ただし KLE も kle-ng も内部データはフラットな Key[] (絶対座標 + rotation_x/y)。
|
||||||
|
PHY座標モデル(相対座標の木)を採った以上、改造しても編集操作の中核は書き直しになる
|
||||||
|
- 自作寄り。KLE JSON の読み書きはライブラリで賄える(kle-serial / kle-serial2, いずれもMIT)
|
||||||
|
- 技術選定(言語・UIフレームワーク・描画・ライブラリ)は別途やり直す。Vue案はNuxtに慣れているからというだけ(ユーザー談)
|
||||||
|
|
||||||
|
## 案の比較
|
||||||
|
|
||||||
|
| 案 | ライセンス | 流用できるもの | 書き直しになるもの |
|
||||||
|
|---|---|---|---|
|
||||||
|
| ijprest KLE 改造 | 全権利留保。個別許諾要 | 描画, プロパティUI | データモデル, 編集操作。AngularJS 1.2.28/bower の保守 |
|
||||||
|
| kle-ng 改造 | MIT | 描画(ISO形状含む), プロパティUI, undo, plate/PCB生成 | keyboard.ts ストア(62KB)と、それを直接書き換える移動・回転・履歴 |
|
||||||
|
| 自作 | - | kle-serial(読), kle-serial2(読み書き) | 全部。ただし木モデルに合わせて最初から書ける |
|
||||||
|
|
||||||
|
## 検証ログ
|
||||||
|
|
||||||
|
### ijprest/keyboard-layout-editor
|
||||||
|
- LICENSE.md (ローカル HEAD d2945e5 / 本家 master 2026-09-18 取得、同文)
|
||||||
|
- "Copyright(C) 2013-2018 by Ian Prest. All rights reserved."
|
||||||
|
- "But it's not permissively licensed!"
|
||||||
|
- "In the near-term I would like to avoid forks of the website, since I feel it would cause confusion
|
||||||
|
in the community to have several similar-but-different general-purpose layout editors available."
|
||||||
|
- 別用途(メーカーのカスタマイズ用エディタ等)なら無償で特別ライセンスを出す、とある。
|
||||||
|
Beyond KLE は汎用レイアウトエディタそのものなので、この例外には当てはまりにくい
|
||||||
|
- "I claim no ownership over the input (your keyboard layouts) or output" → ビュワーとして使う・JSONを扱うのは問題なし
|
||||||
|
- 本家最終コミット 580b916 2024-09-15 "Update to https"。その前は 2019-07-04。実質停止
|
||||||
|
- 規模(HEAD): kb.js 1810 / kb.html 1410 / kb.css 453 / serial.js 374 / render.js 275 行
|
||||||
|
- 依存: angular 1.2.28, jquery 2.0.2, bootstrap 3.3.5, bower
|
||||||
|
- render.js:104-159 rotation_x/y/angle から直接変換行列を作る。kb.js で key.x / rotation_x 等への直接参照 61 箇所
|
||||||
|
- ローカルクローン(Documents/Dev/keyboard-layout-editor)の未コミット差分はPNG解像度調整と円形プロファイル追加のみ(ユーザー談)。本件と無関係
|
||||||
|
|
||||||
|
### kle-serial (ijprest)
|
||||||
|
- MIT, Copyright (c) 2013-2019 Ian Prest。npm @ijprest/kle-serial 0.15.1 (2019-06-30)
|
||||||
|
- README: "This library currently only handles deserialization; the serialization code still needs to be ported."
|
||||||
|
|
||||||
|
### kle-serial2 (adamws, ijprest/kle-serial のフォーク)
|
||||||
|
- MIT。2025-08-22作成、最終push 2026-02-14、star 1
|
||||||
|
- serialize あり。書き出しプロパティ: r rx ry x y c t ta g p sm sb st _r _rs a f fa w h w2 h2 x2 y2 l n d
|
||||||
|
- 出自の懸念: 元READMEは serialize を「KLE本体から移植予定」としていた。kle-serial2 の serialize 冒頭
|
||||||
|
(current, cluster={r,rx,ry}, align=4, rows/row)は KLE serial.js:166- と構造が似る。
|
||||||
|
ただしKLEフォーマット自体がこの構造を要求するので、流用の証拠にはならない。未確認
|
||||||
|
→ 気になるなら書き出しは自前で書く(畳み込み後の絶対座標 → KLE行形式。rx/ry選択は PHY P-1 と一体)
|
||||||
|
|
||||||
|
### adamws/kle-ng
|
||||||
|
- MIT, Copyright (c) 2025 adamws。Vue 3 + Pinia + TS + Vite, bootstrap 5, three.js, ergogen, makerjs
|
||||||
|
- 最終コミット 9eb350f 2026-09-03 (0.48.0)。star 267
|
||||||
|
- 規模: TypeScript 2.97MB + Vue 0.99MB (GitHub languages API, テスト込み)
|
||||||
|
- src/stores/keyboard.ts: `const keys: Ref<Key[]> = ref([])`。フラット、絶対座標 + rotation_x/y。階層・グループなし
|
||||||
|
- 移動: key.x = D.add(originalPos.x, snappedDeltaX) と直接書き換え
|
||||||
|
- 回転: key.rotation_angle を直接書き換え、lock-rotations時は rotation_x/y も更新
|
||||||
|
- undo: keys 全体の JSON スナップショット、50件
|
||||||
|
- matrix-drawing.ts (28KB), pcbGenerator.ts, plateGenerator.ts あり。IDX/ELC の参考になりうる(未読)
|
||||||
|
- ijprest のコードから派生したかは README に記載なし。未確認
|
||||||
|
|
||||||
|
### その他
|
||||||
|
- ymkn/keyboard-layout-studio: MIT, Vue3, SVG, KLE import, QMK keyboard.json / Vial 出力, matrix割り当て。star 4, 21 commits。回転・グループの記載なし
|
||||||
|
- ローカル Documents/Dev/kbd-editor: Nuxt3 + Pinia, 2025-07, 約2,500行 (deserializer.ts, Key.vue, KeyPropEditor.vue 等)。ユーザーが以前自作を試みたもの。うまくいかなかった記憶あり(ユーザー談)。中身の確認は保留
|
||||||
|
|
||||||
|
## 規模見積もり(PHY Editor MVP, 1人・フルタイム換算の粗い目安)
|
||||||
|
|
||||||
|
| 項目 | 自作 | kle-ng改造 |
|
||||||
|
|---|---|---|
|
||||||
|
| KLE読込 | 1-2日 (kle-serial) | 既存 |
|
||||||
|
| KLE書出 + 畳み込み | 2-4日 | 畳み込みだけ新規 |
|
||||||
|
| 木モデル・変換合成・逆変換 | 3-5日 | 3-5日 + 既存ストアへの差し込み |
|
||||||
|
| 描画(回転, ISO形状, ラベル) | 1-2週 | 既存 |
|
||||||
|
| 選択・移動・回転・スナップ | 1-2週 | 木モデル向けに書き直し 1-2週 |
|
||||||
|
| プロパティパネル | 3-5日 | 改修 数日 |
|
||||||
|
| クラスターツリー・フォーカス編集 | 1週 | 1週 |
|
||||||
|
| undo/redo | 1-2日 | スナップショット対象の差し替え |
|
||||||
|
| 既存コードの読解 | - | 1-2週 (約4MBのTS/Vue) |
|
||||||
|
| 合計 | 6-9週 | 4-7週 + 以後の恒久フォーク保守(upstream追従は事実上不可) |
|
||||||
|
|
||||||
|
- 取り込み照合(P-2)はどちらも新規で、仕様未定のため除外
|
||||||
|
- 改造で浮くのは主に描画とパネル。代わりに読解コストと恒久フォークを抱える
|
||||||
@@ -1,5 +1,13 @@
|
|||||||
# Beyond KLE: TypeScript実装計画
|
# Beyond KLE: TypeScript実装計画
|
||||||
|
|
||||||
|
## PHY Editor の土台
|
||||||
|
|
||||||
|
PHY Editor は自作する。既存のレイアウトエディタのコードを土台にしない。
|
||||||
|
PHYの正本は相対座標の木だが、既存エディタ(KLE, kle-ng)の移動・回転・undoはフラットな絶対座標の配列を直接書き換える作りで、改造しても中核は書き直しになるため。
|
||||||
|
|
||||||
|
- ijprest/keyboard-layout-editor のコードは取り込まない。全権利留保で、作者はフォークを避けたい意向を明記している。ソースを読んで挙動を確かめるのは可
|
||||||
|
- adamws/kle-ng は MIT ライセンスで、参考実装として読める
|
||||||
|
|
||||||
## プロジェクト構造
|
## プロジェクト構造
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -201,3 +209,16 @@ pnpm add -D tsup
|
|||||||
4. **KLE変換機能のプロトタイプ**
|
4. **KLE変換機能のプロトタイプ**
|
||||||
|
|
||||||
実装を開始しますか?最初にどの部分から取り組みたいでしょうか?
|
実装を開始しますか?最初にどの部分から取り組みたいでしょうか?
|
||||||
|
|
||||||
|
## 検討済み・非採用
|
||||||
|
|
||||||
|
- 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 の作者に出自を確認する。確認できない場合は書き出しを自前で書くかをユーザーが決める
|
||||||
|
|||||||
Reference in New Issue
Block a user