ルール策定前に書かれた設計ドキュメント7点を、以降の基準点として そのままの状態で記録する。CLAUDE.md のルール1〜4は未適用。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MdLT5x5ka5y6CaWLeE3EKb
4.6 KiB
4.6 KiB
Beyond KLE: TypeScript実装計画
プロジェクト構造
beyond-kle/
├── packages/
│ ├── core/ # 共通型定義とユーティリティ
│ │ ├── src/
│ │ │ ├── types/ # 各レイヤーの型定義
│ │ │ ├── validators/ # JSON Schema バリデーター
│ │ │ └── utils/ # 共通ユーティリティ
│ │ └── package.json
│ ├── phy-editor/ # PHYレイヤーエディタ
│ ├── matrix-mapper/ # IDX/ELCレイヤーマッパー
│ ├── keymap-designer/ # MAPレイヤーデザイナー
│ ├── converter/ # 既存フォーマット変換
│ └── firmware-gen/ # ファームウェア生成
├── tools/
│ ├── cli/ # CLI ツール
│ └── web-editor/ # Web統合エディタ
├── schemas/ # JSON Schema定義
├── examples/ # サンプルプロジェクト
└── docs/ # ドキュメント
開発フェーズ
Phase 1a: 基盤実装
-
型定義とSchema
- TypeScript型定義
- JSON Schema validation
- テスト用サンプルデータ
-
変換エンジン
- KLE JSON → PHY変換
- PHY → IDX自動生成
- QMK/VIA出力
-
CLIツール
- 変換機能のコマンドライン提供
- バリデーション機能
Phase 1b: エディタプロトタイプ
-
PHY Editor (Web)
- React + Canvas での編集機能
- KLE互換インポート
-
Matrix Mapper
- 視覚的マトリックス割り当て
- 最適化アルゴリズム
技術スタック
コア
- 言語: TypeScript
- ランタイム: Node.js / Bun
- パッケージ管理: pnpm + workspace
- バリデーション: Ajv (JSON Schema)
CLI
- フレームワーク: Commander.js
- 出力: chalk (色付き), table
Web Editor
- フロントエンド: React + Vite
- 描画: Konva.js / Fabric.js
- 状態管理: Zustand
- UI: Mantine / shadcn/ui
テスト
- テストランナー: Vitest
- E2E: Playwright
実装優先度
最優先 (2週間)
- 型定義とJSON Schema
- KLE → PHY変換
- PHY → IDX基本変換
- CLIでの変換確認
高優先 (1ヶ月)
- QMK/VIA出力
- 基本的なWebエディタ
- マトリックス最適化
中優先 (2ヶ月)
- 高度なエディタ機能
- プロジェクト管理
- 既存ツール連携
開発環境セットアップ
1. プロジェクト初期化
# プロジェクト作成
mkdir beyond-kle-proto
cd beyond-kle-proto
# pnpm workspace設定
echo 'packages:\n - "packages/*"\n - "tools/*"' > pnpm-workspace.yaml
# TypeScript設定
pnpm add -D typescript @types/node
npx tsc --init
# 共通依存関係
pnpm add -D vitest ajv
2. パッケージ構成
# Core package
mkdir -p packages/core/src/{types,validators,utils}
cd packages/core && pnpm init
# CLI tool
mkdir -p tools/cli/src
cd tools/cli && pnpm init
# 各エディタパッケージ
mkdir -p packages/{phy-editor,matrix-mapper,keymap-designer}
3. 開発ツール設定
# Linting & Formatting
pnpm add -D eslint prettier @typescript-eslint/eslint-plugin
# Testing
pnpm add -D @vitest/ui
# Build tools
pnpm add -D tsup
サンプルプロジェクト設計
テストケース
- 60% ANSI - 標準的なレイアウト
- Split keyboard - 左右分離型
- Ergonomic layout - カラムスタッガード + 回転
- Macro pad - シンプルな4x4
データ例
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" }
}
]
}
次のアクション
- GitHub リポジトリ作成
- 開発環境セットアップ
- 型定義の実装開始
- KLE変換機能のプロトタイプ
実装を開始しますか?最初にどの部分から取り組みたいでしょうか?