noteの記事消失の原因を探る
最近、noteの記事を書いていて、編集した内容を失うことがありました。
原因は予想できます。
今回の記事は、noteの編集機能についての考察です。
この問題は、記事の公開後、2022年3月29日に追加された競合検出の機能で解消されたようです。
消失を再現する
noteの編集結果を消うのは、2つのクライアントで記事を同時編集したとき、編集結果を上書きしてしまうのが原因と考えられます。
これを再現してみます。
まず記事を作成して保存します。本文は「Ver.1」です。
次にこの記事をブラウザーAとブラウザーBで同時に開きます。
ブラウザーAで記事の本文を「Ver.2」に更新して保存します。
今、記事は「Ver.2」に更新したつもりですが、ブラウザーBでは古い記事を開いたままです。
そして、ブラウザーBに切り替えて、そのまま保存ボタンを押します。
すると、何事もなく上書きされてしまい、編集したはずの「Ver.2」が失われてしまいました。
実際の記事はこれほど単純ではないため、編集箇所は見分けられません。
下書きの確認中にPCをスリープし、スマホで編集した後、PCに戻ったときなどは要注意です。
記事を失う様々な要因
記事を失う際は、さらに、いくつかの要因が絡んでいると思います。
終了時のメッセージ
Webアプリでは編集ページを離れるとき、ブラウザー側で確認メッセージが表示されます。
心配になって保存すると、意図しない上書きにつながります。
自動保存
編集中の記事は、一定間隔で自動保存されます。
古い記事に誤って文字を入力してしまい、それを削除しても、上書きで自動保存されます。
これらの要因が絡み合って、記事の消失が起こってしまうのだと思います。
記事を失わない方法
ユーザー側でトラブルを防ぐには、編集画面を同時に開かないことぐらいだと思います(そもそも原稿を仕上げるのが激しく遅いのは別にして……)。
ただ、ソフト開発者の立場で考えると、アプリ側で消失を防止する機能を実装しているのが理想だと思います。
参考までに、その方法を簡単にご紹介します。
同時編集で上書きされる現象は、多くのサービスで見られるため、noteの動きは特別ではありません。例えばgmailやoutlookでも、メールの下書きを同時に開くと、同様の現象が起こります。
アプリ側で最も簡単に対処する方法は、「楽観的ロック」を実装することだと思います。
アプリでは、編集対象のデータをサーバーから取得するとき、その更新日時を一緒に取得しておきます。
編集結果を保存するときは、更新日時が変わっていない場合にだけ上書きします。更新日時が違う場合は、別のクライアントが書き換えた後のため、ユーザーに確認を取ります。
ちなみに、こうした上書きが発生するのはWebサービスだけに限りません。
私の自作デスクトップアプリでは、複数のプロセスでオプション設定を上書きし合わないように確認処理を入れています。
まとめ
以上、noteの編集画面を複数開く場合は、意図しない記事の上書きに気をつけましょうというお話でした。
note、楽観的ロックによる上書き確認、実装してくれないかなぁ……。