492 lines
14 KiB
Markdown
492 lines
14 KiB
Markdown
|
|
# Phase 172: JsonParserBox の再利用拡大(Stage-B / selfhost / ツール統合)
|
|||
|
|
|
|||
|
|
## 0. ゴール
|
|||
|
|
|
|||
|
|
**Phase 171 で実装した JsonParserBox を、hako_check 以外の「JSON を読む .hako コード」にも適用し、JSON パーサ断片をできるだけ共通箱に集約する。**
|
|||
|
|
|
|||
|
|
目的:
|
|||
|
|
- Program(JSON v0) を読む Stage-B/selfhost 補助で JsonParserBox を使用
|
|||
|
|
- 将来の解析ツールが全部この箱を経由する状態を作る
|
|||
|
|
- JSON 処理の単一の真実(SSOT)を確立
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 背景と戦略
|
|||
|
|
|
|||
|
|
### Phase 171 での成果
|
|||
|
|
|
|||
|
|
- ✅ JsonParserBox 実装完了(454行)
|
|||
|
|
- ✅ hako_check (HC020) で使用開始
|
|||
|
|
- ✅ 289行の手書きパーサを削除(96%削減)
|
|||
|
|
|
|||
|
|
### Phase 172 の戦略
|
|||
|
|
|
|||
|
|
**再利用拡大の3ステップ**:
|
|||
|
|
|
|||
|
|
1. **再利用候補の特定**: Program(JSON v0) を読む箇所を洗い出し
|
|||
|
|
2. **薄いラッパー追加**: `parse_program()` ヘルパーを JsonParserBox に追加
|
|||
|
|
3. **段階的適用**: Stage-B/selfhost の 1-2 箇所から開始
|
|||
|
|
|
|||
|
|
### selfhost depth-2 への準備
|
|||
|
|
|
|||
|
|
- JSON 処理が共通箱に集約されることで
|
|||
|
|
- .hako JoinIR/MIR 移植時に構造が崩れにくくなる
|
|||
|
|
- selfhost depth-2 の基盤が整う
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Scope / Non-scope
|
|||
|
|
|
|||
|
|
### ✅ やること
|
|||
|
|
|
|||
|
|
1. **再利用候補の棚卸し(再スキャン)**
|
|||
|
|
- Stage-B/selfhost での JSON 利用箇所を洗い出し
|
|||
|
|
- 現状の JSON 読み取り方法を調査
|
|||
|
|
- JsonParserBox 適用可否を評価
|
|||
|
|
|
|||
|
|
2. **Program(JSON v0) 用ラッパー追加**
|
|||
|
|
- `parse_program()` メソッドを JsonParserBox に追加
|
|||
|
|
- ProgramJSONBox(薄いヘルパー型)を定義
|
|||
|
|
- Program JSON の定形構造に対応
|
|||
|
|
|
|||
|
|
3. **Stage-B/selfhost への適用**
|
|||
|
|
- 1-2 箇所から段階的に適用
|
|||
|
|
- 自前 substring 処理を JsonParserBox に置き換え
|
|||
|
|
|
|||
|
|
4. **hako_check 仕上げ**
|
|||
|
|
- Phase 171 の残りタスク完了確認
|
|||
|
|
- JsonParserBox API の十分性確認
|
|||
|
|
|
|||
|
|
5. **テスト & 回帰**
|
|||
|
|
- hako_check: HC019/HC020 スモーク
|
|||
|
|
- Stage-B/selfhost: selfhost_phase150_depth1_smoke
|
|||
|
|
- JsonParserBox: 単体テスト
|
|||
|
|
|
|||
|
|
6. **ドキュメント更新**
|
|||
|
|
|
|||
|
|
### ❌ やらないこと
|
|||
|
|
|
|||
|
|
- to_json() / serialization(Phase 173+)
|
|||
|
|
- スキーマ検証(Phase 173+)
|
|||
|
|
- 全 JSON 利用箇所の一括置き換え(段階的に)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Task 1: 再利用候補の棚卸し(再スキャン)
|
|||
|
|
|
|||
|
|
### 対象候補
|
|||
|
|
|
|||
|
|
1. **Stage-B/selfhost での JSON 利用**
|
|||
|
|
- `lang/src/compiler/entry/compiler.hako` - Program JSON 処理
|
|||
|
|
- `apps/selfhost-vm/json_loader.hako` - JSON ローダー
|
|||
|
|
- `tools/selfhost/*` - selfhost ツール群
|
|||
|
|
|
|||
|
|
2. **その他ツール・テスト**
|
|||
|
|
- `apps/tests/` 内の JSON を扱うテスト
|
|||
|
|
- 開発ツールの JSON 解析コード
|
|||
|
|
|
|||
|
|
### やること
|
|||
|
|
|
|||
|
|
1. **Program(JSON v0) 消費箇所の洗い出し**
|
|||
|
|
```bash
|
|||
|
|
rg '"version".*0' lang tools apps
|
|||
|
|
rg 'Program.*JSON' lang tools apps
|
|||
|
|
rg 'substring.*\{' lang tools apps # 自前 JSON 解析の疑い
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **各箇所の評価**
|
|||
|
|
| ファイル | 現状の読み方 | JsonParserBox 適用可否 | 優先度 |
|
|||
|
|
|---------|-------------|---------------------|--------|
|
|||
|
|
| lang/src/compiler/entry/compiler.hako | 自前 split/substring | ✅ 可能 | 高 |
|
|||
|
|
| apps/selfhost-vm/json_loader.hako | 自前 substring | ✅ 可能 | 中 |
|
|||
|
|
| tools/selfhost/helpers.hako | まだ読んでいない | ⏸️ 将来 | 低 |
|
|||
|
|
|
|||
|
|
3. **phase170_hako_json_library_design.md に追記**
|
|||
|
|
- 「Phase 172 対象候補」セクションを追加
|
|||
|
|
- 評価結果を表にまとめる
|
|||
|
|
|
|||
|
|
### 成果物
|
|||
|
|
|
|||
|
|
- 再利用候補リスト(優先度付き)
|
|||
|
|
- 各候補の評価結果
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Task 2: Program(JSON v0) 用の薄いラッパーを JsonParserBox に追加
|
|||
|
|
|
|||
|
|
### 目的
|
|||
|
|
|
|||
|
|
Program(JSON v0) の定形構造を読みやすくする
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"version": 0,
|
|||
|
|
"kind": "Program",
|
|||
|
|
"defs": [...],
|
|||
|
|
"meta": {
|
|||
|
|
"usings": [...]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### やること
|
|||
|
|
|
|||
|
|
1. **JsonParserBox に Program JSON ヘルパーを追加**
|
|||
|
|
|
|||
|
|
```hako
|
|||
|
|
static box JsonParserBox {
|
|||
|
|
// 既存
|
|||
|
|
method parse(json_str) { ... }
|
|||
|
|
method parse_object(json_str) { ... }
|
|||
|
|
method parse_array(json_str) { ... }
|
|||
|
|
|
|||
|
|
// 新規(Phase 172)
|
|||
|
|
method parse_program(json_str) {
|
|||
|
|
local obj = me.parse_object(json_str)
|
|||
|
|
if obj == null { return null }
|
|||
|
|
|
|||
|
|
// Program JSON の必須フィールド確認
|
|||
|
|
local version = obj.get("version")
|
|||
|
|
local kind = obj.get("kind")
|
|||
|
|
if version == null or kind != "Program" { return null }
|
|||
|
|
|
|||
|
|
// ProgramJSONBox を返す
|
|||
|
|
local prog = new ProgramJSONBox()
|
|||
|
|
prog._obj = obj
|
|||
|
|
return prog
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **ProgramJSONBox の定義**
|
|||
|
|
|
|||
|
|
```hako
|
|||
|
|
// 薄いラッパー: Program JSON の構造に特化
|
|||
|
|
static box ProgramJSONBox {
|
|||
|
|
_obj: MapBox # 内部で parse_object() の結果を保持
|
|||
|
|
|
|||
|
|
method get_version() {
|
|||
|
|
return me._obj.get("version")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
method get_kind() {
|
|||
|
|
return me._obj.get("kind")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
method get_defs() {
|
|||
|
|
// ArrayBox を返す
|
|||
|
|
return me._obj.get("defs")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
method get_meta() {
|
|||
|
|
// MapBox を返す
|
|||
|
|
return me._obj.get("meta")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
method get_usings() {
|
|||
|
|
local meta = me.get_meta()
|
|||
|
|
if meta == null { return null }
|
|||
|
|
return meta.get("usings")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **実装場所**
|
|||
|
|
- `tools/hako_shared/json_parser.hako` に追加
|
|||
|
|
- Phase 171 実装の拡張として統合
|
|||
|
|
|
|||
|
|
### 成果物
|
|||
|
|
|
|||
|
|
- `parse_program()` メソッド実装
|
|||
|
|
- ProgramJSONBox 型定義
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Task 3: Stage-B / selfhost 補助から JsonParserBox に寄せる
|
|||
|
|
|
|||
|
|
### 対象ファイル
|
|||
|
|
|
|||
|
|
1. **第一候補**: `lang/src/compiler/entry/compiler.hako`
|
|||
|
|
- Program(JSON v0) を読む主要箇所
|
|||
|
|
- 置き換え効果が大きい
|
|||
|
|
|
|||
|
|
2. **第二候補**: `apps/selfhost-vm/json_loader.hako`
|
|||
|
|
- JSON ローダー補助
|
|||
|
|
- 再利用性確認に適切
|
|||
|
|
|
|||
|
|
### やること
|
|||
|
|
|
|||
|
|
1. **現状の JSON 読み取り処理を特定**
|
|||
|
|
```hako
|
|||
|
|
// 修正前の例(自前 substring)
|
|||
|
|
local json_str = file.read("program.json")
|
|||
|
|
local version_pos = json_str.indexOf('"version"')
|
|||
|
|
local defs_pos = json_str.indexOf('"defs"')
|
|||
|
|
// ... 手作業の解析 ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **JsonParserBox を使用した実装に置き換え**
|
|||
|
|
```hako
|
|||
|
|
// 修正後
|
|||
|
|
local json_str = file.read("program.json")
|
|||
|
|
local prog = JsonParserBox.parse_program(json_str)
|
|||
|
|
if prog == null {
|
|||
|
|
print("[ERROR] Invalid Program JSON")
|
|||
|
|
return null
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
local version = prog.get_version()
|
|||
|
|
local defs = prog.get_defs()
|
|||
|
|
local usings = prog.get_usings()
|
|||
|
|
// 構造化されたアクセス
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **段階的適用**
|
|||
|
|
- 初回は 1 箇所のみ(lang/src/compiler/entry/compiler.hako)
|
|||
|
|
- テスト成功後、2 箇所目(apps/selfhost-vm/json_loader.hako)
|
|||
|
|
- 全箇所の一括置き換えはしない
|
|||
|
|
|
|||
|
|
### 成果物
|
|||
|
|
|
|||
|
|
- 修正済み `lang/src/compiler/entry/compiler.hako`
|
|||
|
|
- 修正済み `apps/selfhost-vm/json_loader.hako`(オプション)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Task 4: hako_check 側の JsonParserBox 利用を仕上げる
|
|||
|
|
|
|||
|
|
### やること
|
|||
|
|
|
|||
|
|
1. **Phase 171 の残りタスク確認**
|
|||
|
|
- `analysis_consumer.hako` から手書き JSON パーサが完全に削除されているか
|
|||
|
|
- `rule_dead_blocks.hako` が JsonParserBox を正しく使用しているか
|
|||
|
|
|
|||
|
|
2. **未置き換えコードの確認**
|
|||
|
|
```bash
|
|||
|
|
rg 'substring.*\{' tools/hako_check/
|
|||
|
|
rg 'indexOf.*\"' tools/hako_check/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **JsonParserBox API の十分性確認**
|
|||
|
|
- hako_check が必要とする API は揃っているか
|
|||
|
|
- 追加が必要なメソッドはあるか
|
|||
|
|
- 重い拡張は Phase 173 backlog へ
|
|||
|
|
|
|||
|
|
### 成果物
|
|||
|
|
|
|||
|
|
- hako_check における JsonParserBox 利用の完成
|
|||
|
|
- API 拡張候補リスト(Phase 173 へ)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Task 5: テストと回帰チェック
|
|||
|
|
|
|||
|
|
### テストマトリックス
|
|||
|
|
|
|||
|
|
| 対象 | テストスクリプト | 確認内容 |
|
|||
|
|
|------|---------------|---------|
|
|||
|
|
| hako_check HC019 | `tools/hako_check_deadcode_smoke.sh` | dead code 検出(回帰なし) |
|
|||
|
|
| hako_check HC020 | `tools/hako_check_deadblocks_smoke.sh` | dead block 検出(回帰なし) |
|
|||
|
|
| Stage-B/selfhost | `tools/selfhost/selfhost_phase150_depth1_smoke.sh` | Program JSON 読み込み動作 |
|
|||
|
|
| JsonParserBox | `tools/hako_shared/tests/json_parser_simple_test.hako` | 単体テスト全 PASS |
|
|||
|
|
|
|||
|
|
### やること
|
|||
|
|
|
|||
|
|
1. **hako_check スモークテスト**
|
|||
|
|
```bash
|
|||
|
|
./tools/hako_check_deadcode_smoke.sh
|
|||
|
|
./tools/hako_check_deadblocks_smoke.sh
|
|||
|
|
```
|
|||
|
|
期待: HC019/HC020 の出力が変わらない
|
|||
|
|
|
|||
|
|
2. **Stage-B/selfhost スモークテスト**
|
|||
|
|
```bash
|
|||
|
|
./tools/selfhost/selfhost_phase150_depth1_smoke.sh
|
|||
|
|
```
|
|||
|
|
期待: Program JSON 読み込みで回帰なし
|
|||
|
|
|
|||
|
|
3. **JsonParserBox 単体テスト**
|
|||
|
|
```bash
|
|||
|
|
NYASH_USE_NY_COMPILER=1 ./target/release/hakorune tools/hako_shared/tests/json_parser_simple_test.hako
|
|||
|
|
```
|
|||
|
|
期待: 全テスト PASS
|
|||
|
|
|
|||
|
|
### 成果物
|
|||
|
|
|
|||
|
|
- 全スモークテスト成功
|
|||
|
|
- 回帰なし確認
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. Task 6: ドキュメント & CURRENT_TASK 更新
|
|||
|
|
|
|||
|
|
### ドキュメント更新
|
|||
|
|
|
|||
|
|
1. **phase170_hako_json_library_design.md に追記**
|
|||
|
|
```markdown
|
|||
|
|
## Phase 172 実装結果
|
|||
|
|
|
|||
|
|
✅ JsonParserBox 再利用拡大完了
|
|||
|
|
- Program(JSON v0) 対応: parse_program() + ProgramJSONBox
|
|||
|
|
- Stage-B 統合: lang/src/compiler/entry/compiler.hako
|
|||
|
|
- selfhost 統合: apps/selfhost-vm/json_loader.hako
|
|||
|
|
- hako_check 仕上げ: Phase 171 の残りタスク完了
|
|||
|
|
|
|||
|
|
📊 統合実績:
|
|||
|
|
- hako_check: HC019/HC020 で使用(Phase 171)
|
|||
|
|
- Stage-B: Program JSON 読み込みで使用(Phase 172)
|
|||
|
|
- selfhost: JSON ローダーで使用(Phase 172)
|
|||
|
|
|
|||
|
|
📋 未統合箇所(Phase 173+ 候補):
|
|||
|
|
- tools/selfhost/helpers.hako(低優先度)
|
|||
|
|
- apps/tests/ 内の一部テスト
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **hako_check_design.md / selfhost 関連 docs を更新**
|
|||
|
|
```markdown
|
|||
|
|
### JSON 解析の実装場所
|
|||
|
|
|
|||
|
|
**Phase 172 から全て JsonParserBox に集約**:
|
|||
|
|
- 場所: tools/hako_shared/json_parser.hako
|
|||
|
|
- 利用者:
|
|||
|
|
- hako_check: MIR/CFG JSON 解析
|
|||
|
|
- Stage-B: Program(JSON v0) 読み込み
|
|||
|
|
- selfhost: JSON ローディング
|
|||
|
|
- 単一の真実(SSOT)確立
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **CURRENT_TASK.md に Phase 172 セクション追加**
|
|||
|
|
```markdown
|
|||
|
|
### Phase 172: JsonParserBox 再利用拡大 ✅
|
|||
|
|
|
|||
|
|
**完了内容**:
|
|||
|
|
- Program(JSON v0) 対応: parse_program() + ProgramJSONBox
|
|||
|
|
- Stage-B 統合: lang/src/compiler/entry/compiler.hako で使用開始
|
|||
|
|
- selfhost 統合: apps/selfhost-vm/json_loader.hako で使用開始
|
|||
|
|
- hako_check 仕上げ: Phase 171 の残りタスク完了
|
|||
|
|
|
|||
|
|
**成果**:
|
|||
|
|
- JSON 処理の単一の真実(SSOT)確立
|
|||
|
|
- hako_check/Stage-B/selfhost が同じ箱を使用
|
|||
|
|
- selfhost depth-2 への基盤整備完了
|
|||
|
|
|
|||
|
|
**次フェーズ**: Phase 173 で to_json() 逆変換、Phase 160+ で .hako JoinIR/MIR 移植
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### git commit
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
feat(json): Phase 172 JsonParserBox reuse expansion
|
|||
|
|
|
|||
|
|
✨ JsonParserBox を Stage-B/selfhost/ツールに統合!
|
|||
|
|
|
|||
|
|
🎯 Program(JSON v0) 対応:
|
|||
|
|
- parse_program() メソッド追加
|
|||
|
|
- ProgramJSONBox 薄いヘルパー定義
|
|||
|
|
- version/kind/defs/meta/usings アクセサ
|
|||
|
|
|
|||
|
|
📦 統合実績:
|
|||
|
|
- lang/src/compiler/entry/compiler.hako: Program JSON 読み込み
|
|||
|
|
- apps/selfhost-vm/json_loader.hako: JSON ローダー
|
|||
|
|
- tools/hako_check/: Phase 171 仕上げ完了
|
|||
|
|
|
|||
|
|
✅ テスト:
|
|||
|
|
- hako_check スモーク: HC019/HC020 回帰なし
|
|||
|
|
- Stage-B/selfhost スモーク: Program JSON 読み込み OK
|
|||
|
|
- JsonParserBox 単体テスト: 全 PASS
|
|||
|
|
|
|||
|
|
🏗️ SSOT 確立:
|
|||
|
|
- JSON 処理が JsonParserBox に集約
|
|||
|
|
- hako_check/Stage-B/selfhost が同じ箱を使用
|
|||
|
|
- selfhost depth-2 への基盤完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 完成チェックリスト(Phase 172)
|
|||
|
|
|
|||
|
|
- [ ] Task 1: 再利用候補の棚卸し
|
|||
|
|
- [ ] Program(JSON v0) 消費箇所の洗い出し
|
|||
|
|
- [ ] 各箇所の評価(適用可否・優先度)
|
|||
|
|
- [ ] phase170 に追記
|
|||
|
|
- [ ] Task 2: Program(JSON v0) ラッパー追加
|
|||
|
|
- [ ] parse_program() 実装
|
|||
|
|
- [ ] ProgramJSONBox 定義
|
|||
|
|
- [ ] json_parser.hako に統合
|
|||
|
|
- [ ] Task 3: Stage-B/selfhost への適用
|
|||
|
|
- [ ] lang/src/compiler/entry/compiler.hako 修正
|
|||
|
|
- [ ] apps/selfhost-vm/json_loader.hako 修正(オプション)
|
|||
|
|
- [ ] 自前 substring 処理を削除
|
|||
|
|
- [ ] Task 4: hako_check 仕上げ
|
|||
|
|
- [ ] Phase 171 残りタスク確認
|
|||
|
|
- [ ] API 十分性確認
|
|||
|
|
- [ ] 拡張候補リスト作成
|
|||
|
|
- [ ] Task 5: テスト & 回帰
|
|||
|
|
- [ ] hako_check スモーク
|
|||
|
|
- [ ] Stage-B/selfhost スモーク
|
|||
|
|
- [ ] JsonParserBox 単体テスト
|
|||
|
|
- [ ] Task 6: ドキュメント更新
|
|||
|
|
- [ ] phase170 に追記
|
|||
|
|
- [ ] hako_check_design.md 更新
|
|||
|
|
- [ ] selfhost 関連 docs 更新
|
|||
|
|
- [ ] CURRENT_TASK.md 追加
|
|||
|
|
- [ ] git commit
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 技術的ポイント
|
|||
|
|
|
|||
|
|
### Program(JSON v0) の構造
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"version": 0,
|
|||
|
|
"kind": "Program",
|
|||
|
|
"defs": [
|
|||
|
|
{"kind": "Box", "name": "Main", ...},
|
|||
|
|
{"kind": "Method", "name": "main", ...}
|
|||
|
|
],
|
|||
|
|
"meta": {
|
|||
|
|
"usings": ["nyashstd", "mylib"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ProgramJSONBox の使い方
|
|||
|
|
|
|||
|
|
```hako
|
|||
|
|
local prog = JsonParserBox.parse_program(json_str)
|
|||
|
|
if prog == null {
|
|||
|
|
print("[ERROR] Invalid Program JSON")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 型安全なアクセス
|
|||
|
|
local version = prog.get_version() // Integer
|
|||
|
|
local defs = prog.get_defs() // ArrayBox
|
|||
|
|
local usings = prog.get_usings() // ArrayBox?
|
|||
|
|
|
|||
|
|
// defs をループ
|
|||
|
|
for def in defs {
|
|||
|
|
local kind = def.get("kind")
|
|||
|
|
if kind == "Box" {
|
|||
|
|
local name = def.get("name")
|
|||
|
|
print("Box: " + name)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 段階的適用の重要性
|
|||
|
|
|
|||
|
|
- 一気に全箇所を変更しない
|
|||
|
|
- 1 箇所 → テスト → 2 箇所目 の順序
|
|||
|
|
- 問題があれば早期発見
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**作成日**: 2025-12-04
|
|||
|
|
**Phase**: 172(JsonParserBox 再利用拡大)
|
|||
|
|
**予定工数**: 2-3 時間
|
|||
|
|
**難易度**: 低-中(既存実装の適用 + 薄いラッパー追加)
|
|||
|
|
**期待効果**: JSON 処理 SSOT 確立、selfhost depth-2 基盤完成
|