初めて訪れるゲームセンターでは、営業時間と料金だけでは分からないこともある。建物内の入口の探し方や、利用前に知っておきたい案内には文章が必要になる。メモはこうした説明を載せる場所であり、8月には読みやすさと編集後の確認を考えて保存方法を改めた。
例えば入口への道順と利用上の注意を同じメモに書く場合、段落やリストで整理すると必要な説明を探しやすい。一つの文字列で保存すると、その構造を編集画面と閲覧画面が別々に解釈することになる。表示が食い違ったり、複数の案内が一続きになったりする余地がある。
共同編集では、以前の内容と作成者を確認する手段も必要になる。現在の値を上書きするだけでは修正の経緯が失われる。ただしメモ、公式のお知らせ、写真は同じ詳細画面にあっても作成主体と保存する資料が異なるため、保存と権限の方針はそれぞれ維持した。
メモにはTiptapのJSON文書を使う。段落、リスト、強調を要素として表すことで、編集画面と閲覧画面が同じ構造を理解できる。書式を一度文字列に戻し、表示時に推測し直す必要を減らす方法である。
保存時点の文書をrevision、つまり修正版として保持し、店舗には現在のメモIDを持たせる。新しい修正版を保存しても以前の文書は残り、変更履歴から前後を確認できる。共同編集のメモと運営者のお知らせが編集機能を共有しても、作成の方針は文書ごとに適用する。
自由に説明できる形式にも、扱える入力の条件が必要である。編集画面は店舗IDと文書をAPIへ送り、サーバーが書き込み権限とルート、子要素、テキスト、属性を検証する。文書容量と再帰探索も制限し、閲覧画面で処理できる資料を受け取る。
情報種別で分かれた編集メニュー。メモもゲームセンター文書の一領域として編集する。 英語の原キャプチャ。
現在と同じ内容なら既存のrevisionを返す。内容が変わった場合は作成者と文書を保存し、現在の参照と変更履歴を一つのトランザクションで更新する。新しい文書だけができ、参照や履歴が欠ける状態を防ぐためである。画面は返された文書を反映してから詳細情報を更新する。
利用者は段落とリストで整理された案内を読み、編集者は同じ構造で修正できる。変更後も以前の文書と作成者を確認でき、変更のない保存では既存の修正版を再利用して重複を抑える。
構造化には保守も伴う。新しい書式には編集、検証、表示の対応が必要になり、過去の文書を保存する容量も増える。ファイルの公開とメモの書式拡張は個別に管理し、同じページの別のコンテンツの作成権限まで変えないようにする。
関連する記事と資料:Musecatの開発過程