一覧の並び替えの更新に関して、面白い方法を知ったのでメモ
Figmaのように複数人で共同編集できる場合で、順序付けられたリスト内に新しい要素を挿入する場合、1度の編集で全てのリストを更新する方法だとタイミングよっては意図しない状態になってしまう
これを安全に制御するために、Figmaでは Fractional indexing という既存の要素の順序を変更せずに柔軟に挿入できる手法を使っているとのこと
具体的には、レコードに浮動小数点の順番を持たせ、挿入したい両側 2 つのオブジェクトのポジションの平均を設定するだけ

ただし、浮動小数点数の精度に限界があるため、文字列ベースで実装するなどの工夫が必要
Figmaの場合は、各ポジションを文字列として保存し、平均化は精度を維持するために文字列操作を使用して行われる
また、簡潔にするために、0 ~ 9 の数字だけでなく ASCII 範囲全体を使用している
Fractional indexing の課題は他にも以下のようなものがある
- インデックスの長さは時間の経過とともに増加する可能性がある
- 複数のクライアントからの新しい要素をマージすると、それらが交互に配置される可能性がある
- 2つの同一ポジションの平均化は機能しない
ただし、これは以下の観点で問題なければ課題にならないかもしれない
- 膨大な数の要素を並べ替えるかどうか
- おかしな状態になった時に、ユーザーが自分で直せるか
- 同一ポジションにならないように一意にすることができるか