# Phase 32 INDEX - Hakorune Static Analyzer MVP **Phase番号**: 32 **名称**: Hakorune Static Analyzer - Dead Code Detector MVP **状態**: 🟡 計画完了、実装準備中(構造改訂版) **期間**: 2025-10-20 → 2025-10-27 (7日間) **優先度**: HIGH ⭐⭐⭐⭐⭐ **Ring位置**: Ring-1(Meta/自己ホスト) --- ## 📚 ドキュメント構成 | ファイル | 説明 | 状態 | |---------|------|------| | **README.md** | Phase概要・目標・アーキテクチャ(改訂版) | ✅ 完成 | | **PLAN.md** | 7日間詳細実装計画(改訂版) | ✅ 完成 | | **INDEX.md** | このファイル(ナビゲーション) | ✅ 完成 | --- ## 🎯 Phase 32 概要 ### 目標 **HakoruneでHakoruneコードを解析する静的解析ツール(デッドコード検出器)の実装** ### スコープ - ✅ MIR JSONからデッドコード検出 - ✅ Gate-C/AST Strict MIR前提の厳密解析 - ✅ テキストレポート出力(診断サマリ) - ✅ 95%以上の精度目標 ### 非スコープ(Phase 33以降) - ❌ 重複コード検出(Phase 33) - ❌ 複雑度メトリクス(Phase 34) - ❌ マルチファイル解析(Phase 35) - ❌ JSON/DOT出力(Phase 36) --- ## 📋 実装計画サマリー | Day | タスク | 成果物 | LOC | |-----|--------|--------|-----| | 1 | スケルトン作成 | driver/ast_scan/mir_scan/report + README | 180 | | 2 | MIR走査基盤 | mir_scan_box.hako(関数抽出) | 150 | | 3 | 呼び出しグラフ構築 | mir_scan_box.hako拡張(Graph) | 250 | | 4 | BFS到達可能性 | mir_scan_box.hako完成 | 300 | | 5 | レポート生成 | report_box.hako完成 | 120 | | 6 | スモークテスト整備 | 3本(happy/happy/負例) | 180 | | 7 | セルフホスト解析 | ドキュメント + 実用化 | 50 | | **Total** | | | **1,230** | --- ## 🏗️ 成果物の場所 ### 実装ファイル(改訂版) ``` selfhost/analyzer/ ├── hako_module.toml # exports 最小(selfhost.analyzer.*) ├── boxes/ │ ├── driver_box.hako # 入口: 入力→走査→レポート │ ├── ast_scan_box.hako # AST Strict前提の走査 │ ├── mir_scan_box.hako # Gate-C Strict MIR JSONの走査 │ └── report_box.hako # 集計と文字列整形、出力 ├── README.md # 責務/入出力/ENV/非対象 └── smokes/ ├── analyzer_ast_strict_ok_vm.sh ├── analyzer_mir_gatec_ok_vm.sh └── analyzer_bad_mir_fail_vm.sh # 負例・診断固定 ``` ### ドキュメント ``` docs/private/roadmap/phases/phase-32/ ├── README.md # 本Phase概要(改訂版) ├── PLAN.md # 実装計画(改訂版) └── INDEX.md # このファイル ``` ### 設計ドキュメント(既存) ``` docs/development/proposals/ ├── analyzer-mvp-summary.md # MVPサマリー ├── hakorune-static-analyzer-feasibility.md # 実現可能性調査 ├── analyzer-implementation-guide.md # 実装ガイド(SSOT要約をselfhost/analyzer/README.mdに) └── dead-code-detection/ ├── call-graph-algorithm-detailed-design.md └── call-graph-visualization.md ``` --- ## 🔗 関連Phase ### 前提Phase - **Phase 12.7**: continue実装 ✅ - **Phase 15**: Everything is Box ✅ - **Phase 20**: Hakorune VM実装 ✅ - **Phase 31**: Gate-C/AST Strict確立 ✅ ### 後続Phase(予定) - **Phase 33**: 重複コード検出(1週間) - **Phase 34**: 複雑度メトリクス(1週間) - **Phase 35**: マルチファイル解析(2週間) - **Phase 36**: 可視化・出力(2週間) --- ## 📊 進捗状況 ### 完了チェックリスト **設計フェーズ** ✅ - [x] 実現可能性調査(Task 8) - [x] アルゴリズム設計(Task 9) - [x] 重複検出設計(Task 10) - [x] Phase 32 計画作成 - [x] 構造改訂(selfhost/analyzer/ 配置確定) **実装フェーズ** 🟡 - [ ] Day 1: スケルトン作成 - [ ] Day 2: MIR走査基盤 - [ ] Day 3: 呼び出しグラフ - [ ] Day 4: BFS到達可能性 - [ ] Day 5: レポート生成 - [ ] Day 6: スモークテスト - [ ] Day 7: セルフホスト解析 **検証フェーズ** ⏳ - [ ] 精度95%以上確認 - [ ] 処理速度5秒以内確認 - [ ] セルフホストコード実用化 --- ## 🎓 学習リソース ### selfhost/shared から再利用 1. **BoxHelpers** - JSON解析パターン 2. **MirSchema** - MIR構造定義 3. **JsonEmit** - MapBox→JSON文字列変換 ### Rustコードベース参考箇所 1. **src/mir/optimizer.rs** - デッドコード検出パターン 2. **src/mir/verification.rs** - Callee型のパース 3. **src/mir/builder/** - MIR構築パターン ### 既存Hakoruneコード 1. **apps/selfhost-compiler/builder/rewrite/known.hako** - continueの実例 2. **selfhost/shared/json/** - JSON処理パターン 3. **selfhost/hakorune-vm/** - MapBox/ArrayBox実践例 --- ## 🚀 クイックスタート ### 今すぐ始める(Day 1) ```bash # 1. ディレクトリ作成 mkdir -p selfhost/analyzer/{boxes,smokes} # 2. hako_module.toml作成 cat > selfhost/analyzer/hako_module.toml << 'EOF' [package] name = "selfhost.analyzer" version = "0.1.0" [exports] driver = "boxes/driver_box.hako" ast_scan = "boxes/ast_scan_box.hako" mir_scan = "boxes/mir_scan_box.hako" report = "boxes/report_box.hako" [dependencies] BoxHelpers = "selfhost.shared.box_helpers" MirSchema = "selfhost.shared.mir.schema" JsonEmit = "selfhost.shared.json.emit" EOF # 3. DriverBox スケルトン作成 cat > selfhost/analyzer/boxes/driver_box.hako << 'EOF' using selfhost.analyzer.mir_scan as MirScanBox using selfhost.analyzer.report as ReportBox static box DriverBox { birth() { # 空のbirth } run_from_string(input, kind) { return "[DriverBox] Not implemented yet" } run_from_box(input, kind) { local result result = new MapBox() return result } } EOF # 4. 残りのBoxスケルトンも同様に作成 # (PLAN.md Day 1参照) ``` --- ## 💡 重要な設計判断 ### ✅ 決定事項 1. **配置**: selfhost/analyzer/(Ring-1: Meta/自己ホスト) - apps/toolsではない 2. **責務分離**: driver/ast_scan/mir_scan/report - 単一Boxではない 3. **依存**: selfhost/shared のみ - 外部I/Oなし 4. **Gate-C/AST Strict**: 既定ON - 厳密型保証 5. **Fail-Fast**: フォールバック禁止 - Silent failure なし 6. **テスト先行**: ドキュメント→スモーク→実装 ### ⚠️ 制約事項 1. **外部I/Oなし** - 入力は文字列/MapBoxのみ 2. **プラグイン化なし** - 当面VM経由のみ 3. **CLI化なし** - Phase 32では実装せず(将来tools/に追加可能) --- ## 📈 成功メトリクス | メトリクス | 目標値 | 測定方法 | |-----------|--------|------------| | **精度** | >95% | セルフホストコード手動検証 | | **再現率** | >90% | 既知デッドコード検出率 | | **処理速度** | <5秒 | 1,000行ファイル解析 | | **LOC** | ~1,230行 | 実装コード総量 | | **テスト** | 3件以上 | スモークテスト(happy/happy/負例) | --- ## 🏆 期待される成果 ### 技術的成果 1. 95%精度のデッドコード検出器 2. cargo-udepsの15倍精度(25% → 95%) 3. セルフホスト開発の加速 ### 戦略的成果 1. 論文ネタ(PLDI SRC / ICSE Demo) 2. Everything is Box のショーケース 3. コミュニティ貢献 --- ## 📞 サポート ### 質問・相談 - **設計相談**: `docs/development/proposals/` 参照 - **実装相談**: README.md のアーキテクチャセクション - **バグ報告**: PLAN.md のリスク & 対策セクション ### 関連ドキュメント - [Phase 32 README](./README.md) - 概要・アーキテクチャ(改訂版) - [Phase 32 PLAN](./PLAN.md) - 7日間実装計画(改訂版) - [MVPサマリー](../../development/proposals/analyzer-mvp-summary.md) - [アルゴリズム設計](../../development/proposals/dead-code-detection/call-graph-algorithm-detailed-design.md) - [実装ガイド](../../development/proposals/analyzer-implementation-guide.md) --- **最終更新**: 2025-10-19(構造改訂版) **次回レビュー**: 2025-10-20 (Day 1完了時)