IDX: キー番号の正本としてIDXレイヤーを確定し、MAPの参照をPHYへ移す

キー番号はPHYの幾何からもELCの配線からも導出できない決めごとなので、IDXが正本を持つ。
公開した基板のキー番号は他人のキーマップが依存する公開インターフェースであり、
出力のたびに生成し直さず固定する。

「最も重要な抽象化層」「最も欠けている層」という位置づけは誤りだったので落とした。
QMKのLAYOUTマクロの引数順、ZMKのmatrix transformのmap、KMKのcoord_mappingとして
既に存在していて、形式化されていないだけである。

あわせて2点。MAPはキー番号ではなくPHYのキーIDを参照する(IDXへの挿入でMAPがずれないため)。
IDXの保存形式は order: string[] とし、ELCのLEDChain.orderと同じく並びの位置を番号とする。

phase1-json-schema.md の P-1 を解消。

Journal: journal/2026-09-21-idx-necessity.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 08:52:27 +09:00
co-authored by Claude Opus 5
parent fdd3c7def1
commit 2eb2867c13
6 changed files with 263 additions and 54 deletions
+17 -13
View File
@@ -16,8 +16,8 @@
## レイヤー構造
レイヤーは一列に積み上がらない。ELCとIDXはそれぞれ独立にPHYを参照する。
ELCはIDXを参照せず、IDXもELCを参照しない。
レイヤーは一列に積み上がらない。ELC・IDX・MAPはそれぞれ独立にPHYを参照する。
ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照しない。
他レイヤーからキーや部品を指す参照には、PHYのノードIDを使う。
### 1. PHYレイヤー (物理配置)
@@ -37,18 +37,22 @@ ELCはIDXを参照せず、IDXもELCを参照しない。
### 3. IDXレイヤー (キー識別)
- **役割**: PHYのキーと"キー番号"の対応付け
- **役割**: PHYのキーに"キー番号"を与える
- **入力**: PHYのキーID
- **重要性**: 物理世界と論理世界を繋ぐ最も重要な抽象化層
- **出力**: キーIDとキー番号の対応
- **備考**: 現状のエコシステムで最も欠けている層
- **対応ツール**: QMKの `LAYOUT` マクロ、ZMKの matrix transform、KMKの `coord_mapping`
- **出力**: 番号を振るキーの並び。並びの位置がキー番号
- **備考**: キー番号はPHYの幾何からもELCの配線からも導出しない(導出すると、幾何の編集や再配線でキーマップがずれる)
- **備考**: キー番号は公開インターフェースであり、出力のたびに生成し直さず固定する
- **備考**: マトリックス座標とLEDの識別番号はIDXが持たない(どちらも配線で決まるためELCが持つ)
- **備考**: 既存のエコシステムでは、この並びが `LAYOUT` マクロの引数順などとして手書きされている。欠けている層ではなく、形式化されていない層
### 4. MAPレイヤー (キーマップ)
- **役割**: キー番号とキーコードの対応
- **役割**: キーとキーコードの対応
- **入力**: PHYのキーID
- **対応ツール**: ファームウェア、VIA、Remap
- **出力**: レイヤー別キーコード配列
- **出力**: レイヤー別キーコード
- **備考**: キーの参照にキー番号を使わない。配列としての並べ替えは、出力時にIDXの並び順で行う
### 5. IMEレイヤー (入力変換)
@@ -81,7 +85,7 @@ ELCはIDXを参照せず、IDXもELCを参照しない。
#### Keymap Designer
- キー番号のリストを入力
- PHY JSONを入力
- レイヤー別キーコード割り当て
- VIA/Remapとの互換性
- 出力: MAP JSON
@@ -111,11 +115,11 @@ PHY → ELC
PHY → IDX
Input: キーID + 配置
Output: キーIDとキー番号の対応
Output: 番号を振るキーIDの並び
IDX → MAP
Input: キー番号のリスト
Output: レイヤー別キーコード配列
PHY → MAP
Input: キーID
Output: レイヤー別キーコード
All → Firmware
Output: QMK keyboard.json / VIA JSON / KMK .py