mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです.

2018-10-15

今日の電車

  • 行き: 勝ち
  • 帰り: 負け

同時編集対応エディタ

大学のネットワークプログラミングという実験で, ソケット通信を使った好きなプログラムを作る課題に取り組んでいる. 講義ではその例としてリアルタイムチャットや対戦型ゲームが挙げられていたけど, ありきたりすぎてつまらないので他の題材を探していた. そこで以前から「DocBaseの同時編集機能を実現しているアルゴリズム | KRAY Inc」という記事を読んで気になっていたOperational Transformationを用いた同時編集対応エディタを作ることにした. なによりHackMDやScrapbox, Google Documentのような同時編集機能を自分で実装するという体験は憧れますよね.

とはいっても授業日数には限りがあり, Operational Transformationの実装に時間が掛かって未完成のまま終了してしまっては悲しいので, 最悪Operational Transformationの実装が間に合わなくても共同編集可能なエディタとしては機能するような実装方針を立てて実装することにした.

  • 実装の方針
    1. 1つのクライアントが同時に接続可能なドキュメント共有エディタのプロトタイプを作る
      • 文字の挿入や削除は対応せず, 全文書き換えのみ対応
      • 挿入や削除といった操作ではなく, ドキュメントを丸ごと送信する方式
    2. 複数のクライアントからの接続に対応
    3. 文字の挿入, 削除に対応
      • 挿入コマンド, 削除コマンドをサーバに送信する方式
      • コマンドはサーバを経由して全共同編集者に反映される
    4. 十字キーによる移動, カーソルを使った編集に対応
    5. Operational Transformationに対応
      • 操作はその操作を行った者には即時反映され, それ以外の共同編集者にはサーバをして反映される
      • 全てのクライアントの整合性が担保されるよう, サーバで操作のコンフリクトを解決する
  • オプション
    • 共同編集者のカーソル位置の表示

1から順に作っていけばOperational Transformationによる同時編集対応エディタが完成する. 仮に5まで終わらなくても, 3まで出来ていれば共同編集可能なエディタとしては機能するはず. とりあえず2時間で2まで出来ていて後9時間あるので4くらいまでは余裕を持って実装できそうな気がする. やっていきます.