Open3

100日チャレンジ day67 (CRDT)

riddle_tecriddle_tec

昨日
https://zenn.dev/gin_nazo/scraps/3ecee3411c3b95


https://blog.framinal.life/entry/2025/04/14/154104

100日チャレンジに感化されたので、アレンジして自分でもやってみます。

やりたいこと

  • 世の中のさまざまなドメインの簡易実装をつくり、バックエンドの実装に慣れる(dbスキーマ設計や、関数の分割、使いやすいインターフェイスの切り方に慣れる
  • 設計力(これはシステムのオーバービューを先に自分で作ってaiに依頼できるようにする
  • 生成aiをつかったバイブコーティングになれる
  • 実際にやったことはzennのスクラップにまとめ、成果はzennのブログにまとめる(アプリ自体の公開は必須ではないかコードはgithubにおく)

できたもの

TBD

riddle_tecriddle_tec

CRDT (Conflict-free Replicated Data Types) という分散システムの最先端技術をやる

riddle_tecriddle_tec

素晴らしい選択です!CRDT (Conflict-free Replicated Data Types) は分散システムの最先端技術で、Google Docs、Figma、Notionなどの協調編集で使われている核心技術です。

day67: CRDT 実装 & 協調編集デモシステム

🎯 プロジェクト概要

複数のCRDTデータ型を実装し、ネットワーク分断や遅延があっても最終的に一貫した状態に収束することを体験できるインタラクティブなシステムを構築します。

📚 学習ポイント

  • 無競合レプリケーション: 分散環境でのデータ整合性保証
  • 収束性 (Convergence): 異なる操作順序でも同じ最終状態
  • 可換性 (Commutativity): 操作順序に依存しない結果
  • 冪等性 (Idempotency): 同じ操作の重複適用
  • ベクタークロック: 因果関係の追跡
  • 分散システム理論: CAP定理、結果整合性

🏗️ 実装するCRDTタイプ

  1. G-Counter - 増加専用カウンター(いいね数、ビュー数等)
  2. PN-Counter - 増減可能カウンター(投票システム等)
  3. G-Set - 追加専用セット(タグ、メンバー等)
  4. OR-Set - 追加・削除可能セット(ブックマーク等)
  5. LWW-Register - 最後書き込み勝利レジスタ(プロフィール情報等)
  6. RGA/YATA - 文字列操作用(協調テキスト編集)
  7. AWORMap - キー・バリューマップ(設定情報等)

🎮 デモアプリケーション

  1. 協調テキストエディタ - リアルタイム文書編集
  2. 共有カウンターダッシュボード - 分散カウンター集計
  3. 協調TODOリスト - チーム作業管理
  4. 分散投票システム - リアルタイム投票・集計
  5. 共有ホワイトボード - 図形・テキスト協調編集

🌐 システム機能

  • マルチノードシミュレーション (3-5個のレプリカノード)
  • ネットワーク分断シミュレーション (パーティション耐性テスト)
  • 遅延・パケットロスシミュレーション
  • 操作履歴とマージプロセス可視化
  • ベクタークロック・因果関係表示
  • リアルタイム同期状況モニタリング

🎨 デザインコンセプト

サイバーパンク・テクノロジカル - 分散システムの複雑さを視覚的に表現

  • ネオンアクセント、暗い背景
  • ノード間接続の動的可視化
  • データフロー・マージプロセスのアニメーション