【そうさへんかん、オーティー】

操作変換(OT) とは?

最終更新:
💡 同時編集でずれた操作の位置を合わせる

共同編集で同時に届く挿入・削除などの操作を、ほかの操作の影響に合わせて変換する考え方です。文字位置のずれを補正する例と、実装上の条件を説明します。

📌 このページのポイント
ひよこ ひよこ
2人で同じ文書を書いても大丈夫なのは、なぜ?
ペンギン先生 ペンギン先生
共同編集にはいくつかの仕組みがあるけれど、OTはその1つだよ。Operational Transformationの略で、日本語では操作変換というんだ。誰かの編集で文書が変わったとき、ほかの人の編集操作をその影響に合わせて変換するよ。
ひよこ ひよこ
文字の位置が変わるって、どんな場面?
ペンギン先生 ペンギン先生
最初の文書がABCだとして、AさんはBの前にXを挿入し、BさんはCを削除するとしよう。どちらも最初のABCを見て操作したんだ。Aさんの操作を先に反映するとAXBCになるので、Cの位置は1文字ぶん後ろにずれるよ。
ひよこ ひよこ
そのまま元の位置を削除すると?
ペンギン先生 ペンギン先生
0から数えた元の削除位置2を、AXBCにそのまま適用するとBを消してAXCになってしまうね。そこで削除位置を3に変換すると、狙っていたCを消してAXBになるんだ。これは挿入と削除の位置を説明するための単純な例だよ。
ひよこ ひよこ
Bさんの削除が先なら、結果は違うの?
ペンギン先生 ペンギン先生
この例では先にCを消してABにし、その後Bの前にXを挿入すると、同じAXBになるよ。ただし同じ位置に2人が文字を挿入する場合などは、どちらを先に並べるかの規則も必要なんだ。位置をずらすだけで、あらゆる編集を解決できるわけではないよ。
ひよこ ひよこ
実際のアプリでは、何を使うの?
ペンギン先生 ペンギン先生
例えばShareDBはOTに基づく共同編集用のバックエンドで、データの種類に合うOT typeを使うよ。テキストや構造化データでは操作の表し方や変換が違うんだ。操作の順序や履歴も扱い、利用するアルゴリズムの条件に沿って設計する必要があるよ。
ひよこ ひよこ
CRDTとは、どっちが優れているの?
ペンギン先生 ペンギン先生
CRDTも共同編集などで使われる別の考え方だよ。通信や同期の構成、データの種類、実装の性質によって向き不向きがあるので、一方が常に優れているとはいえないんだ。まずはOTを、ほかの編集に合わせて操作を変換する仕組みとして覚えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「操作変換(OT)」って出てきたら「同時編集でずれた操作を合わせる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「OT (Operational Transformation)」 = 操作変換
💬 "Operational"は「操作(挿入・削除)」の意。ユーザーAの操作がユーザーBの操作と競合したとき、互いの操作を変換して整合性を保つんだよ。

参考資料

← 用語集にもどる