Issue #137: 新機能: リアルタイム同期・マルチデバイス対応

Opened 2025/8/4 by @nyasuto Open
enhancement

Description

概要

WebSocket/Server-Sent Events を活用したリアルタイム同期とマルチデバイス対応の実装

背景

  • 現在は単一デバイス利用が前提
  • 複数環境でのメモリ同期需要
  • リアルタイム更新によるUX向上

提案機能

1. リアルタイム同期

# WebSocket接続
WS /api/websocket/sync
{
  "type": "memory_created",
  "data": {
    "id": "mem_xxx",
    "summary": "新しいメモリ",
    "created_at": "2025-08-04T10:00:00Z"
  }
}

# Server-Sent Events
GET /api/events/stream
data: {"type": "memory_updated", "id": "mem_001"}

2. デバイス管理

# デバイス登録
POST /api/devices/register
{
  "device_id": "desktop_001",
  "device_name": "MacBook Pro",
  "client_version": "1.0.0"
}

# アクティブデバイス一覧
GET /api/devices/active
{
  "devices": [
    {
      "id": "desktop_001",
      "name": "MacBook Pro", 
      "last_seen": "2025-08-04T10:00:00Z",
      "is_current": true
    }
  ]
}

3. 競合解決メカニズム

# Last-Write-Wins with タイムスタンプ
{
  "id": "mem_001",
  "value": "更新されたコンテンツ",
  "version": 5,  # バージョン管理
  "updated_at": "2025-08-04T10:00:00Z",
  "device_id": "mobile_001"
}

# 競合検出時
HTTP 409 Conflict
{
  "error": "version_conflict",
  "server_version": 6,
  "client_version": 5,
  "resolution_options": ["merge", "overwrite", "manual"]
}

4. オフライン対応

# オフライン操作キュー
class OfflineQueue:
    def queue_operation(self, operation: dict):
        """オフライン時の操作をキューに蓄積"""
        pass
    
    def sync_when_online(self):
        """オンライン復帰時の同期"""
        pass

技術実装

WebSocket管理

# FastAPI WebSocket
from fastapi import WebSocket
from typing import List, Dict

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []
        self.device_connections: Dict[str, WebSocket] = {}
    
    async def broadcast_update(self, message: dict):
        """全デバイスに更新通知"""
        for connection in self.active_connections:
            await connection.send_json(message)

状態管理

# Redis/SQLite による状態管理
class SyncStateManager:
    async def track_device_activity(self, device_id: str):
        """デバイス活動追跡"""
        pass
    
    async def get_sync_status(self, device_id: str) -> dict:
        """同期状況取得"""
        pass

データベース拡張

-- デバイス管理
CREATE TABLE devices (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    client_version TEXT,
    last_seen DATETIME,
    sync_status TEXT,  -- synced/pending/conflict
    created_at DATETIME
);

-- 同期ログ
CREATE TABLE sync_events (
    id TEXT PRIMARY KEY,
    device_id TEXT,
    memory_id TEXT,
    operation TEXT,  -- create/update/delete
    timestamp DATETIME,
    status TEXT      -- success/conflict/pending
);

-- バージョン管理
ALTER TABLE memories ADD COLUMN version INTEGER DEFAULT 1;
ALTER TABLE memories ADD COLUMN last_modified_device TEXT;

セキュリティ

  • WebSocket認証トークン
  • デバイス固有の暗号化キー
  • 同期データの整合性検証

UI/UX改善

  • リアルタイム更新インジケーター
  • オフライン状態の視覚的表示
  • 競合解決の分かりやすいUI
  • デバイス間同期状況の表示

期待効果

  • マルチデバイス環境での利便性向上
  • データ損失リスクの軽減
  • 現代的なアプリケーション体験の提供
  • 利用頻度・継続率の向上

実装スケジュール

  1. Phase 1: WebSocket基盤 (2週間)
  2. Phase 2: デバイス管理 (1週間)
  3. Phase 3: 競合解決 (2週間)
  4. Phase 4: オフライン対応 (2週間)

技術的考慮事項

  • WebSocketコネクション数の制限
  • リアルタイム同期の帯域使用量
  • バッテリー消費への影響
  • スケーラビリティの確保

Comments

コメント機能は現在実装されていません。
GitHub API の comments エンドポイントを統合する予定です。

🤖 AI分析

分類結果

❓ 質問
🟡 中
47 スコア
カテゴリ 20
優先度 27
0

Details

Assignees:

None

Milestone:

None

Created:

2025/8/4

Updated:

2025/8/4