Skip to content

Commit faf55b2

Browse files
kako-junclaude
andcommitted
refactor: Phase 2.5 開始 - diffx-core のモジュール化(進行中 30%)
## 完了した作業 ### 1. types.rs の作成 ✅ - DiffResult, DiffOptions などの型定義を抽出 - 約130行のクリーンな型モジュール ### 2. parser/ モジュールの完全作成 ✅ 8ファイル、約500行: - mod.rs - モジュール宣言と再エクスポート - format.rs - FileFormat、フォーマット検出、ディスパッチ - json.rs - JSON パーサー - yaml.rs - YAML パーサー - toml.rs - TOML パーサー + 変換ヘルパー - xml.rs - XML パーサー + add_to_parent ヘルパー - ini.rs - INI パーサー - csv.rs - CSV パーサー ## 未完了の作業(次のセッションで継続) 1. lib.rs の更新(モジュールインポート、既存コード削除) 2. diff/ モジュールの作成(差分検出ロジック) 3. io/ モジュールの作成(ファイル・ディレクトリ操作) 4. コンパイル確認 5. 基本動作確認 6. diffx-cli のリファクタリング ## 目標構造 ``` diffx-core/src/ ├── lib.rs # 公開API(50-100行) ├── types.rs # 型定義 ✅ ├── parser/ # パーサーモジュール ✅ │ ├── mod.rs │ ├── format.rs │ ├── json.rs │ ├── yaml.rs │ ├── toml.rs │ ├── xml.rs │ ├── ini.rs │ └── csv.rs ├── diff/ # 差分検出 ⏸️ └── io/ # ファイル操作 ⏸️ ``` 詳細: `.claude/reboot/refactoring-progress.md` 参照 進捗率: 約30% 完了 🤖 Generated with Claude Code Co-Authored-By: Claude <[email protected]>
1 parent 9530d46 commit faf55b2

12 files changed

Lines changed: 980 additions & 1 deletion

File tree

.claude/reboot/refactoring-plan.md

Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
# リファクタリング計画
2+
3+
作成日: 2025-11-14
4+
5+
## 🚨 現在の問題
6+
7+
### 現状
8+
```
9+
diffx-core/src/lib.rs: 1153行(1ファイルのみ)
10+
diffx-cli/src/main.rs: 714行(1ファイルのみ)
11+
```
12+
13+
**問題点**:
14+
- すべてのロジックが1ファイルに集中
15+
- モジュール化されていない
16+
- 保守性が低い
17+
- テストがしにくい
18+
- 責任が分離されていない
19+
20+
## 🎯 目指す構造
21+
22+
### diffx-core の理想的な構造
23+
24+
```
25+
diffx-core/src/
26+
├── lib.rs # 公開API、再エクスポート(50-100行程度)
27+
├── types.rs # 型定義(DiffResult, DiffOptions など)
28+
├── parser/
29+
│ ├── mod.rs # パーサーモジュール
30+
│ ├── json.rs # JSON パーサー
31+
│ ├── yaml.rs # YAML パーサー
32+
│ ├── toml.rs # TOML パーサー
33+
│ ├── xml.rs # XML パーサー
34+
│ ├── ini.rs # INI パーサー
35+
│ ├── csv.rs # CSV パーサー
36+
│ └── format.rs # フォーマット検出
37+
├── diff/
38+
│ ├── mod.rs # 差分検出モジュール
39+
│ ├── core.rs # コア差分ロジック
40+
│ ├── arrays.rs # 配列差分
41+
│ ├── objects.rs # オブジェクト差分
42+
│ └── recursive.rs # 再帰的差分
43+
├── io/
44+
│ ├── mod.rs # 入出力モジュール
45+
│ ├── files.rs # ファイル操作
46+
│ └── directories.rs # ディレクトリ操作
47+
└── utils.rs # ユーティリティ関数
48+
```
49+
50+
**各モジュールの責任**:
51+
52+
1. **lib.rs** (50-100行)
53+
- 公開APIの定義
54+
- モジュールの再エクスポート
55+
- ドキュメントコメント
56+
57+
2. **types.rs** (150-200行)
58+
- `DiffResult`
59+
- `DiffOptions`
60+
- その他の公開型
61+
62+
3. **parser/** (各100-150行)
63+
- フォーマット別パーサー
64+
- フォーマット検出ロジック
65+
- エラーハンドリング
66+
67+
4. **diff/** (各150-250行)
68+
- 差分検出のコアロジック
69+
- 配列差分(ID追跡、インデックス)
70+
- オブジェクト差分
71+
- 再帰的な差分検出
72+
73+
5. **io/** (各100-200行)
74+
- ファイル読み込み
75+
- ディレクトリ走査
76+
- パス処理
77+
78+
### diffx-cli の理想的な構造
79+
80+
```
81+
diffx-cli/src/
82+
├── main.rs # エントリーポイント(50-100行程度)
83+
├── cli/
84+
│ ├── mod.rs # CLIモジュール
85+
│ ├── args.rs # 引数定義(clap)
86+
│ └── parser.rs # 引数パース・検証
87+
├── input/
88+
│ ├── mod.rs # 入力モジュール
89+
│ ├── file.rs # ファイル入力
90+
│ ├── stdin.rs # 標準入力
91+
│ └── format.rs # フォーマット推論
92+
├── output/
93+
│ ├── mod.rs # 出力モジュール
94+
│ ├── cli.rs # CLI表示形式
95+
│ ├── json.rs # JSON出力
96+
│ └── yaml.rs # YAML出力
97+
└── run.rs # メイン実行ロジック
98+
```
99+
100+
**各モジュールの責任**:
101+
102+
1. **main.rs** (50-100行)
103+
- エントリーポイント
104+
- エラーハンドリング
105+
- 終了コード設定
106+
107+
2. **cli/** (各100-150行)
108+
- コマンドライン引数定義
109+
- 引数パース
110+
- バリデーション
111+
112+
3. **input/** (各100-150行)
113+
- ファイル読み込み
114+
- 標準入力処理
115+
- フォーマット推論
116+
117+
4. **output/** (各100-200行)
118+
- 各種出力形式
119+
- カラー表示
120+
- フォーマット変換
121+
122+
5. **run.rs** (150-250行)
123+
- メイン実行ロジック
124+
- オプション構築
125+
- 入出力の調整
126+
127+
## 📋 リファクタリング手順
128+
129+
### Phase 1: diffx-core のリファクタリング(優先度: 高)
130+
131+
1. **types.rs の抽出**
132+
- `DiffResult` enum
133+
- `DiffOptions` struct
134+
- `OutputFormat` enum
135+
- その他の公開型
136+
137+
2. **parser/ モジュールの作成**
138+
- `parser/mod.rs` 作成
139+
- `parser/json.rs` - `parse_json()` を移動
140+
- `parser/yaml.rs` - `parse_yaml()` を移動
141+
- `parser/toml.rs` - `parse_toml()` を移動
142+
- `parser/xml.rs` - `parse_xml()` を移動
143+
- `parser/ini.rs` - `parse_ini()` を移動
144+
- `parser/csv.rs` - `parse_csv()` を移動
145+
- `parser/format.rs` - フォーマット検出を移動
146+
147+
3. **diff/ モジュールの作成**
148+
- `diff/mod.rs` 作成
149+
- `diff/core.rs` - `diff()` 関数を移動
150+
- `diff/arrays.rs` - 配列差分関数を移動
151+
- `diff/objects.rs` - オブジェクト差分を移動
152+
- `diff/recursive.rs` - 再帰的差分を移動
153+
154+
4. **io/ モジュールの作成**
155+
- `io/mod.rs` 作成
156+
- `io/files.rs` - `diff_files()` を移動
157+
- `io/directories.rs` - `diff_directories()` を移動
158+
159+
5. **lib.rs の整理**
160+
- モジュール宣言
161+
- 公開APIの再エクスポート
162+
- ドキュメント整備
163+
164+
### Phase 2: diffx-cli のリファクタリング(優先度: 中)
165+
166+
1. **cli/ モジュールの作成**
167+
- `cli/mod.rs` 作成
168+
- `cli/args.rs` - Args struct を移動
169+
- `cli/parser.rs` - `build_diff_options()` を移動
170+
171+
2. **input/ モジュールの作成**
172+
- `input/mod.rs` 作成
173+
- `input/file.rs` - `read_input()` を移動
174+
- `input/stdin.rs` - 標準入力処理を移動
175+
- `input/format.rs` - `infer_format_from_path()` を移動
176+
177+
3. **output/ モジュールの作成**
178+
- `output/mod.rs` 作成
179+
- `output/cli.rs` - `print_cli_output()` を移動
180+
- `output/json.rs` - JSON出力を移動
181+
- `output/yaml.rs` - YAML出力を移動
182+
183+
4. **run.rs の作成**
184+
- `run()` 関数を移動
185+
- メイン実行ロジック
186+
187+
5. **main.rs の簡素化**
188+
- エントリーポイントのみ
189+
- エラーハンドリング
190+
191+
### Phase 3: テストの整理(優先度: 低)
192+
193+
1. **ユニットテストの追加**
194+
- 各モジュールに `#[cfg(test)]` を追加
195+
- モジュール単位でテスト
196+
197+
2. **統合テストの見直し**
198+
- 既存のテストを検証
199+
- 新しい構造に合わせて修正
200+
201+
## ⏰ 実行タイミング
202+
203+
**今すぐやるべきか?**
204+
205+
**NO - まだ早い**
206+
207+
理由:
208+
1. **Phase 2(真実の特定)が未完了**
209+
- まだ全機能の動作確認ができていない
210+
- どの機能が本当に動作するか不明確
211+
212+
2. **仕様が不明確**
213+
- `--ignore-case` の挙動が不明
214+
- 未検証のオプションが多数存在
215+
- ドキュメントと実装の乖離がある
216+
217+
3. **リファクタリングのリスク**
218+
- 大規模な変更になる
219+
- 既存のテストが多数失敗している(86 passed; 83 failed)
220+
- 何が壊れたか判断できない
221+
222+
**正しい順序**:
223+
224+
```
225+
1. Phase 2 完了: 真実の特定 ← 今ここ
226+
- すべての機能を検証
227+
- 動作する機能を明確化
228+
- 新しい仕様書作成
229+
230+
2. Phase 2.5: テストの整理
231+
- 動作する機能のテストを修正
232+
- テストが通る状態にする
233+
- リファクタリングの基準を作る
234+
235+
3. Phase 3: リファクタリング ← ここで実行
236+
- テストが通る状態から開始
237+
- モジュール化
238+
- テストで検証しながら進める
239+
240+
4. Phase 4: GitHub Actions簡素化
241+
- 新しい構造でCI/CD
242+
243+
5. Phase 5: README更新
244+
- 検証済み機能のみ記載
245+
```
246+
247+
## 📝 次のアクション
248+
249+
**今やること**:
250+
1. ❌ リファクタリング開始(まだ早い)
251+
2. ✅ Phase 2 を完了させる
252+
- 残りのオプション検証
253+
- 新しい仕様書作成
254+
3. ✅ テストを修正して通す
255+
4. ✅ その後、リファクタリング計画を実行
256+
257+
**このドキュメントの位置づけ**:
258+
- リファクタリングの青写真
259+
- Phase 3 で参照する設計書
260+
- 今すぐ実行はしない
261+
- Phase 2 完了後に再検討
262+
263+
## 🎯 リファクタリングの価値
264+
265+
**メリット**:
266+
- 保守性向上
267+
- テストしやすい
268+
- 責任が明確
269+
- 新機能追加が容易
270+
- バグの局所化
271+
272+
**デメリット**:
273+
- 時間がかかる
274+
- 一時的に不安定になる可能性
275+
- 大規模な変更
276+
277+
**結論**:
278+
価値はあるが、**Phase 2 完了後に実施すべき**
279+
今は「真実の特定」に集中する。
280+
281+
---
282+
283+
**作成日**: 2025-11-14
284+
**優先度**: Phase 2 完了後
285+
**合言葉**: 「疑って、確認して、記録する」→「リファクタリングは確認の後」

0 commit comments

Comments
 (0)