PHY: KLE JSONに識別・構造情報を埋め込まず、取り込みは照合で行う
KLEは既存のビュワーとして使えればよく、KLEで編集された時点で Beyond KLEのデータではないと線引きした。KLE JSONは素の形式で出力し、 他ツールにそのまま渡せる状態を保つ。 取り込みは手元のPHYデータとの形状+ラベル照合で行い、照合できない キーはroot直下に置く。構造の復元は保証しない。照合基準の詳細は 未確認事項 P-2 として残した。 labelへのID埋め込み、別ファイルのクラスターJSON、ゴーストキー案は いずれも不採用。 Journal: journal/2026-09-18-kle-roundtrip.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+21
-76
@@ -59,9 +59,7 @@ KLE JSONやPCB向けの出力は、階層を畳んで絶対座標に変換した
|
||||
|
||||
**外部連携での扱い**:
|
||||
|
||||
- KLE JSON出力時は、個別のキー配置のみを出力(クラスター情報は含めない)
|
||||
- 別途クラスター情報JSONとして構造を保存
|
||||
- キーIDによる紐づけで関連性を管理
|
||||
- クラスター構造はBeyond KLEのデータにのみ存在する。外部形式へは階層を畳んだキー配置だけを出力する
|
||||
|
||||
### 何かある?
|
||||
|
||||
@@ -93,14 +91,17 @@ const root: (Key | Cluster)[] = []
|
||||
|
||||
## 連携用出力形式
|
||||
|
||||
### 設計方針
|
||||
### KLEとの関係
|
||||
|
||||
KLE向けの出力は既存のKLE JSON形式を維持し、クラスター情報は別のJSONファイルとして出力する。
|
||||
両者の紐づけは、KLEのlabel部分に埋め込むユニークIDを使用する。
|
||||
KLEは、PHYデータを表示できる既存のビュワーとして扱う。
|
||||
KLEで編集された時点で、そのデータはBeyond KLEのデータではない。
|
||||
|
||||
- KLE JSONにはBeyond KLE固有の情報(キーID、クラスター構造など)を含めない。出力は素のKLE JSONで、KLE JSONを読む他ツールにそのまま渡せる
|
||||
- KLE JSONの取り込みは、手元のPHYデータとの照合で行う。IDや埋め込み情報には頼らない
|
||||
|
||||
### KLE JSON出力
|
||||
|
||||
標準的なKLE JSON形式で出力。各キーのlabelにはユニークIDを含める。
|
||||
階層を畳んで絶対座標に変換し、標準的なKLE JSON形式で出力する。
|
||||
|
||||
```ts
|
||||
type ConfigObject = {
|
||||
@@ -128,86 +129,24 @@ type ConfigObject = {
|
||||
s?: string
|
||||
}
|
||||
|
||||
type KeyLabel = string // ユニークID + 表示用ラベルを含む
|
||||
type KeyLabel = string // 表示用ラベルのみ。識別情報は含めない
|
||||
const kleData = (ConfigObject | KeyLabel)[][]
|
||||
```
|
||||
|
||||
### クラスター情報JSON
|
||||
### KLE JSONの取り込み
|
||||
|
||||
キーのクラスター構造を管理する別ファイル。
|
||||
既存のPHYデータを畳んだ配置に対して、KLE JSONの各キーを形状(位置・サイズ・回転)とラベルで照合する。
|
||||
|
||||
```ts
|
||||
interface ClusterInfo {
|
||||
id: string, // クラスターのユニークID
|
||||
name?: string, // 表示用クラスター名
|
||||
position?: Position, // クラスター自体の位置・回転情報
|
||||
keyIds: string[], // 所属するキーのIDリスト
|
||||
subClusters?: string[] // 子クラスターのIDリスト(ネスト構造用)
|
||||
}
|
||||
|
||||
interface ClusterData {
|
||||
version: string,
|
||||
profiles: Profile[], // プロファイル定義
|
||||
keys: { // キーID -> 追加情報のマップ
|
||||
[keyId: string]: {
|
||||
originalLabel?: string, // KLEのlabelから抽出した表示用文字列
|
||||
matrix?: MatrixPosition, // matrix情報(オプション)
|
||||
mapping?: KeyMapping // キーマッピング情報(オプション)
|
||||
}
|
||||
},
|
||||
clusters: ClusterInfo[] // クラスター構造定義
|
||||
}
|
||||
```
|
||||
|
||||
### 出力例
|
||||
|
||||
#### keyboard.json (KLE形式)
|
||||
|
||||
```json
|
||||
[
|
||||
["key-001\nQ", "key-002\nW", "key-003\nE"],
|
||||
["key-004\nA", "key-005\nS", "key-006\nD"]
|
||||
]
|
||||
```
|
||||
|
||||
#### keyboard-clusters.json
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"keys": {
|
||||
"key-001": { "originalLabel": "Q", "matrix": [0, 0] },
|
||||
"key-002": { "originalLabel": "W", "matrix": [0, 1] },
|
||||
"key-003": { "originalLabel": "E", "matrix": [0, 2] },
|
||||
"key-004": { "originalLabel": "A", "matrix": [1, 0] },
|
||||
"key-005": { "originalLabel": "S", "matrix": [1, 1] },
|
||||
"key-006": { "originalLabel": "D", "matrix": [1, 2] }
|
||||
},
|
||||
"clusters": [
|
||||
{
|
||||
"id": "cluster-alpha",
|
||||
"name": "英字キー",
|
||||
"keyIds": ["key-001", "key-002", "key-003", "key-004", "key-005", "key-006"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 分離設計のメリット
|
||||
|
||||
この設計により以下の利点が得られる:
|
||||
|
||||
1. **KLE互換性の維持**:既存のKLE関連ツールとの完全な互換性を保持
|
||||
2. **柔軟な拡張性**:クラスター情報を独立して管理・拡張可能
|
||||
3. **段階的移行**:既存のKLEユーザーが段階的に拡張機能を利用可能
|
||||
4. **ツール間連携**:KLE標準形式での出力により、他のキーボード設計ツールとの相互運用性を確保
|
||||
5. **データの軽量化**:KLE出力時に不要な情報を含めず、ファイルサイズを最小化
|
||||
- 照合できたキーは元のノードとして扱う。KLE側で配置が変わっていれば、元の親から見た相対座標に戻して反映する
|
||||
- 照合できないキーは root 直下に新規キーとして置く。クラスターへの割り当てはユーザーが行う
|
||||
- 構造の復元は保証しない。KLE側での編集が大きいほど、クラスター構造は失われる
|
||||
|
||||
## 検討済み・非採用
|
||||
|
||||
- キーごとの絶対座標保持 (journal/2026-09-18-phy-coordinate-model.md)
|
||||
- 相対座標と絶対座標の併記 (journal/2026-09-18-phy-coordinate-model.md)
|
||||
- ノードごとの回転中心パラメータ (journal/2026-09-18-phy-coordinate-model.md)
|
||||
- KLE JSONへの識別・構造情報の埋め込み(labelのID、`_beyondkle` メタデータ、ゴーストキー) (journal/2026-09-18-kle-roundtrip.md)
|
||||
|
||||
## 未確認事項
|
||||
|
||||
@@ -216,3 +155,9 @@ interface ClusterData {
|
||||
- 位置づけ: 本文が前提にしているものではない。連携用出力形式の設計に関わる未解決の問い
|
||||
- 現状の認識: 階層を畳んでKLEに読み込ませると行のまとまりが崩れる。他レイヤーの情報を使ってでも行ごとにまとめたいが、方法は未検討
|
||||
- 格上げ条件: 回転を含むPHYデータをKLE JSONに変換してKLE本家に読み込ませ、rotation groupと行配列がどう再構成されるかを確認する
|
||||
|
||||
### P-2 KLE JSON取り込み時の照合基準
|
||||
|
||||
- 位置づけ: 本文「KLE JSONの取り込み」の具体化に必要な未解決の問い
|
||||
- 現状の認識: 形状の許容誤差、ラベルの扱い、複数候補がある場合の決め方が未定。KLEが保存時にキーの並び順を変えるかは未確認で、配列順を照合に使えるかも分からない
|
||||
- 格上げ条件: 照合規則を決めたうえで、KLE本家でキーの移動・追加・削除をしたJSONを取り込み、意図どおりに対応づくことを確認する
|
||||
|
||||
Reference in New Issue
Block a user