開発ブログ一覧に戻る
しくみ解説2026年3月20日

削除記録(Tombstone)の仕組み — 消したデータが復活しないために

一括採点では、複数のパソコン間でデータをやりとりすることがあります。 そのとき、一方のパソコンで削除したデータが、もう一方のパソコンからのインポートで復活してしまう問題がありました。 この記事では、その問題を解決する「削除記録(tombstone)」の仕組みを解説します。

削除したデータが復活する問題

一括採点では、あるパソコン(PC-A)で作成したデータを書き出して、 別のパソコン(PC-B)に読み込む機能があります。 これは複数の先生で採点を分担するときに欠かせない機能です。

ところが、次のような操作をすると困ったことが起きていました。

問題が起きるシナリオ
  1. PC-Aでデータを作成し、書き出してPC-Bに読み込む
  2. PC-Aで、ある生徒のデータを削除する
  3. PC-Aのデータを再びPC-Bに読み込む
  4. PC-Bでは、削除したはずの生徒がまだ残っている

PC-Aでは確かにデータを消したのに、PC-Bには以前読み込んだデータが残っています。 PC-Aから書き出したファイルにはもうその生徒のデータは含まれていませんが、 PC-B側には前回のインポートで取り込んだデータがそのまま残ってしまうのです。

身近なたとえでいうと、住所録を2冊コピーして使っている状況を想像してください。 1冊目からある人の情報を消しても、2冊目にはその人の情報が残ったままです。 1冊目をもう一度コピーし直しても、2冊目の既存の情報は消えません。 これと同じことが、パソコン間のデータ共有で起きていました。

Tombstone(墓石)とは何か

この問題を解決するために、「削除記録」という仕組みを導入しました。 英語ではtombstone(トゥームストーン)と呼ばれます。 直訳すると「墓石」です。

考え方はとてもシンプルです。 データを削除したとき、ただ消すだけではなく、「このデータを削除しました」という記録を別のテーブルに残しておきます。 住所録からある人の名前を消したら、別のノートに「この人は消しました」と控えておくようなものです。

tombstoneの基本的な考え方

データを消すだけでなく、「消した」という事実を記録に残す。 次にインポートするとき、その記録を確認して、削除済みのデータは取り込まないようにする。 これがtombstoneの役割です。

tombstoneテーブルには、削除されたデータのIDと削除日時が記録されます。 このテーブルは、データの書き出しファイルにも含まれます。 つまり、「何を削除したか」という情報も一緒に持ち運ばれるのです。

どのように動作するか

tombstoneの動作は、「削除するとき」と「インポートするとき」の2つの場面に分かれます。

削除するとき

  1. 先生がデータを削除する操作を行う
  2. 一括採点が、そのデータをデータベースから削除する
  3. 同時に、tombstoneテーブルに「このIDのデータを削除した」という記録を追加する

インポートするとき

  1. 書き出しファイルからデータを1件ずつ取り出す
  2. そのデータのIDがtombstoneテーブルに記録されていないか確認する
  3. 記録されていれば、そのデータはスキップする(取り込まない)
  4. 記録されていなければ、通常どおりインポートする
ポイント

書き出しファイルにもtombstoneの情報が含まれています。 そのため、PC-Aで削除した記録は、PC-Bにインポートしたときに PC-B側のtombstoneテーブルにも反映されます。 PC-Bでもそのデータが削除済みとして扱われるようになるのです。

PC-AとPC-Bのやりとり — ステップごとの解説

先ほどの「削除したデータが復活する」シナリオを、 tombstoneの仕組みを使った場合でもう一度たどってみます。

ステップ1: 初回のデータ共有

PC-Aに「山田太郎」「佐藤花子」「鈴木一郎」の3人がいます。

PC-Aでデータを書き出し、PC-Bに読み込みます。

PC-Bにも3人のデータが入りました。

ステップ2: PC-Aでデータを削除

PC-Aで「鈴木一郎」を削除します。

PC-Aのデータベースから「鈴木一郎」が消えます。

同時に、tombstoneテーブルに「鈴木一郎のID」が記録されます。

ステップ3: 再びPC-Bにインポート

PC-Aでデータを書き出します。ファイルには「山田太郎」「佐藤花子」の2人分のデータと、tombstone情報が含まれます。

PC-Bに読み込むと、まずtombstone情報が反映されます。

PC-Bのtombstoneテーブルに「鈴木一郎のID」が記録されます。

PC-B側に残っていた「鈴木一郎」のデータも、tombstoneに基づいて削除されます。

結果

PC-AでもPC-Bでも、「山田太郎」「佐藤花子」の2人だけが残っています。 削除したデータが復活することはありません。

全テーブル対応の意味

一括採点のデータベースには多くのテーブルがあります。 生徒データだけでなく、試験、クラス、採点領域、採点結果など、さまざまなデータがテーブルごとに管理されています。

tombstoneの仕組みは、最初は一部のテーブルにのみ対応していました。 しかし、それでは不十分です。 たとえば生徒データにはtombstoneがあるのに、採点結果にはない場合、 削除した採点結果がインポートで復活してしまいます。

そこで、インポート対象となるすべてのテーブルにtombstoneの仕組みを適用しました。 これにより、どの種類のデータを削除しても、インポート時に復活することがなくなりました。

全テーブル対応で安心

生徒、クラス、試験、ページ、採点領域、採点結果、解答用紙の設定など、 一括採点で扱うすべてのデータについて、 削除した記録が保持されるようになっています。 どのデータを消しても、インポートで戻ってくる心配はありません。

tombstone(削除記録)は、「消したデータが復活しない」ことを保証するための仕組みです。 データを削除するときに「消しました」という記録を残し、 インポート時にその記録を参照して、削除済みのデータをスキップします。

一括採点では、すべてのテーブルにこの仕組みを適用しています。 複数のパソコンでデータをやりとりしても、 削除したデータが意図せず復活することはありません。 安心してデータの書き出し・読み込みをお使いください。

一括採点を使ってみませんか?

最新版をダウンロードして、採点作業を効率化しましょう。

最新版をダウンロード

一括採点

中学校の先生が、全国の先生のために作った、採点ツール。

© 2023-2026 KeppyNaushika. AGPLv3 オープンソースソフトウェアとして開発しています。