systemPatterns.json•3.83 kB
{
  "schema": "memory_document_v2",
  "metadata": {
    "id": "system-patterns",
    "title": "システムパターン",
    "documentType": "system_patterns",
    "path": "systemPatterns.json",
    "tags": [
      "core",
      "system-patterns"
    ],
    "lastModified": "2025-03-22T10:52:00.000Z",
    "createdAt": "2025-03-22T08:36:19.040Z",
    "version": 1
  },
  "content": {
    "sections": [
      {
        "id": "technicalDecisions",
        "title": "技術的決定事項",
        "content": "# テストフレームワークの統一
## コンテキスト
プロジェクトのテストコードでは、vitestとjestの両方が混在していました。Markdown関連のコンポーネントが削除されたため、多くのテストが失敗する状態になっていました。
## 決定事項
次の方針でテストコードを修正することに決定しました:
1. **jestへの統一**
   - すべてのテストファイルでvitestからjestへ参照を変更する
   - `import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';` →
   - `import { describe, it, expect, beforeEach, afterEach } from '@jest/globals'; import { vi } from 'jest';`
2. **テストスキップの導入**
   - 削除されたモジュールのテスト(markdown-parser.test.tsなど)は `.skip` を追加
   - 一時的に修正が難しいテストはjest.config.tsで `testPathIgnorePatterns` を使用
3. **テスト修正の段階的アプローチ**
   - 第1段階:参照の修正
   - 第2段階:削除されたモジュールへの対応
   - 第3段階:モック挙動の不一致の修正
   - 第4段階:統合テストの修正
## 影響
- CIパイプラインが再び通るようになり、開発を続けられる
- 今後のテスト作成時にライブラリ選択の混乱がなくなる
- テスト環境の一貫性が向上する
- 一時的にテストカバレッジは低下するが、段階的に修正を進める
# モックライブラリの扱い
## コンテキスト
jestとvitestでは、モックの仕組みが若干異なります。特にコントローラーテストで問題が発生していました。
## 決定事項
以下の方針でモックを扱うことにしました:
1. **jestのモック機能を優先**
   - `jest.fn()` と `jest.mock()` を基本とする
   - ts-mockitoは必要な場合のみ使用
2. **既存コードの互換性維持**
   - vitestの `vi` をjestの `vi` に置き換え
   - モックの挙動が異なる場合は、jest方式に合わせてテストを修正
## 影響
- テストコードの一貫性が向上
- モックの挙動に関するデバッグが容易になる
- 一部のテストでは、モックの書き換えが必要
# JSONベーステンプレートへの移行対応
## コンテキスト
プロジェクトは、従来のMarkdownベースからJSONベースのテンプレートシステムへ移行中です。これにより、多くのテストが古いシステムを前提としたままになっています。
## 決定事項
次の方針で移行対応を進めます:
1. **テスト優先順位の設定**
   - 新機能のテスト > 既存機能のテスト > 廃止予定機能のテスト
   - 廃止予定の機能については、.skipでテストをスキップ
2. **互換性レイヤーの検証**
   - JSON→Markdown変換の互換性レイヤーが存在する場合、その部分のテストを優先
   - 旧システムから新システムへのマイグレーションテストの追加
## 影響
- 移行期間中のテスト管理が改善
- 新旧システムの混在時のバグリスクが低減
- テストコードのメンテナンスコストが一時的に上昇するが、長期的には低下"
      }
    ]
  }
}