systemPatterns.json•5.35 kB
{
  "schema": "memory_document_v2",
  "metadata": {
    "id": "feature-change-json-package-system-patterns",
    "title": "System Patterns for feature/change-json-package",
    "documentType": "system_patterns",
    "path": "systemPatterns.json",
    "tags": [],
    "createdAt": "2025-04-10T07:56:20.623Z",
    "lastModified": "2025-04-10T08:26:52.483Z"
  },
  "content": {
    "technicalDecisions": [
      {
        "title": "JSON Patchライブラリをrfc6902に戻す決定",
        "context": "以前、fast-json-patchライブラリに移行したが、それ以降JSON Patch機能が正しく動作しなくなった。元々使用していたrfc6902ライブラリは正常に動作していたため、戻す必要がある。",
        "decision": "依存ライブラリをfast-json-patchからrfc6902に戻し、Rfc6902JsonPatchAdapterを再実装する。既存のコードとの互換性を維持するために、toFastJsonPatchOperationメソッドは残しつつ、新しいtoRfc6902Operationメソッドを追加する。さらに、package.jsonからfast-json-patchの依存関係を完全に削除し、クリーンな状態にする。",
        "consequences": [
          "JSON Patch機能が正しく動作するようになる",
          "コード変更の範囲が比較的小さく、リグレッションのリスクが低い",
          "余分な依存関係を削除することで、インストールサイズと潜在的な脆弱性が減少する",
          "既存のコードとの互換性維持のための調整が必要"
        ]
      },
      {
        "title": "アダプターパターンの活用",
        "context": "異なるJSON Patchライブラリ(rfc6902とfast-json-patch)には異なるAPI設計があり、これらを統一的に扱う必要がある。",
        "decision": "アダプターパターンを用いて、JsonPatchServiceインターフェイスの実装として、Rfc6902JsonPatchAdapterを提供する。これにより、クライアントコードはどのライブラリが使われているかを気にする必要がなくなる。",
        "consequences": [
          "実装の詳細が抽象化され、クライアントコードが簡潔になる",
          "将来的に異なるライブラリに切り替える場合も、新しいアダプターを実装するだけで対応可能",
          "ライブラリ固有の機能や最適化が犠牲になる可能性がある",
          "追加の抽象化レイヤーによるわずかなパフォーマンスオーバーヘッドが生じる"
        ]
      },
      {
        "title": "依存関係の明示的な管理",
        "context": "ライブラリを変更する際、コード修正だけでなく依存関係の管理も重要である。使用しなくなったライブラリを依存関係リストに残すと、不要なインストールやバージョン競合の原因になる。",
        "decision": "package.jsonから不要になったfast-json-patchの依存関係を明示的に削除し、使用されるrfc6902のみを残す。",
        "consequences": [
          "不要なライブラリのインストールを防ぎ、パッケージサイズが最適化される",
          "依存関係が明確になり、コードの意図と一致する",
          "潜在的なバージョン競合や脆弱性のリスクが減少する",
          "将来のライブラリアップデートが簡素化される"
        ]
      },
      {
        "title": "テストファイルの一貫性維持",
        "context": "実装ファイルを削除または変更した場合、対応するテストファイルが残っていると、テストが失敗する原因となる。",
        "decision": "FastJsonPatchAdapter.tsを削除したため、対応するFastJsonPatchAdapter.test.tsも削除した。特に、ライブラリ入れ替え時には、旧ライブラリ用のテストコードが不要となるため、積極的に削除または更新する。",
        "consequences": [
          "テスト実行時のエラーが解消される",
          "不要なテストコードによるメンテナンスコストが削減される",
          "テストカバレッジの誤った低下を防止できる",
          "ソースコードとテストコードの整合性が維持される"
        ]
      }
    ],
    "implementationPatterns": [
      "依存性の注入(DI)パターンを使用して、JsonPatchServiceの実装をプロジェクト全体で統一的に管理",
      "デリゲーションパターンを使用して、既存のtoFastJsonPatchOperationメソッドが新しいtoRfc6902Operationメソッドに委譲するように実装",
      "ファサードパターンを使用して、複雑なライブラリ操作を単純なインターフェースに隠蔽",
      "明示的依存関係管理:不要なライブラリ依存を削除し、必要なもののみを保持",
      "テストとソースコードの一貫性:実装が変更または削除された場合は、対応するテストも更新または削除する",
      "段階的なテスト検証:コンポーネント変更後は単体テスト→統合テスト→メモリバンク操作のテストという順で検証する"
    ]
  }
}