イテレーション 3 ふりかえり(Retrospective)¶
基本情報¶
| 項目 | 内容 |
|---|---|
| イテレーション番号 | 3 |
| 期間 | 2026-01-26 〜 2026-02-03(実績) |
| 実施日 | 2026-02-03 |
| 参加者 | 開発チーム全員 |
| フォーマット | KPT(Keep, Problem, Try) |
実績サマリー¶
完了状況¶
| 項目 | 計画 | 実績 | 達成率 |
|---|---|---|---|
| ストーリーポイント | 18SP | 18SP | 100% |
| ユーザーストーリー | 4件 | 4件 | 100% |
| 理想時間 | 120h | - | - |
| 作業日数 | 10日 | 8日 | 20%短縮 |
| コミット数 | - | 20件 | - |
テスト結果¶
| カテゴリ | 件数 | 結果 |
|---|---|---|
| E2E テスト | 136件 | ✅ 全パス |
| バックエンドユニットテスト | 全件 | ✅ 全パス |
| フロントエンドユニットテスト | 全件 | ✅ 全パス |
| テストカバレッジ | 80%+ | ✅ 良好 |
ビルド状態¶
| 環境 | 状態 |
|---|---|
| バックエンドビルド | ✅ 成功 |
| フロントエンドビルド | ✅ 成功 |
| CI/CD パイプライン | ✅ 正常稼働(MSW 環境の E2E テスト修正完了) |
主要成果物¶
-
仕訳編集機能(US-JNL-002)
-
「下書き」ステータスの仕訳のみ編集可能
- 仕訳日付、摘要、明細行の編集
- 貸借一致バリデーション
- 楽観的ロック(バージョンフィールド)による同時編集防止
-
PUT /api/journal-entries/{id} API
-
仕訳削除機能(US-JNL-003)
-
「下書き」ステータスの仕訳のみ削除可能
- 削除前確認ダイアログ
- 削除成功メッセージ表示
-
DELETE /api/journal-entries/{id} API
-
仕訳一覧表示(US-JNL-004)
-
仕訳番号、日付、摘要、金額、ステータスの一覧表示
- ステータス・日付範囲によるフィルタリング
- ページネーション対応
- 一覧から編集画面への遷移
-
GET /api/journal-entries API
-
仕訳検索機能(US-JNL-005)
-
日付範囲、勘定科目、金額範囲、摘要での検索
- 複数条件の組み合わせ検索
- 検索条件のリセット機能
-
GET /api/journal-entries/search API
-
CI E2E テスト修正
-
MSW 環境での cy.intercept + cy.wait パターンを DOM 待機に置き換え
- MSW POST ハンドラーにデータ永続化を追加
- 全 136 E2E テストが CI 環境で安定動作
KPT 分析¶
Keep(続けること)¶
技術的成功事項¶
- バックエンド→フロントエンド→E2E の段階的実装: 各ストーリーをバックエンド API → フロントエンド UI → E2E テストの順序で一貫して実装
- 楽観的ロックの実装: バージョンフィールドによるシンプルな楽観的ロック機構を実装し、同時編集を防止
- ページネーション共通化: Pagination コンポーネントを共通化し、一覧・検索画面で再利用
- MSW モックハンドラーの整備: フロントエンド単独でのテスト・開発が可能な MSW ハンドラーを整備
- Vavr Either/IO モナドの継続使用: エラーハンドリングを関数型スタイルで一貫して実装
プロセス的成功事項¶
- コミット粒度の改善: 前イテレーション(7件)に比べ、20件のコミットでより細かい単位で記録
- Conventional Commits の遵守: feat/fix/test/docs の分類を一貫して使用
- 進捗ドキュメントの定期更新: 各ストーリー完了時にイテレーション計画の進捗を更新
チームワーク¶
- Codex と Claude の効率的な分担: バックエンドを Codex、フロントエンド・E2E を Claude が担当する分業が定着
- CI 問題の早期検出と修正: MSW 環境での E2E テスト失敗を検出し、根本原因(cy.intercept + MSW の非互換)を特定・修正
Problem(問題点・課題)¶
CI E2E テストの不安定性¶
- 問題: MSW の Service Worker が fetch リクエストをブラウザレベルで横取りし、Cypress の cy.intercept が機能しない
- 影響: CI 環境で複数の E2E テストが cy.wait タイムアウトで失敗
- 対応: 全ての cy.intercept + cy.wait パターンを DOM 要素待機に置き換え(4cde1c5 で修正完了)
MSW データ永続化の欠如¶
- 問題: MSW の POST ハンドラーが登録した仕訳をメモリ上に保持しないため、作成→一覧→編集のフローが動作しない
- 影響: E2E テストで「一覧から編集画面に遷移」するテストが失敗
- 対応: POST ハンドラーに mockJournalEntries への永続化を追加
共通タスクの未着手¶
-
未着手のまま引き継ぎ:
-
COMMON-11: 日次バーンダウン収集仕組み構築
- COMMON-12: ESLint 複雑度チェック CI 統合
-
COMMON-13: React Router v7 Future Flags 有効化
-
理由: ストーリー実装と CI 修正を優先した結果、共通タスクに着手できなかった
見積もり精度¶
- 計画通りの SP だが共通タスク未完了: ストーリーは 18SP/18SP で 100% 完了だが、共通タスク分を考慮すると実質的にはスコープ超過
- E2E テスト修正の工数: 当初計画にない CI 修正作業が発生(約 4-6h 相当)
Try(次に試すこと)¶
具体的改善アクション¶
| # | アクション | 責任者 | 期限 | 期待効果 |
|---|---|---|---|---|
| 1 | 共通タスクの優先度を上げてイテレーション計画に組み込む | - | イテレーション 4 開始時 | 技術的負債の蓄積防止 |
| 2 | CI テスト戦略の見直し(MSW + Cypress のベストプラクティス文書化) | - | イテレーション 4 中 | CI 安定性の向上 |
| 3 | MSW ハンドラーのテスト追加(ハンドラー単体テスト) | - | イテレーション 4 | MSW 環境の品質向上 |
| 4 | E2E テストで cy.intercept を使わない方針の徹底 | - | 継続 | CI の安定動作 |
| 5 | React Router v7 Future Flags の有効化 | - | イテレーション 4 | 警告解消、将来互換性確保 |
次イテレーションへの引き継ぎ事項¶
必須対応事項¶
- 総勘定元帳照会(US-LDG-001) - イテレーション 4 で実装予定
- 日次残高照会(US-LDG-003) - イテレーション 4 で実装予定
技術検証タスク¶
- 元帳照会のデータ集計方式の設計(仕訳→元帳の転記ロジック)
- 残高計算のパフォーマンス最適化方針
技術的負債(引き継ぎ)¶
- COMMON-11: 日次バーンダウン収集仕組み構築
- COMMON-12: ESLint 複雑度チェック CI 統合
- COMMON-13: React Router v7 Future Flags 有効化
- COMMON-14: バックエンドのインポート整理
ドキュメント整備タスク¶
- イテレーション 4 計画書の作成
- 元帳管理機能の API ドキュメント更新
メトリクス¶
開発メトリクス¶
| メトリクス | 値 |
|---|---|
| 総コミット数 | 20 |
| 追加行数 | 約 8,362 |
| 削除行数 | 約 651 |
| 変更ファイル数 | 78 |
品質メトリクス¶
| メトリクス | 値 | 目標 | 判定 |
|---|---|---|---|
| テストカバレッジ | 80%+ | 80% | ✅ |
| ユニットテスト合格率 | 100% | 100% | ✅ |
| E2E テスト合格率 | 100%(136/136) | 100% | ✅ |
| ビルド成功率 | 100% | 100% | ✅ |
プロセスメトリクス¶
| メトリクス | 値 |
|---|---|
| 計画 SP | 18 |
| 実績 SP | 18 |
| ベロシティ | 18SP/イテレーション |
| 作業効率 | 120%(10 日計画 → 8 日完了) |
| 累積実績ベロシティ | 17.3SP/イテレーション平均((18+16+18)/3) |
学び(Lessons Learned)¶
技術的学び¶
-
MSW と Cypress の非互換性
-
MSW の Service Worker はブラウザの fetch API をインターセプトするため、Cypress の cy.intercept(ネットワークレベル)は機能しない
- E2E テストでは DOM 要素の状態変化を待機する方が、ネットワークリクエスト待機より堅牢
-
MSW のモックデータは永続化しないとフロー全体のテストが困難
-
楽観的ロックの実装パターン
-
バージョンフィールドによるシンプルな方式で十分な同時編集防止が可能
-
フロントエンドでバージョンを送信し、バックエンドで不一致検出→エラー返却の流れ
-
ページネーションの設計
-
オフセット方式で十分な規模のデータ量
- 共通 Pagination コンポーネントの再利用で実装コスト削減
-
バックエンドの PagedResponse
ジェネリクスで型安全なレスポンス -
検索機能の設計パターン
-
MyBatis の動的 SQL で複数条件の組み合わせ検索を実現
- フロントエンドのフィルタ状態管理は URL パラメータと同期
プロセス的学び¶
-
コミット粒度の改善効果
-
イテレーション 2(7件)→ イテレーション 3(20件)でコミット粒度が改善
-
バックエンド→フロントエンド→E2E テストの各段階でコミットすることで追跡性が向上
-
CI 問題への対応コスト
-
CI の不具合修正は計画外作業だが、放置すると全テストの信頼性が低下
-
根本原因の特定と修正に注力することで、長期的な CI 安定性を確保
-
ベロシティの安定
-
3 イテレーション連続で 16-18SP を達成し、ベロシティが安定
- 今後の計画は 17SP/イテレーションで見積もり可能
次回イテレーションへの期待¶
達成目標¶
- イテレーション 4 ゴール: 元帳照会と統合テストを完成させ、リリース 1.0 MVP を達成する
- 計画 SP: 10SP
- 対象ストーリー: US-LDG-001(総勘定元帳照会)、US-LDG-003(日次残高照会)
重点項目¶
- 仕訳→元帳の転記ロジック設計
- 残高計算のパフォーマンス最適化
- 技術的負債の解消(共通タスク消化)
- リリース 1.0 MVP のリリース準備
総評¶
成功した点¶
- 全ストーリー完了: 計画した 4 ストーリー(18SP)を 100% 達成
- 仕訳管理 CRUD の完成: 入力・編集・削除・一覧・検索の全機能が揃い、実用レベルに到達
- CI E2E テストの安定化: MSW 環境での E2E テスト問題を根本解決し、全 136 テストが安定動作
- コミット粒度の改善: 前イテレーション比で約 3 倍のコミット数、追跡性が大幅に向上
- 高い品質維持: テスト全合格、CI/CD パイプライン正常稼働を継続
改善が必要な点¶
- 共通タスクの優先度管理: 3 イテレーション連続で共通タスクが未着手、技術的負債が蓄積
- CI テスト戦略の文書化: MSW + Cypress のベストプラクティスをドキュメント化し、今後の E2E テスト作成時に参照可能にする
- 日次進捗追跡: 3 イテレーション連続で未実装、バーンダウンデータの収集を自動化する必要あり
次イテレーションへの自信度¶
高い - 3 イテレーション連続で計画 SP を 100% 達成し、ベロシティは安定(17.3SP 平均)。仕訳ドメインが完成しているため、元帳照会は仕訳データの集計・表示に集中できる。イテレーション 4 の計画 SP(10SP)はベロシティに対して余裕があり、技術的負債の解消にも時間を確保可能。
更新履歴¶
| 日付 | 更新内容 | 更新者 |
|---|---|---|
| 2026-02-03 | 初版作成 | Claude Opus 4.5 |