Skip to main content
Glama

Memory Bank MCP Server

by t3ta
markdown-to-json-migration-implementation.json5.35 kB
{ "schema": "memory_document_v2", "metadata": { "id": "c4b44e0b-1ebb-438d-9d54-da162ccadca3", "title": "Markdown→JSON移行実装", "documentType": "generic", "path": "markdown-to-json-migration-implementation.md", "tags": [], "lastModified": "2025-03-18T16:01:31.750Z", "createdAt": "2025-03-18T16:01:31.750Z", "version": 1 }, "content": { "rawContent": "# Markdown→JSON移行実装\n\n## 実装概要\n\nMarkdownドキュメント形式からJSON形式への移行を進めるため、以下の機能を実装しました:\n\n1. **Markdown書き込み禁止機能**\n2. **マイグレーション設定管理**\n3. **ユースケースファクトリー**\n4. **テストケース**\n\n## 実装内容\n\n### 1. WriteBranchDocumentUseCaseの拡張\n\n`WriteBranchDocumentUseCase`クラスに`disableMarkdownWrites`オプションを追加し、Markdownファイルへの書き込みを制御できるようにしました。\n\n```typescript\nconstructor(\n private readonly branchRepository: IBranchMemoryBankRepository,\n options?: {\n /**\n * Whether to disable Markdown writes\n * @default false\n */\n disableMarkdownWrites?: boolean;\n }\n) {\n this.disableMarkdownWrites = options?.disableMarkdownWrites ?? false;\n}\n```\n\nドキュメントパスが`.md`で終わる場合、設定に基づいてエラーを投げるようにしました:\n\n```typescript\n// Check if markdown writes are disabled\nif (this.disableMarkdownWrites && documentPath.isMarkdown) {\n const jsonPath = documentPath.value.replace(/\\.md$/, '.json');\n throw new ApplicationError(\n ApplicationErrorCodes.OPERATION_NOT_ALLOWED,\n `Writing to Markdown files is disabled. Please use JSON format instead: ${jsonPath}`\n );\n}\n```\n\n### 2. マイグレーション設定ファイル\n\n`src/config/migration-config.ts`に設定ファイルを作成し、マイグレーション関連の設定を一元管理できるようにしました。\n\n```typescript\nexport interface MigrationConfig {\n disableMarkdownWrites: boolean;\n enableAutoMigration: boolean;\n forceJsonFormat: boolean;\n showMigrationNotices: boolean;\n}\n```\n\n環境変数による設定切替も実装:\n\n```typescript\nexport function getMigrationConfig(): MigrationConfig {\n return {\n disableMarkdownWrites: process.env.NODE_ENV === 'production' || \n process.env.DISABLE_MARKDOWN_WRITES === 'true',\n enableAutoMigration: process.env.ENABLE_AUTO_MIGRATION === 'true',\n forceJsonFormat: process.env.FORCE_JSON_FORMAT === 'true',\n showMigrationNotices: process.env.SHOW_MIGRATION_NOTICES !== 'false'\n };\n}\n```\n\n### 3. ユースケースファクトリー\n\n`src/factory/use-case-factory.ts`にファクトリークラスを実装しました。マイグレーション設定に基づいて適切なユースケースを提供します。\n\n```typescript\nexport class UseCaseFactory {\n static createWriteBranchDocumentUseCase(\n branchRepository: IBranchMemoryBankRepository\n ): WriteBranchDocumentUseCase {\n return new WriteBranchDocumentUseCase(branchRepository, {\n disableMarkdownWrites: migrationConfig.disableMarkdownWrites\n });\n }\n}\n```\n\n### 4. DIコンテナ設定の修正\n\n`src/main/di/providers.ts`内の`writeBranchDocumentUseCase`ファクトリーをファクトリークラスを使用するように更新しました。\n\n```typescript\ncontainer.registerFactory('writeBranchDocumentUseCase', () => {\n const branchRepository = container.get(\n 'branchMemoryBankRepository'\n ) as FileSystemBranchMemoryBankRepository;\n\n // ファクトリーを使用してマイグレーション設定付きのUseCaseを取得\n return UseCaseFactory.createWriteBranchDocumentUseCase(branchRepository);\n});\n```\n\n### 5. テスト実装\n\n以下のテストケースを実装しました:\n\n#### Markdown書き込みブロックテスト\n\n`tests/integration/markdown-to-json/markdown-write-block.test.ts`\n\n- 通常モードでのMarkdown書き込み\n- 禁止モードでのMarkdown書き込み(エラー確認)\n- JSON書き込み(成功確認)\n- Markdown読み取り(成功確認)\n\n#### マイグレーションテスト\n\n`tests/integration/markdown-to-json/markdown-to-json-migration.test.ts`\n\n- Markdownファイルの変換\n- バックアップと復元\n- 移行後の読み取り\n- 既存ファイルの処理\n\n#### JSON操作の完全性テスト\n\n`tests/integration/markdown-to-json/json-operations-completeness.test.ts`\n\n- 基本CRUD操作\n- タグ管理\n- 複雑なJSONデータ\n- 特殊文字/エスケープシーケンス処理\n- 大量データ処理\n\n## 運用方針\n\n1. 開発環境:デフォルトでMarkdown書き込み許可(柔軟な開発)\n2. 本番環境:Markdown書き込み禁止(JSON移行を推進)\n3. 将来的には段階的にMarkdown読み取りも制限\n\n## 今後の課題\n\n1. 自動マイグレーション機能の実装\n2. 完全移行のためのデータ検証\n3. YAMLフォーマットへの最終移行準備\n", "sections": { "": "1. 自動マイグレーション機能の実装\n2. 完全移行のためのデータ検証\n3. YAMLフォーマットへの最終移行準備" } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/t3ta/memory-bank-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server