# Phase 15.75 Bootstrap戦略統合ドキュメント **📚 [← ../INDEX.md に戻る](../INDEX.md)** | **🔒 安全性保証・Rollback戦略 + 🔧 ツールチェーン要件** **最終更新**: 2025-10-14 **ステータス**: Phase 15.75計画段階 **目的**: MIRの疎結合を活用したゼロリスクBootstrap戦略とツールチェーン要件の完全定義 --- ## 📋 目次 1. [Executive Summary](#-executive-summary) 2. [MIR疎結合の技術的仕組み](#-1-mir疎結合の技術的仕組み) 3. [Stage 0/1/2 並行運用戦略](#-2-stage-012-並行運用戦略) 4. [Rollback手順の詳細](#-3-rollback手順の詳細) 5. [パフォーマンス境界の詳細](#-4-パフォーマンス境界の詳細) 6. ["Chicken and Egg"問題の解消](#-5-chicken-and-egg問題の解消) 7. [Bootstrap戦略の実装手順](#-6-bootstrap戦略の実装手順) 8. [リスク評価の修正](#-7-リスク評価の修正) 9. [ツールチェーン要件](#-8-ツールチェーン要件) 10. [将来の開発環境](#-9-将来の開発環境) 11. [まとめ](#-10-まとめゼロリスクbootstrap戦略) --- ## 📋 Executive Summary Phase 15.75のRust脱却は**不可逆的な書き換えではなく、実行バックエンドの追加**です。 ### 🎯 **核心原則** ``` MIR = 疎結合ポイント → Stage 0/1/2 は並行運用可能 → いつでもRollback可能 → パフォーマンス境界はMIRレベル hakorune.exe が自分自身をビルド・テスト・デバッグできる環境 = 外部依存最小化 + 段階的自己実装 ``` ### ⚠️ **従来の誤解 vs 正しい理解** #### **❌ 誤解(従来の"コンパイラ書き換え"モデル)** ``` Stage 0 ──→ Stage 1 ──→ Stage 2 (一方通行) (Rust) (Hybrid) (Hakorune) ↑ 戻れない危険地帯 ``` #### **✅ 正しい理解(Hakorune MIRモデル)** ``` MIR (疎結合) ↓ ┌─────────┼─────────┐ ↓ ↓ ↓ Stage 0 Stage 1 Stage 2 (Rust VM) (LLVM AOT)(Hako VM AOT) ← いつでも切替可能 → ``` **重要**: すべてのStageが**同じMIRを実行**するため、バックエンドはいつでも交換可能 ### 🚀 **優先度定義** - **P0 (Critical)**: なければ開発不可能(1週間以内に必要) - **P1 (High)**: 生産性に大きく影響(1ヶ月以内) - **P2 (Medium)**: あると便利(将来実装) - **P3 (Low)**: Nice-to-have(需要次第) --- ## 🔧 1. MIR疎結合の技術的仕組み ### 1.1 MIRとは何か **MIR (Mid-level Intermediate Representation)**: Hakoruneの中間表現 ```json { "functions": [{ "name": "main", "blocks": [{ "id": 0, "instructions": [ {"op": "const", "dst": 1, "value": {"Int": 42}}, {"op": "const", "dst": 2, "value": {"Int": 10}}, {"op": "binop", "dst": 3, "kind": "Add", "lhs": 1, "rhs": 2} ], "terminator": {"op": "ret", "value": {"Register": 3}} }] }] } ``` ### 1.2 MIRが提供する疎結合 ``` Source Code (.hako) ↓ [Parser] ← Stage 0: Rust / Stage 1-2: Selfhost ↓ ★ MIR (JSON) ★ ← 疎結合ポイント(安定インターフェース) ↓ [Execution Backend] ├─ Rust VM (Stage 0) ├─ LLVM AOT (Stage 1) └─ Hakorune VM AOT (Stage 2) ``` **重要な特性**: 1. **安定性**: MIRフォーマットは凍結済み(16命令で完結) 2. **独立性**: Parser と Execution は完全に分離 3. **交換可能性**: 同じMIRなら、どのバックエンドでも同じ結果 ### 1.3 実行例:同じMIRを3つのバックエンドで実行 ```bash # MIR生成(どのStageでもOK) ./hakorune-stage0.exe --emit-mir-json test.mir.json test.hako # Stage 0: Rust VM実行 ./hakorune-stage0.exe test.mir.json → 出力: 52 # Stage 1: LLVM AOT実行 ./hakorune-stage1.exe test.mir.json → 出力: 52 # Stage 2: Hakorune VM AOT実行 ./hakorune-stage2.exe test.mir.json → 出力: 52 ``` **結論**: MIRが正しければ、すべてのバックエンドで同じ結果 --- ## 🚀 2. Stage 0/1/2 並行運用戦略 ### 2.1 3つのStageの役割分担 | Stage | 実装 | 用途 | 開発速度 | 最適化 | デバッグ | |-------|------|------|---------|--------|---------| | **Stage 0** | Rust VM + Rust Parser | デバッグ・最終Rollback | 遅 | 低 | ★★★★★ | | **Stage 1** | LLVM AOT + Selfhost Parser | 本番推奨・開発 | 中 | ★★★★★ | ★★★★ | | **Stage 2** | Hakorune VM AOT + Selfhost Parser | 実験的・将来 | 高 | ★★★ | ★★ | ### 2.2 並行運用の具体例 #### **ケース1: 通常開発(Stage 1メイン)** ```bash # コード編集 vim selfhost/compiler/parser.hako # ビルド&テスト(Stage 1) ./hakorune-stage1.exe build --target selfhost/ ./hakorune-stage1.exe test --profile quick # 問題なければcommit git commit -m "feat: improve parser error messages" ``` #### **ケース2: デバッグ必要(Stage 0にRollback)** ```bash # Stage 1でバグ発見 ./hakorune-stage1.exe buggy_code.hako → Segmentation fault(原因不明) # Stage 0で詳細トレース HAKO_VM_TRACE="op=*;regs=1" ./hakorune-stage0.exe buggy_code.hako → [vm] bb=3 inst=7 boxcall recv=v%5(null) ← NULL参照発見! # 修正後、Stage 1でテスト ./hakorune-stage1.exe buggy_code.hako → 正常動作 ``` #### **ケース3: パフォーマンス検証(Stage 2実験)** ```bash # Stage 1で基準測定 time ./hakorune-stage1.exe benchmark.hako → 1.2秒 # Stage 2で比較 time ./hakorune-stage2.exe benchmark.hako → 2.5秒(遅い) # 結論: Stage 1を継続使用(問題なし) ``` ### 2.3 hakorune.exe の維持戦略 #### **方針: 3つの hakorune 実行ラインを並行維持** ``` hakorune-selfhost/ ├── bin/ │ ├── hakorune ← `target/release/nyash` ラッパー(現行実体) │ ├── hakorune-stage0 ← Rust VM(現行は `nyash` に委譲) │ └── hakorune-stage1 ← LLVM ライン(現行は `nyash --backend llvm`) ├── src/ ← Stage 0用 Rust コード(ブランチ保存) ├── selfhost/ ← Stage 1-2用 Hakoruneコード └── hako.toml ``` #### **ビルド手順** **Stage 0: Rust Bootstrap(初回のみ)** ```bash # 初回ビルド cargo build --release cp target/release/hako bin/hakorune-stage0 # 以降は保存のみ(更新不要) git checkout -b stage0-preserved git commit -m "chore: preserve Stage 0 for debugging" ``` 備考: 現時点の実体は `nyash`。`bin/` のラッパー経由で名称を `hakorune` に統一しつつ、徐々に本体も置換していく(段階移行)。 **Stage 1: LLVM ライン(メイン開発)** ```bash # Selfhost Parserでビルド ./bin/hakorune-stage0 build --target selfhost/ --backend llvm → bin/hakorune-stage1 生成 # 以降は Stage 1で自己ビルド可能 ./bin/hakorune-stage1 build --target selfhost/ --backend llvm → bin/hakorune-stage1 更新 ``` **Stage 2: Hakorune VM AOT(将来)** ```bash # Hakorune VM実装後 ./bin/hakorune-stage1 build --target selfhost/ --backend hakorune-vm → bin/hakorune-stage2 生成 # Stage 2で自己ビルド可能 ./bin/hakorune-stage2 build --target selfhost/ --backend hakorune-vm → bin/hakorune-stage2 更新 ``` --- ## 🔄 3. Rollback手順の詳細 ### 3.1 Rollback Level 1: バックエンド切替(即座) **状況**: Stage 1実行時に問題発生 ```bash # 問題発生 ./hakorune-stage1.exe problem.hako → エラー(原因不明) # 即座にStage 0へ切替 ./hakorune-stage0.exe problem.hako → 正常動作 or 詳細エラーメッセージ ``` **所要時間**: 0秒(バイナリ切替のみ) ### 3.2 Rollback Level 2: Parser Rollback(MIR経由) **状況**: Selfhost Parserにバグ(Stage 1-2共通) ```bash # Selfhost Parserでパースエラー ./hakorune-stage1.exe new_syntax.hako → Parse error(Selfhost Parserのバグ) # Stage 0(Rust Parser)で回避 ./hakorune-stage0.exe new_syntax.hako → 正常動作 # Selfhost Parserのバグ修正 vim selfhost/compiler/parser.hako # Stage 0でテスト(Rust VM) ./hakorune-stage0.exe test tests/test_parser.hako → PASS # Stage 1で再ビルド ./hakorune-stage0.exe build --target selfhost/ --backend llvm → hakorune-stage1.exe 更新 # 修正確認 ./hakorune-stage1.exe new_syntax.hako → 正常動作 ``` **所要時間**: 5-10分(修正 + テスト) ### 3.3 Rollback Level 3: Full Rollback(Git branch切替) **状況**: Phase 15.75全体を巻き戻し ```bash # 現在: Phase 15.75完了後(Stage 1運用中) git branch * phase-15.75-complete stage0-preserved main # 問題発生(致命的) ./hakorune-stage1.exe critical_app.hako → Runtime panic(修正不可能) # Stage 0ブランチへ完全Rollback git checkout stage0-preserved # Rustビルド cargo build --release # Stage 0で動作確認 ./target/release/hako critical_app.hako → 正常動作 # 問題修正後、再度Phase 15.75へ git checkout phase-15.75-complete ``` **所要時間**: 10-30分(ブランチ切替 + ビルド) --- ## 📊 4. パフォーマンス境界の詳細 ### 4.1 パフォーマンス劣化の境界 ユーザーの指摘:「パフォーマンス劣化のラインはそこ(MIRレベル)でキレます」 ``` ┌─────────────────────────┐ │ Source Code (.hako) │ │ │ ← 正しさの領域 │ ↓ Parser │ (パフォーマンス影響なし) ├─────────────────────────┤ │ ★ MIR (JSON) ★ │ ← ★パフォーマンス境界★ ├─────────────────────────┤ │ ↓ Execution Backend │ │ - Rust VM (遅) │ ← 最適化の領域 │ - LLVM AOT (高速) │ (バックエンド選択で変動) │ - Hakorune VM (中速) │ └─────────────────────────┘ ``` ### 4.2 MIR品質 = パフォーマンス上限 **重要な意味**: 1. **Selfhost Parserが生成するMIR = Rust Parserと同等** → パフォーマンス上限は保証される 2. **実行バックエンドの違い = 最適化レベルの差** → Stage 0(Rust VM): 最適化なし → Stage 1(LLVM AOT): 最適化あり(推奨) → Stage 2(Hakorune VM): 将来的に最適化予定 3. **MIRを改善すれば、すべてのStageで性能向上** ```bash # MIR最適化パス追加 ./hakorune-stage1.exe --mir-opt-level 2 program.hako → すべてのバックエンドで高速化 ``` ### 4.3 実測パフォーマンス比較(予測) | バックエンド | ビルド時間 | 実行速度 | デバッグ性 | 推奨用途 | |-------------|-----------|---------|-----------|---------| | Stage 0 (Rust VM) | 2秒 | 1.0x(基準) | ★★★★★ | デバッグ・検証 | | Stage 1 (LLVM AOT) | 5秒 | 10-50x | ★★★★ | 本番・開発 | | Stage 2 (Hako VM) | 3秒 | 2-5x(予測) | ★★ | 実験的 | **結論**: Stage 1(LLVM AOT)が最速 → メイン開発推奨 --- ## 🎯 5. "Chicken and Egg"問題の解消 ### 5.1 従来の誤解 **誤解**: 「Stage 2に移行したら、Stage 1でビルドできなくなる(循環依存)」 ``` ❌ 誤ったモデル: hakorune-stage1.exe(LLVM AOT) ↓ 削除 hakorune-stage2.exe(Hakorune VM)のみ ↓ Stage 2で問題発生 → Stage 1がない!(詰み) ``` ### 5.2 正しい理解 **正しいモデル**: 「Stage 1-2は並行維持、削除しない」 ``` ✅ 正しいモデル: hakorune-stage1.exe(LLVM AOT) ← 削除しない! ↓ 並行 hakorune-stage2.exe(Hakorune VM) ← 実験的に追加 ↓ Stage 2で問題発生 → Stage 1に戻る(問題なし) ``` ### 5.3 実際のビルドフロー #### **Phase 5完了時(Stage 1確立)** ```bash # Stage 0でStage 1ビルド(初回のみ) ./hakorune-stage0.exe build --backend llvm → hakorune-stage1.exe 生成 # Stage 1で自己ビルド可能 ./hakorune-stage1.exe build --backend llvm → hakorune-stage1.exe 更新(自己再生産) ``` #### **Phase 8完了時(Stage 2追加)** ```bash # Stage 1でStage 2ビルド ./hakorune-stage1.exe build --backend hakorune-vm → hakorune-stage2.exe 生成 # Stage 2で自己ビルド可能 ./hakorune-stage2.exe build --backend hakorune-vm → hakorune-stage2.exe 更新 # Stage 1も維持 ./hakorune-stage1.exe build --backend llvm → hakorune-stage1.exe 更新(並行維持) ``` **重要**: Stage 0/1/2すべてが自己再生産可能 → 循環依存なし --- ## 📋 6. Bootstrap戦略の実装手順 ### 6.1 Phase 1-2: Stage 1確立 **目標**: hakorune-stage1.exe(LLVM AOT)を自己ビルド可能に ```bash Week 1-2: Selfhost Parser実装 ├─ Stage 0でテスト(Rust VM) ├─ MIR出力確認(Rust Parser と一致) └─ Stage 0でStage 1ビルド Week 2終了時: ✅ hakorune-stage0.exe(保存) ✅ hakorune-stage1.exe(自己再生産可能) ``` **Rollback可能性**: いつでもStage 0に戻れる ### 6.2 Phase 3-5: Rust削減 **目標**: Rust 99,406行 → 10,400行 ```bash Week 3-4: Box移行 + Rust VM削除 + Runtime薄層化 ├─ Stage 1で開発(メイン) ├─ Stage 0で検証(並行テスト) └─ スモークテスト全pass確認 Week 4終了時: ✅ hakorune-stage0.exe(ブランチ保存) ✅ hakorune-stage1.exe(10,400行 Rust kernel) ``` **Rollback可能性**: いつでもStage 0ブランチに戻れる ### 6.3 Phase 6-8: Stage 2実装(オプション) **目標**: hakorune-stage2.exe(Hakorune VM AOT)を実験的に追加 ```bash Week 5-8: Hakorune VM実装(オプション) ├─ Stage 1で開発(メイン継続) ├─ Hakorune VM実装(新規) └─ Stage 2ビルド(実験的) Week 8終了時: ✅ hakorune-stage0.exe(ブランチ保存) ✅ hakorune-stage1.exe(メイン開発) ✅ hakorune-stage2.exe(実験的) ``` **Rollback可能性**: Stage 1-2両方維持、いつでも切替可能 --- ## 🚨 7. リスク評価の修正 ### 7.1 従来のリスク評価(誤解ベース) | リスク | レベル | 理由 | |--------|--------|------| | Rollback不可 | HIGH | Stage 2移行後は戻れない | | 循環依存 | HIGH | Chicken and Egg問題 | | デバッグ劣化 | MEDIUM | Rust VMがなくなる | ### 7.2 修正後のリスク評価(MIR疎結合ベース) | リスク | レベル | 理由 | 対策 | |--------|--------|------|------| | Rollback不可 | **NONE** | MIR疎結合により常にRollback可能 | Stage 0保存 | | 循環依存 | **NONE** | Stage 1-2並行維持 | 削除しない | | デバッグ劣化 | **NONE** | Stage 0永久保存 | ブランチ保存 | | MIR品質劣化 | **LOW** | Selfhost Parserのバグ | Stage 0で検証 | | パフォーマンス劣化 | **LOW** | Stage 2が遅い可能性 | Stage 1継続使用 | **結論**: MIR疎結合により、すべての致命的リスクが解消 --- ## 🔧 8. ツールチェーン要件 Phase 15.75でRustを削減(99,406行 → 10,400行 or 3,500行)する際、**開発継続性**を保証するために必要なツールチェーンを定義します。 用語と実体(現時点の対応) - 実行バイナリ実体: `target/release/nyash` - 呼称/ラッパー: `bin/hakorune`, `bin/hakorune-stage0`, `bin/hakorune-stage1` - Cargo alias(開発導線): `build-rust`/`run-rust`(legacy), `build-hako`/`run-hako`(plugin-only) - `.cargo/config.toml` に定義済み(Phase 15.75 名称分離)。 - 将来は実体名も `hakorune` に移行(ラッパー→本体置換の段階移行)。 ### 8.1 ビルドシステム(P0 - Critical) #### HakoBuildBox - Build Orchestrator **目的**: `cargo build` の代替として、Hakoruneプロジェクトをビルド **必要機能**: ```hakorune static box HakoBuildBox { // プロジェクト構造解析 parse_project(root_path) -> ProjectBox // 依存関係解決 resolve_dependencies(project) -> DependencyGraphBox // ビルド実行 build(project, config) -> BuildResultBox // インクリメンタルビルド incremental_build(project, changed_files) -> BuildResultBox // クリーン clean(project) -> Result } ``` **実装戦略**: **Phase 5.1: 最小実装(1週間)** ```bash # 目標: hakorune.exe 自己ビルド可能に hako build.hako --target selfhost/compiler/pipeline_v2/ # 機能: - ファイル列挙(*.hako) - using依存解決(トポロジカルソート) - MIR生成(hakorune.exe呼び出し) - LLVM AOT実行(python llvm_builder.py) ``` **実装サイズ見積もり**: 500-800行(Hakorune) **依存ライブラリ**: - FileBox (plugin) - ファイルIO - ArrayBox, MapBox (builtin) - データ構造 - StringBox (builtin) - パス操作 **代替案**: ```bash # 暫定: Makefileで代用(Phase 1-4期間) make -f hakorune.mk build ``` #### hako.toml パーサー(P0) **目的**: プロジェクト設定読み込み **必要機能**: ```hakorune static box HakoTomlBox { parse(content) -> ConfigBox get_dependencies(config) -> ArrayBox get_build_settings(config) -> MapBox get_module_paths(config) -> ArrayBox } ``` **実装戦略**: ```bash # Phase 5.1: 最小TOMLサブセット [package] name = "hakorune-selfhost" version = "0.1.0" [dependencies] selfhost = { path = "./selfhost" } [build] target = "llvm" ``` **実装サイズ見積もり**: 300-500行 **代替案**: - JSON設定ファイル(hako.json) - TOMLより簡単 - Hakorune内埋め込み設定 ### 8.2 コードエディタサポート(P1 - High) #### HakoLspBox - Language Server Protocol **目的**: VSCode/Vim等でコード補完・エラー表示 **必要機能**: ```hakorune static box HakoLspBox { // 初期化 initialize(root_uri) -> Result // 補完 textDocument_completion(params) -> CompletionListBox // 定義ジャンプ textDocument_definition(params) -> LocationBox // エラー診断 textDocument_publishDiagnostics(uri) -> DiagnosticsBox // ホバー情報 textDocument_hover(params) -> HoverBox } ``` **実装戦略**: **Phase 6.1: 最小LSP(2週間)** ``` 機能: ✅ 構文エラー表示(赤波線) ✅ using 解決(定義ジャンプ) ✅ 基本補完(static box メソッド名) 実装方法: - JSON-RPC over stdio - Parser再利用(--check-syntax mode) - シンボルテーブル構築(using追跡) ``` **実装サイズ見積もり**: 1,200-2,000行 **優先度判断**: - **P1** - エディタなしは生産性激減 - ただし Phase 1-5 は既存エディタで可能 - Phase 6 で実装開始でOK **代替案**: ```bash # 暫定: 構文チェックスクリプト hako --check-syntax file.hako ``` #### HakoFmtBox - Code Formatter(P2) **目的**: コード整形統一 **実装サイズ見積もり**: 400-800行 **優先度判断**: - **P2** - 現状手動整形で対応可能 - 複数人開発開始後に必要 ### 8.3 テストフレームワーク(P0 - Critical) #### HakoTestBox - Unit Test Framework **目的**: `cargo test` の代替 **必要機能**: ```hakorune static box HakoTestBox { // テスト実行 run_tests(test_dir) -> TestResultBox // アサーション assert_eq(actual, expected) -> Result assert_ne(actual, expected) -> Result assert(condition, message) -> Result // テストレポート report(results) -> StringBox } ``` **実装戦略**: **Phase 5.2: 最小実装(3日)** ```hakorune // テストファイル: tests/test_parser.hako using "hakorune/test" as Test static box TestParser { test_basic_expression() { local result = Parser.parse("1 + 2") Test.assert_eq(result.is_Ok(), 1) } test_invalid_syntax() { local result = Parser.parse("1 +") Test.assert(result.is_Err()) } } ``` ```bash # 実行 hako test tests/ # 出力 Running test_basic_expression... PASS Running test_invalid_syntax... PASS Test Results: 2 passed, 0 failed ``` **実装サイズ見積もり**: 200-400行 **代替案**: ```bash # 暫定: スモークテストスクリプト流用 bash tools/smokes/v2/run.sh --profile quick ``` ### 8.4 デバッグツール(P0 - Critical) #### MIRダンプツール(P0 - 実装済み✅) **現状**: `--dump-mir` で実装済み ```bash # 既存機能 hako --dump-mir program.hako hako --emit-mir-json debug.json program.hako ``` **追加で必要な機能**: ```bash # MIR最適化レベル確認 hako --dump-mir --mir-opt-level 2 program.hako # MIR diff(最適化前後) hako --dump-mir-diff program.hako ``` **実装サイズ見積もり**: 100-200行(追加分のみ) #### VM Trace Debugger(P0 - 実装済み✅) **現状**: 既に実装済み ```bash # Rust VM トレース HAKO_VM_TRACE="op=compare,binop;regs=1" hako program.hako # Rust VM ステッパ HAKO_VM_STEP=1 hako program.hako # Selfhost Mini-VM トレース # (MiniVmEntryBox.run_trace() 使用) ``` **追加で必要な機能**: ```bash # ブレークポイント HAKO_VM_BREAK="block=5,inst=3" hako program.hako # レジスタウォッチ HAKO_VM_WATCH="v%3,v%5" hako program.hako ``` **実装サイズ見積もり**: 200-300行(追加分のみ) #### Performance Profiler(P2) **目的**: ボトルネック特定 **実装サイズ見積もり**: 800-1,200行 **優先度判断**: - **P2** - 最適化フェーズで必要(Phase 8以降) - 暫定: `time` コマンドで代用 ### 8.5 パッケージマネージャー(P2 - Medium) #### HakoPkgBox - Package Manager **目的**: 外部ライブラリ管理(`cargo install` 代替) **実装サイズ見積もり**: 1,000-1,500行 **優先度判断**: - **P2** - Phase 1-6 は `using` で十分 - 外部ライブラリエコシステム成長後に必要 **代替案**: ```bash # Git submodule git submodule add https://github.com/user/hako-json-parser libs/json_parser ``` ### 8.6 コード解析ツール(P3 - Low) #### HakoLintBox - Static Analyzer(P3) **実装サイズ見積もり**: 600-1,000行 **優先度判断**: - **P3** - Nice-to-have - 現状: コードレビューで対応 #### HakoDocBox - Documentation Generator(P3) **実装サイズ見積もり**: 800-1,200行 **優先度判断**: - **P3** - 手動ドキュメント管理で十分(当面) --- ## 🚀 9. 将来の開発環境 ### 9.1 ツールチェーン実装優先度マトリックス | ツール | 優先度 | 実装時期 | 実装サイズ | 依存 | 代替案 | |--------|--------|---------|-----------|------|--------| | **HakoBuildBox** | P0 | Phase 5.1 (Week 3) | 500-800行 | FileBox | Makefile | | **HakoTomlBox** | P0 | Phase 5.1 (Week 3) | 300-500行 | - | JSON設定 | | **HakoTestBox** | P0 | Phase 5.2 (Week 3) | 200-400行 | - | Bashスクリプト | | **MIRダンプ** | P0 | ✅実装済み | +100-200行 | - | - | | **VM Trace** | P0 | ✅実装済み | +200-300行 | - | - | | **HakoLspBox** | P1 | Phase 6.1 (Week 5-6) | 1,200-2,000行 | - | --check-syntax | | **統合テスト** | P1 | Phase 7 (Week 7-8) | 600-1,000行 | - | 既存Bash | | **HakoFmtBox** | P2 | Phase 7 (Week 8) | 400-800行 | - | 手動整形 | | **HakoPkgBox** | P2 | Phase 7-8 (Week 9+) | 1,000-1,500行 | - | Git submodule | | **Profiler** | P2 | Phase 8+ | 800-1,200行 | - | time コマンド | | **HakoLintBox** | P3 | 将来 | 600-1,000行 | - | レビュー | | **HakoDocBox** | P3 | 将来 | 800-1,200行 | - | 手動 | ### 9.2 実装工数見積もり #### **P0ツール(必須 - 1ヶ月以内)** ``` HakoBuildBox: 5日(Week 3) HakoTomlBox: 3日(Week 3) HakoTestBox: 3日(Week 3) MIRダンプ強化: 2日(Week 4) VM Trace強化: 2日(Week 4) 合計: 15日 ≈ 3週間(Week 3-4) ``` #### **P1ツール(重要 - 2ヶ月以内)** ``` HakoLspBox: 10日(Week 5-6) 統合テスト: 5日(Week 7) 合計: 15日 ≈ 3週間(Week 5-7) ``` #### **P2ツール(便利 - 3ヶ月以内)** ``` HakoFmtBox: 5日(Week 8) HakoPkgBox: 10日(Week 9-10) Profiler: 8日(Week 11) 合計: 23日 ≈ 5週間(Week 8-12) ``` ### 9.3 最小実装セット(Phase 15.75完了に必要) ``` ✅ P0ツール(Week 3-4) - HakoBuildBox(500行) - HakoTomlBox(300行) - HakoTestBox(200行) - MIRダンプ(+100行) - VM Trace(+200行) 合計: 約1,300行 + 既存デバッグツール 期間: 2週間(Phase 5期間中に並行実装) ``` **結論**: Phase 15.75(1ヶ月計画)完了に必要なツールチェーンは**すべて実現可能** ### 9.4 段階的実装アプローチ ``` Week 1-2: Phase 1-2 (Selfhost Parser) → 既存 hakorune.exe 使用(ツール不要) Week 3: Phase 5.1 (P0ツール実装) → HakoBuildBox(5日) → HakoTomlBox(3日) → HakoTestBox(3日) ※並行作業: Parser開発 + ツール開発 Week 4: Phase 3-4 (Box移行 + Rust VM削除) → 既存ツール使用 → MIRダンプ強化(2日) Week 5-6: Phase 6 (P1ツール実装) → HakoLspBox(10日) ※オプション: Phase 5完了後でもOK Week 7+: P2ツール(将来実装) → 需要に応じて追加 ``` ### 9.5 ツール間依存関係 ``` ┌─────────────────┐ │ hakorune.exe │ ← 最優先(常に動作保証) └────────┬────────┘ │ ┌────┴────┐ │ MIR │ ← 疎結合ポイント └────┬────┘ │ ┌────────┴────────┐ │ HakoBuildBox │ ← ビルド統括 │ ├─ HakoTomlBox │ 設定読込 │ ├─ FileBox │ ファイルIO │ └─ hakorune.exe│ MIR生成呼出 └─────────────────┘ │ ┌────┴────┐ │ HakoTestBox │ ← テスト実行 │ └─ hakorune.exe └─────────┘ │ ┌────┴────┐ │ HakoLspBox │ ← エディタ支援 │ └─ Parser │ 構文解析再利用 └─────────┘ ``` **重要**: すべてのツールが `hakorune.exe` と `MIR` に依存 → MIRの安定性がツールチェーン全体の安定性を保証 ### 9.6 ツールチェーン品質保証戦略 ```hakorune // tests/test_hako_build.hako using "hakorune/test" as Test using "hakorune/build" as Build static box TestHakoBuild { test_simple_project() { local project = Build.parse_project("./test_fixtures/simple") Test.assert_eq(project.name(), "simple") local result = Build.build(project, null) Test.assert(result.is_Ok()) } test_dependency_resolution() { local project = Build.parse_project("./test_fixtures/with_deps") local deps = Build.resolve_dependencies(project) Test.assert_eq(deps.size(), 3) } } ``` --- ## 🎯 10. まとめ:ゼロリスクBootstrap戦略 ### 10.1 核心原則(再確認) ``` 1. MIR = 疎結合ポイント → Parser と Execution Backend は完全分離 2. Stage 0/1/2 = 並行運用 → いつでも切替可能、削除しない 3. hakorune.exe = 常に動作保証 → 開発継続性100%維持 4. パフォーマンス境界 = MIRレベル → MIRが正しければパフォーマンス保証 5. Rollback = 即座に可能 → バイナリ切替(0秒)〜 ブランチ切替(30分) 6. ツールチェーン = 段階的自己実装 → P0(1ヶ月)→ P1(2ヶ月)→ P2(3ヶ月) ``` ### 10.2 Phase 15.75の成功条件 ``` ✅ hakorune-stage1.exe が自己ビルド可能 ✅ Rust 99,406行 → 10,400行削減 ✅ スモークテスト全pass ✅ Stage 0/1並行維持 ✅ いつでもRollback可能 ✅ P0ツールチェーン完備(Build/Test/Debug) ``` ### 10.3 最終確認 **Q: Phase 15.75完了後、問題が起きたらどうする?** ```bash # A: 即座にStage 0へRollback(0秒) ./hakorune-stage0.exe problem.hako ``` **Q: Selfhost Parserにバグがあったらどうする?** ```bash # A: Stage 0(Rust Parser)で開発継続(問題なし) ./hakorune-stage0.exe build --target selfhost/ ``` **Q: Stage 2(Hakorune VM)が遅かったらどうする?** ```bash # A: Stage 1(LLVM AOT)を継続使用(問題なし) ./hakorune-stage1.exe program.hako ``` **Q: ツールチェーンが間に合わなかったらどうする?** ```bash # A: 代替案で継続(Makefile/Bash/既存ツール) make -f hakorune.mk build bash tools/smokes/v2/run.sh --profile quick ``` **結論**: すべてのケースでRollback可能 + ツールチェーン段階実装 → **ゼロリスクBootstrap戦略** --- ## 🔗 関連ドキュメント - [Phase 15.75 INDEX](./INDEX.md) - [Phase 15.75 Master Roadmap](./PHASE_15_75_RUST_FREE_ROADMAP.md) - [Implementation Phases](./implementation_phases.md) - [TODO Roadmap](./TODO_ROADMAP.md) - [Timeline Analysis](./TIMELINE_ANALYSIS.md) - [Velocity Analysis](./VELOCITY_ANALYSIS.md) --- ## 📝 変更履歴 - 2025-10-14: BOOTSTRAP_STRATEGY_MIR_ROLLBACK.md と TOOLCHAIN_REQUIREMENTS.md を統合 - MIR疎結合によるRollback能力の詳細説明 - Stage 0/1/2並行運用戦略の定義 - "Chicken and Egg"問題の解消 - パフォーマンス境界の明確化 - ツールチェーン要件の完全定義 - 段階的実装アプローチの統合 - 2025-10-13: 元の2ファイル作成(Claude Code + ユーザー指摘反映)