599 lines
15 KiB
Markdown
599 lines
15 KiB
Markdown
|
|
# Phase 1実装ガイド - 緊急対応項目
|
|||
|
|
|
|||
|
|
**対象期間**: 1-2週間
|
|||
|
|
**目標**: 最も影響の大きい3つの巨大ファイル/モジュールを整理
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. handlers/calls.rs分割(49,750行)
|
|||
|
|
|
|||
|
|
### 1.1 現状分析
|
|||
|
|
|
|||
|
|
**ファイルパス**: `src/backend/mir_interpreter/handlers/calls.rs`
|
|||
|
|
**行数**: 49,750行(プロジェクト最大)
|
|||
|
|
|
|||
|
|
### 1.2 責務の分類
|
|||
|
|
|
|||
|
|
calls.rsを詳細調査し、以下のカテゴリに分類:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 調査コマンド
|
|||
|
|
cd /home/tomoaki/git/hakorune-selfhost
|
|||
|
|
rg "^pub\(super\) fn|^fn " src/backend/mir_interpreter/handlers/calls.rs | head -50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**予想される責務**:
|
|||
|
|
1. 関数呼び出し解決 (resolution)
|
|||
|
|
2. 呼び出しディスパッチ (dispatch)
|
|||
|
|
3. 引数処理 (argument handling)
|
|||
|
|
4. 戻り値処理 (return value handling)
|
|||
|
|
5. エラーハンドリング (error handling)
|
|||
|
|
|
|||
|
|
### 1.3 分割戦略
|
|||
|
|
|
|||
|
|
#### ステップ1: 分析・マッピング(1日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 関数一覧を抽出
|
|||
|
|
rg "^pub\(super\) fn|^fn " src/backend/mir_interpreter/handlers/calls.rs \
|
|||
|
|
> /tmp/calls_functions.txt
|
|||
|
|
|
|||
|
|
# 依存関係を分析
|
|||
|
|
rg "self\." src/backend/mir_interpreter/handlers/calls.rs \
|
|||
|
|
| sort | uniq > /tmp/calls_dependencies.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**作業内容**:
|
|||
|
|
- [ ] 全関数の責務を分類
|
|||
|
|
- [ ] 関数間の依存関係を可視化
|
|||
|
|
- [ ] 共有される型・定数を特定
|
|||
|
|
|
|||
|
|
#### ステップ2: ディレクトリ構造作成(0.5日)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
handlers/
|
|||
|
|
└── calls/
|
|||
|
|
├── mod.rs # 公開インターフェース
|
|||
|
|
├── resolution.rs # 呼び出し解決
|
|||
|
|
├── dispatch.rs # ディスパッチロジック
|
|||
|
|
├── arguments.rs # 引数処理
|
|||
|
|
├── returns.rs # 戻り値処理
|
|||
|
|
├── errors.rs # エラーハンドリング
|
|||
|
|
└── shared.rs # 共有型・定数
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**実装**:
|
|||
|
|
```bash
|
|||
|
|
cd /home/tomoaki/git/hakorune-selfhost
|
|||
|
|
mkdir -p src/backend/mir_interpreter/handlers/calls
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ3: 段階的移動(2日)
|
|||
|
|
|
|||
|
|
**移動順序**(依存の少ない順):
|
|||
|
|
1. `shared.rs` - 共有型・定数
|
|||
|
|
2. `errors.rs` - エラー型
|
|||
|
|
3. `arguments.rs` - 引数処理
|
|||
|
|
4. `returns.rs` - 戻り値処理
|
|||
|
|
5. `resolution.rs` - 解決ロジック
|
|||
|
|
6. `dispatch.rs` - メインディスパッチ
|
|||
|
|
7. `mod.rs` - 統合
|
|||
|
|
|
|||
|
|
**各ファイルのテンプレート**:
|
|||
|
|
```rust
|
|||
|
|
// src/backend/mir_interpreter/handlers/calls/resolution.rs
|
|||
|
|
use super::shared::*;
|
|||
|
|
use super::errors::*;
|
|||
|
|
use crate::backend::mir_interpreter::MirInterpreter;
|
|||
|
|
use crate::backend::vm_types::VMError;
|
|||
|
|
|
|||
|
|
impl MirInterpreter {
|
|||
|
|
/// 呼び出しターゲットを解決
|
|||
|
|
pub(in crate::backend::mir_interpreter) fn resolve_call_target(
|
|||
|
|
&self,
|
|||
|
|
func_name: &str,
|
|||
|
|
) -> Result<CallTarget, VMError> {
|
|||
|
|
// ... 実装
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ4: 統合・テスト(0.5日)
|
|||
|
|
|
|||
|
|
**mod.rsの作成**:
|
|||
|
|
```rust
|
|||
|
|
// src/backend/mir_interpreter/handlers/calls/mod.rs
|
|||
|
|
mod shared;
|
|||
|
|
mod errors;
|
|||
|
|
mod arguments;
|
|||
|
|
mod returns;
|
|||
|
|
mod resolution;
|
|||
|
|
mod dispatch;
|
|||
|
|
|
|||
|
|
// 必要に応じて再エクスポート
|
|||
|
|
pub(super) use resolution::*;
|
|||
|
|
pub(super) use dispatch::*;
|
|||
|
|
// ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**handlers/mod.rsの更新**:
|
|||
|
|
```rust
|
|||
|
|
// src/backend/mir_interpreter/handlers/mod.rs
|
|||
|
|
mod calls; // calls.rs → calls/mod.rs
|
|||
|
|
|
|||
|
|
impl MirInterpreter {
|
|||
|
|
pub(super) fn execute_instruction(&mut self, inst: &MirInstruction) -> Result<(), VMError> {
|
|||
|
|
match inst {
|
|||
|
|
MirInstruction::Call { ... } => self.handle_call(...)?,
|
|||
|
|
// ...
|
|||
|
|
}
|
|||
|
|
Ok(())
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ5: 検証(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# コンパイル確認
|
|||
|
|
cargo build --release
|
|||
|
|
|
|||
|
|
# テスト実行
|
|||
|
|
cargo test --package nyash_rust --lib backend::mir_interpreter
|
|||
|
|
|
|||
|
|
# スモークテスト
|
|||
|
|
./tools/smokes/v2/run.sh --profile quick --filter "call_*"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 1.4 成功基準
|
|||
|
|
|
|||
|
|
- [ ] calls.rsが6つのファイルに分割(各5,000-10,000行以下)
|
|||
|
|
- [ ] コンパイルエラーなし
|
|||
|
|
- [ ] 既存テストが全てパス
|
|||
|
|
- [ ] スモークテストが全てパス
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. runner/modes/common.rs分割(14,000行)
|
|||
|
|
|
|||
|
|
### 2.1 現状分析
|
|||
|
|
|
|||
|
|
**ファイルパス**: `src/runner/modes/common.rs`
|
|||
|
|
**行数**: 14,000行
|
|||
|
|
**問題**: 「共通処理」という曖昧な責務
|
|||
|
|
|
|||
|
|
### 2.2 責務の分類
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 関数一覧抽出
|
|||
|
|
rg "^pub fn|^fn " src/runner/modes/common.rs > /tmp/common_functions.txt
|
|||
|
|
|
|||
|
|
# インポート分析
|
|||
|
|
rg "^use " src/runner/modes/common.rs | sort | uniq > /tmp/common_imports.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**予想される責務**:
|
|||
|
|
1. ファイルI/O処理
|
|||
|
|
2. MIRコンパイル・実行
|
|||
|
|
3. using/namespace解決
|
|||
|
|
4. 環境変数処理
|
|||
|
|
5. エラーハンドリング
|
|||
|
|
|
|||
|
|
### 2.3 分割戦略
|
|||
|
|
|
|||
|
|
#### ステップ1: 責務マッピング(1日)
|
|||
|
|
|
|||
|
|
**分析スクリプト**:
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# analyze_common.sh
|
|||
|
|
file="src/runner/modes/common.rs"
|
|||
|
|
|
|||
|
|
echo "=== 関数分析 ==="
|
|||
|
|
rg "^pub fn|^fn " "$file" | awk '{print $2}' | sed 's/(.*//' | sort
|
|||
|
|
|
|||
|
|
echo "=== use文分析 ==="
|
|||
|
|
rg "^use " "$file" | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
|
|||
|
|
|
|||
|
|
echo "=== MIRに関連する関数 ==="
|
|||
|
|
rg "fn.*mir" "$file" -i
|
|||
|
|
|
|||
|
|
echo "=== 実行に関連する関数 ==="
|
|||
|
|
rg "fn.*execute|fn.*run" "$file" -i
|
|||
|
|
|
|||
|
|
echo "=== 解決に関連する関数 ==="
|
|||
|
|
rg "fn.*resolve" "$file" -i
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ2: 新構造の設計(0.5日)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
runner/
|
|||
|
|
├── execution/ # 実行関連(common.rsから移動)
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── vm.rs # VM実行
|
|||
|
|
│ ├── llvm.rs # LLVM実行
|
|||
|
|
│ ├── pyvm.rs # PyVM実行
|
|||
|
|
│ └── prepare.rs # 実行準備
|
|||
|
|
├── pipeline/ # パイプライン処理
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── compilation.rs # MIRコンパイル
|
|||
|
|
│ ├── preprocessing.rs
|
|||
|
|
│ └── postprocessing.rs
|
|||
|
|
├── resolution/ # using/namespace解決
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── using.rs
|
|||
|
|
│ ├── namespace.rs
|
|||
|
|
│ └── prelude.rs
|
|||
|
|
└── modes/ # 既存(execution/等からインポート)
|
|||
|
|
├── mod.rs
|
|||
|
|
├── vm.rs # execution::vm を呼ぶだけ
|
|||
|
|
├── llvm.rs
|
|||
|
|
└── pyvm.rs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ3: 段階的移動(2日)
|
|||
|
|
|
|||
|
|
**移動順序**:
|
|||
|
|
1. **Phase A**: resolution/ に using解決関連を移動
|
|||
|
|
2. **Phase B**: pipeline/ に MIRコンパイル関連を移動
|
|||
|
|
3. **Phase C**: execution/ に実行関連を移動
|
|||
|
|
4. **Phase D**: modes/ を薄いラッパーに変更
|
|||
|
|
|
|||
|
|
**Phase A実装例**:
|
|||
|
|
```rust
|
|||
|
|
// src/runner/resolution/using.rs
|
|||
|
|
use crate::runner::modes::common_util::resolve::using_resolution::*;
|
|||
|
|
use std::path::Path;
|
|||
|
|
|
|||
|
|
/// using target を解決
|
|||
|
|
pub fn resolve_using_target(
|
|||
|
|
target: &str,
|
|||
|
|
context: Option<&Path>,
|
|||
|
|
) -> Result<String, String> {
|
|||
|
|
// ... common.rsから移動した実装
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Phase D実装例**:
|
|||
|
|
```rust
|
|||
|
|
// src/runner/modes/vm.rs
|
|||
|
|
use crate::runner::execution;
|
|||
|
|
use crate::runner::pipeline;
|
|||
|
|
use crate::cli::CliGroups;
|
|||
|
|
|
|||
|
|
pub fn execute_vm_mode(groups: &CliGroups, filename: &str) -> i32 {
|
|||
|
|
// 薄いラッパー - 実際の処理は execution/pipeline/ に委譲
|
|||
|
|
let module = match pipeline::compile_file(filename) {
|
|||
|
|
Ok(m) => m,
|
|||
|
|
Err(e) => {
|
|||
|
|
eprintln!("❌ Compilation error: {}", e);
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
execution::run_vm(&module, groups)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ4: common.rsの削除(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 移動後、common.rsが空になったことを確認
|
|||
|
|
wc -l src/runner/modes/common.rs # 目標: 50行以下
|
|||
|
|
|
|||
|
|
# 削除または最小限のre-export
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**最小限のcommon.rs**:
|
|||
|
|
```rust
|
|||
|
|
// src/runner/modes/common.rs
|
|||
|
|
// 後方互換性のための re-export のみ
|
|||
|
|
#[deprecated(note = "Use crate::runner::execution instead")]
|
|||
|
|
pub use crate::runner::execution::*;
|
|||
|
|
|
|||
|
|
#[deprecated(note = "Use crate::runner::pipeline instead")]
|
|||
|
|
pub use crate::runner::pipeline::*;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ5: テスト・検証(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# コンパイル確認
|
|||
|
|
cargo build --release
|
|||
|
|
|
|||
|
|
# 統合テスト
|
|||
|
|
cargo test --package nyash_rust --lib runner
|
|||
|
|
|
|||
|
|
# E2Eテスト
|
|||
|
|
./tools/smokes/v2/run.sh --profile quick
|
|||
|
|
./tools/smokes/v2/run.sh --profile integration
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.4 成功基準
|
|||
|
|
|
|||
|
|
- [ ] common.rsが1,000行以下(理想: 100行以下のre-export)
|
|||
|
|
- [ ] 新構造(execution/pipeline/resolution/)が明確
|
|||
|
|
- [ ] 全テストがパス
|
|||
|
|
- [ ] deprecation警告が適切に表示される
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. runtime/plugin_loader_v2/階層整理
|
|||
|
|
|
|||
|
|
### 3.1 現状分析
|
|||
|
|
|
|||
|
|
**現在の構造**:
|
|||
|
|
```
|
|||
|
|
runtime/
|
|||
|
|
└── plugin_loader_v2/
|
|||
|
|
├── mod.rs
|
|||
|
|
├── stub.rs
|
|||
|
|
└── enabled/
|
|||
|
|
├── mod.rs
|
|||
|
|
├── globals.rs
|
|||
|
|
├── method_resolver.rs
|
|||
|
|
├── types.rs
|
|||
|
|
├── extern_functions.rs
|
|||
|
|
├── ffi_bridge.rs
|
|||
|
|
├── host_bridge.rs
|
|||
|
|
├── instance_manager.rs
|
|||
|
|
├── errors.rs
|
|||
|
|
└── loader/ # 5階層目!
|
|||
|
|
├── mod.rs
|
|||
|
|
├── specs.rs
|
|||
|
|
├── metadata.rs
|
|||
|
|
├── singletons.rs
|
|||
|
|
├── library.rs
|
|||
|
|
├── config.rs
|
|||
|
|
└── util.rs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**問題点**:
|
|||
|
|
- 最深5階層(`runtime/plugin_loader_v2/enabled/loader/specs.rs`)
|
|||
|
|
- `enabled/`という曖昧な名前
|
|||
|
|
- `loader/`が1階層深い
|
|||
|
|
|
|||
|
|
### 3.2 新構造の設計
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
runtime/
|
|||
|
|
└── plugins/ # plugin_loader_v2 → plugins
|
|||
|
|
├── mod.rs
|
|||
|
|
├── stub.rs # プラグイン無効時
|
|||
|
|
├── core/ # enabled → core
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── types.rs
|
|||
|
|
│ ├── globals.rs
|
|||
|
|
│ ├── method_resolver.rs
|
|||
|
|
│ └── instance_manager.rs
|
|||
|
|
├── loader/ # 1階層上げる
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── specs.rs
|
|||
|
|
│ ├── metadata.rs
|
|||
|
|
│ ├── singletons.rs
|
|||
|
|
│ └── library.rs
|
|||
|
|
├── bridge/ # FFI/ブリッジ処理
|
|||
|
|
│ ├── mod.rs
|
|||
|
|
│ ├── ffi.rs # ffi_bridge.rs → ffi.rs
|
|||
|
|
│ ├── host.rs # host_bridge.rs → host.rs
|
|||
|
|
│ └── extern_functions.rs
|
|||
|
|
├── config.rs # loader/config.rs → トップレベル
|
|||
|
|
└── errors.rs # トップレベルへ
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**改善点**:
|
|||
|
|
- 最深4階層(`runtime/plugins/loader/specs.rs`)
|
|||
|
|
- 明確な責務分離(core/loader/bridge)
|
|||
|
|
- 短いインポートパス
|
|||
|
|
|
|||
|
|
### 3.3 移行戦略
|
|||
|
|
|
|||
|
|
#### ステップ1: 新ディレクトリ作成(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /home/tomoaki/git/hakorune-selfhost
|
|||
|
|
mkdir -p src/runtime/plugins/{core,loader,bridge}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ2: ファイル移動(1日)
|
|||
|
|
|
|||
|
|
**移動計画**:
|
|||
|
|
```bash
|
|||
|
|
# Phase A: 独立ファイル
|
|||
|
|
mv src/runtime/plugin_loader_v2/stub.rs src/runtime/plugins/
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/errors.rs src/runtime/plugins/
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/loader/config.rs src/runtime/plugins/
|
|||
|
|
|
|||
|
|
# Phase B: core/
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/{types,globals,method_resolver,instance_manager}.rs \
|
|||
|
|
src/runtime/plugins/core/
|
|||
|
|
|
|||
|
|
# Phase C: bridge/
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/ffi_bridge.rs src/runtime/plugins/bridge/ffi.rs
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/host_bridge.rs src/runtime/plugins/bridge/host.rs
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/extern_functions.rs src/runtime/plugins/bridge/
|
|||
|
|
|
|||
|
|
# Phase D: loader/
|
|||
|
|
mv src/runtime/plugin_loader_v2/enabled/loader/*.rs src/runtime/plugins/loader/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ3: モジュール宣言更新(0.5日)
|
|||
|
|
|
|||
|
|
**plugins/mod.rs**:
|
|||
|
|
```rust
|
|||
|
|
// src/runtime/plugins/mod.rs
|
|||
|
|
#[cfg(not(feature = "disable-plugins"))]
|
|||
|
|
pub mod core;
|
|||
|
|
#[cfg(not(feature = "disable-plugins"))]
|
|||
|
|
pub mod loader;
|
|||
|
|
#[cfg(not(feature = "disable-plugins"))]
|
|||
|
|
pub mod bridge;
|
|||
|
|
|
|||
|
|
#[cfg(feature = "disable-plugins")]
|
|||
|
|
pub mod stub;
|
|||
|
|
|
|||
|
|
pub mod config;
|
|||
|
|
pub mod errors;
|
|||
|
|
|
|||
|
|
// 後方互換性のための re-export
|
|||
|
|
#[cfg(not(feature = "disable-plugins"))]
|
|||
|
|
pub use core::{PluginBoxType, MethodHandle};
|
|||
|
|
#[cfg(not(feature = "disable-plugins"))]
|
|||
|
|
pub use loader::PluginLoaderV2;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**runtime/mod.rs**:
|
|||
|
|
```rust
|
|||
|
|
// src/runtime/mod.rs
|
|||
|
|
pub mod plugins; // plugin_loader_v2 → plugins
|
|||
|
|
|
|||
|
|
// 後方互換性
|
|||
|
|
#[deprecated(note = "Use crate::runtime::plugins instead")]
|
|||
|
|
pub use plugins as plugin_loader_v2;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ4: インポート更新(1日)
|
|||
|
|
|
|||
|
|
**検索・置換**:
|
|||
|
|
```bash
|
|||
|
|
# 全ファイルでインポートパスを更新
|
|||
|
|
find src -name "*.rs" -type f -exec sed -i \
|
|||
|
|
's/crate::runtime::plugin_loader_v2/crate::runtime::plugins/g' {} \;
|
|||
|
|
|
|||
|
|
find src -name "*.rs" -type f -exec sed -i \
|
|||
|
|
's/crate::runtime::plugin_loader_v2::enabled/crate::runtime::plugins::core/g' {} \;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**手動確認箇所**:
|
|||
|
|
- `src/runner/plugins.rs`
|
|||
|
|
- `src/backend/mir_interpreter/handlers/boxes_plugin.rs`
|
|||
|
|
- `src/runtime/unified_registry.rs`
|
|||
|
|
|
|||
|
|
#### ステップ5: テスト・検証(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# コンパイル確認(プラグイン有効)
|
|||
|
|
cargo build --release
|
|||
|
|
|
|||
|
|
# コンパイル確認(プラグイン無効)
|
|||
|
|
cargo build --release --features disable-plugins
|
|||
|
|
|
|||
|
|
# プラグインテスト
|
|||
|
|
cargo test --package nyash_rust --lib runtime::plugins
|
|||
|
|
|
|||
|
|
# E2Eテスト
|
|||
|
|
NYASH_SKIP_TOML_ENV=1 ./tools/smoke_plugins.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### ステップ6: 旧ディレクトリ削除(0.5日)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 移行完了後
|
|||
|
|
rm -rf src/runtime/plugin_loader_v2
|
|||
|
|
|
|||
|
|
# Git確認
|
|||
|
|
git status
|
|||
|
|
git diff --stat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.4 成功基準
|
|||
|
|
|
|||
|
|
- [ ] 最深階層が4階層以下
|
|||
|
|
- [ ] `plugin_loader_v2` → `plugins` に完全移行
|
|||
|
|
- [ ] 全テストがパス
|
|||
|
|
- [ ] deprecation警告が適切に機能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Phase 1全体のチェックリスト
|
|||
|
|
|
|||
|
|
### 準備(開始前)
|
|||
|
|
|
|||
|
|
- [ ] Gitブランチ作成: `refactor/phase1-module-structure`
|
|||
|
|
- [ ] ベースラインテスト実行・記録
|
|||
|
|
- [ ] バックアップ取得
|
|||
|
|
|
|||
|
|
### 実装(1-2週間)
|
|||
|
|
|
|||
|
|
#### Week 1
|
|||
|
|
- [ ] Day 1-2: calls.rs分析・分割計画
|
|||
|
|
- [ ] Day 3-4: calls.rs移動・統合
|
|||
|
|
- [ ] Day 5: calls.rs検証・テスト
|
|||
|
|
|
|||
|
|
#### Week 2
|
|||
|
|
- [ ] Day 1-2: common.rs分析・分割計画
|
|||
|
|
- [ ] Day 3-4: common.rs移動・統合
|
|||
|
|
- [ ] Day 5: common.rs検証
|
|||
|
|
|
|||
|
|
#### Week 2 (並行可能)
|
|||
|
|
- [ ] Day 1-2: plugin_loader_v2移行計画
|
|||
|
|
- [ ] Day 3-4: plugin_loader_v2移動・統合
|
|||
|
|
- [ ] Day 5: plugin_loader_v2検証
|
|||
|
|
|
|||
|
|
### 検証(完了後)
|
|||
|
|
|
|||
|
|
- [ ] 全コンパイルエラー解消
|
|||
|
|
- [ ] 全ユニットテストパス
|
|||
|
|
- [ ] スモークテストパス(quick/integration)
|
|||
|
|
- [ ] ドキュメント更新
|
|||
|
|
- [ ] PRレビュー・マージ
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. ロールバック計画
|
|||
|
|
|
|||
|
|
### トラブル発生時の対応
|
|||
|
|
|
|||
|
|
**軽微な問題**(コンパイルエラー等):
|
|||
|
|
```bash
|
|||
|
|
# 部分的に戻す
|
|||
|
|
git checkout HEAD -- src/backend/mir_interpreter/handlers/calls/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**重大な問題**(実行時エラー・テスト失敗):
|
|||
|
|
```bash
|
|||
|
|
# ブランチ全体を破棄
|
|||
|
|
git checkout main
|
|||
|
|
git branch -D refactor/phase1-module-structure
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**再実行の判断基準**:
|
|||
|
|
- 問題の原因が明確で、修正に1日以内
|
|||
|
|
- それ以外はロールバックして再計画
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. コミュニケーション
|
|||
|
|
|
|||
|
|
### チーム共有
|
|||
|
|
|
|||
|
|
**開始時**:
|
|||
|
|
- [ ] CURRENT_TASK.mdに記載
|
|||
|
|
- [ ] チームに通知(Issue/PR作成)
|
|||
|
|
|
|||
|
|
**進捗報告**(毎日):
|
|||
|
|
- [ ] 完了した作業
|
|||
|
|
- [ ] 発見した問題
|
|||
|
|
- [ ] 翌日の予定
|
|||
|
|
|
|||
|
|
**完了時**:
|
|||
|
|
- [ ] PR作成
|
|||
|
|
- [ ] レビュー依頼
|
|||
|
|
- [ ] ドキュメント更新を含める
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 次のステップ
|
|||
|
|
|
|||
|
|
Phase 1完了後、Phase 2(高優先度項目)に進む:
|
|||
|
|
- BID関連モジュール統一
|
|||
|
|
- boxes/カテゴリ再編
|
|||
|
|
- runner/modes/common_util/再構成
|
|||
|
|
|
|||
|
|
**Phase 2実装ガイド**: `PHASE2_IMPLEMENTATION_GUIDE.md`(別途作成)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**このガイドに従って、Phase 1の3項目を確実に完了させましょう!**
|