-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
概要
Phase 4 LLMモデル選択機能の実装完了に伴い、コードレビューで特定された改善項目のリファクタリングを実施する。
🎯 改善対象
🟡 高優先度 (次スプリントで対応)
1. エラーハンドリング統一
現状問題:
Result<T, String>
,Result<T, Box<dyn Error>>
など複数のエラー型が混在- エラー情報が不十分でデバッグが困難
改善内容:
#[derive(Debug, thiserror::Error)]
pub enum LLMError {
#[error("HTTP request failed: {0}")]
Http(#[from] reqwest::Error),
#[error("Model not found: {provider}/{model_id}")]
ModelNotFound { provider: String, model_id: String },
// ... その他のエラー型
}
対象ファイル:
src/services/llm_manager.rs
src/services/model_settings.rs
src/services/model_downloader.rs
src/commands/model_*.rs
2. メモリ効率の最適化
現状問題:
- 不必要な
.clone()
操作が多数存在 Vec::collect()
の多用による無駄なメモリ確保
改善内容:
// 参照返却への変更
pub fn get_downloadable_models(&self) -> &[DownloadableModel]
// Iterator活用による効率化
pub fn get_enabled_models(&self) -> impl Iterator<Item = &ModelInfo>
3. アーキテクチャリファクタリング
現状問題:
- LLMModelManagerが複数の責任を持ち、単一責任原則違反
- 循環依存の潜在リスク
改善内容:
- 依存注入パターンでの責任分離
- LLMServiceによる統合レイヤー作成
🟢 中優先度 (中期対応)
4. 型安全性向上
改善内容:
- NewTypeパターンでString IDを型安全に
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ModelId(String);
pub struct ProviderId(String);
5. 可読性改善
改善内容:
- 長い関数の分割(Extract Method適用)
- マジックナンバーの定数化
- コメント・ドキュメント追加
6. パフォーマンス最適化
改善内容:
- 非同期処理の最適化
- キャッシュ戦略の改善
- メモリプロファイリング実施
🟢 低優先度 (長期対応)
7. テストカバレッジ向上
目標: 現在40% → 80%以上
- ユニットテスト追加
- 統合テストシナリオ拡充
- モックフレームワーク導入
8. コードスタイル統一
- clippy推奨事項への対応
- 命名規則の一貫性向上
- ログメッセージフォーマット統一
📊 品質メトリクス目標
項目 | 現状 | 目標 |
---|---|---|
循環的複雑度 | 15.2 | <10 |
エラーハンドリング | 60% | >90% |
テストカバレッジ | 40% | >80% |
重複コード | 8% | <5% |
🗓️ 実装計画
Sprint 1 (高優先度)
- 統一エラー型定義・実装
- メモリ効率化(Clone削減)
- アーキテクチャ分離開始
Sprint 2 (中優先度)
- NewType パターン導入
- 関数分割・可読性改善
- パフォーマンス測定・改善
Sprint 3 (低優先度)
- テストカバレッジ向上
- ドキュメント整備
- 最終品質チェック
🔗 関連Issue
- Phase 4 実装: Phase 4: LLMモデル選択機能 #8 (完了)
- コードレビュー結果: PR Phase 4: LLMモデル選択機能の実装 #16
✅ 完了条件
- 全ての高優先度項目が完了
- テストが全て成功
- パフォーマンステストに合格
- コードレビュー承認
Metadata
Metadata
Assignees
Labels
No labels