アノテーション描画の安定性向上 — 3層防御で重複を防ぐ
一括採点では、答案に丸やバツなどの採点マーク(アノテーション)を書き込んで採点を進めます。 このアノテーション機能に、同じマークが2重に記録されてしまったり、マークが画面に表示されなくなったりする不具合がありました。 今回、3つの関所を設ける「3層防御」によって、これらの問題を根本的に解決しました。
アノテーションとは
一括採点における「アノテーション」とは、採点時に答案の上に書き込むマークのことです。 丸、バツ、三角、数字、コメント、波線など、先生が紙の答案に赤ペンで書き込むのと同じ役割をします。
アノテーションは、答案画像の上に重ねて表示されます。 一括採点画面で問題ごとにまとめて採点するときも、個別採点画面で1枚ずつ確認するときも、このアノテーションが正確に表示されることが大切です。
- 正解のマーク: 丸
- 不正解のマーク: バツ
- 部分点の表示: 数字(1、2、3...)
- 注意を示すマーク: 波線、ジグザグ線
- 先生からのコメント: テキスト
どんな問題が起きていたか
アノテーション機能には、2つの問題が発生していました。 どちらも採点作業の信頼性に関わる重要な問題です。
問題1: 同じマークが2重に記録される
採点時に丸やバツを書き込むと、同じマークがデータベースに2回登録されてしまうことがありました。 画面上では1つに見えるのに、内部的には2つのデータが存在している状態です。 この重複はデータの不整合を引き起こし、後の処理で予期しない動作につながる可能性がありました。
問題2: マークが画面に表示されない
一括採点画面で採点を進めていると、書き込んだはずのアノテーションが画面に表示されないことがありました。 データとしては保存されているのに、画面の描画が追いつかないという状態です。 先生の立場では、「書き込んだマークが消えてしまった」ように見えるため、大きな不安につながります。
どちらの問題も、採点結果そのもの(点数)には影響しません。 しかし、書き込んだマークが正しく表示されないと、「この採点は大丈夫だろうか」という不安を感じてしまいます。 安心して採点作業を進めるためには、表示の信頼性がとても重要です。
3層防御の仕組み — 3つの関所でチェック
重複の問題を解決するために、「3層防御」という仕組みを導入しました。 これは、アノテーションが登録されるまでの道のりに3つの関所を設けて、同じマークが2回通過できないようにする仕組みです。
身近なたとえで説明します。 イベント会場に入場するとき、受付、会場の入口、座席案内の3か所でチケットを確認するようなものです。 1か所でも「この方はもう入場済みです」と分かれば、二重入場を防ぐことができます。
第1層: 入口チェック(UIレベル)
最初の関所は、画面(UI)のレベルです。 先生が採点マークを書き込んだとき、画面上のアノテーション一覧に同じものがすでに存在しないかを確認します。 イベント会場のたとえでいえば、受付で「同じお名前の方がもう来場されていますね」と確認するようなものです。
第2層: データチェック(データレベル)
2つ目の関所は、データの管理レベルです。 画面から送られてきたアノテーションのデータを、内部の一覧表(状態管理)と照合します。 すでに同じIDのアノテーションが登録されていれば、新規追加ではなく既存データの更新として処理します。 イベント会場のたとえでは、会場入口で名簿を確認し、「すでに入場済みの方です」と判断する段階です。
第3層: 保存時チェック(保存レベル)
3つ目の関所は、データベースに保存する直前のレベルです。 実際にデータを書き込む前に、データベースの中に同じアノテーションがないかを最終確認します。 万が一、第1層と第2層をすり抜けてしまったとしても、この最後の関所で重複を防ぎます。 イベント会場のたとえでは、座席案内の係員が「この席にはもう別の方が座っていますよ」と確認する段階です。
1か所だけのチェックでは、タイミングの問題などですり抜けてしまう可能性があります。 3つの関所を設けることで、どのような操作パターンでも重複が発生しないようになりました。 これが「3層防御」の考え方です。
画面サイズ情報の正しい伝達
「マークが画面に表示されない」問題のもう1つの原因は、画面サイズの情報が正しく伝わっていなかったことでした。 アノテーションは、答案画像の上に正しい位置・サイズで重ねて描画する必要があります。 そのためには、答案画像の大きさ(ページサイズ)の情報が描画処理に正確に届いている必要があります。
ところが、一部の画面遷移のパターンで、このページサイズ情報が描画処理に届かないケースがありました。 サイズ情報がなければ、アノテーションをどこにどの大きさで描けばよいか分からず、結果として何も表示されない状態になっていたのです。
この修正では、ページサイズの情報がどの画面遷移パターンでも確実に伝わるようにデータの流れを見直しました。 これにより、一括採点画面でアノテーションが表示されなくなる問題が解消されました。
アノテーションの描画には、「何を描くか」だけでなく「どこにどの大きさで描くか」の情報も必要です。 この「どこに」の情報が途切れないようにすることで、表示の安定性が大きく向上しました。
修正後の安定性
これらの修正により、一括採点のアノテーション機能は大きく安定しました。 具体的には、以下の点が改善されています。
- 同じアノテーションが重複して登録されることがなくなりました
- 一括採点画面で、書き込んだマークが確実に表示されるようになりました
- 画面を切り替えたり、問題を移動したりしても、アノテーションが安定して描画されます
採点作業中に「マークが消えた」「同じマークが2つある」といった不安を感じることなく、 先生が採点の内容そのものに集中できる環境を整えることができました。
一括採点のアノテーション機能で発生していた「重複登録」と「描画されない」という2つの問題を修正しました。 重複の問題に対しては、UIレベル、データレベル、保存レベルの3つの関所で段階的にチェックする「3層防御」を導入しました。 描画の問題に対しては、画面サイズ情報の伝達経路を見直し、どの画面遷移でも確実にアノテーションが表示されるようにしました。
これらの改善により、先生は採点マークの表示を心配することなく、安心して一括採点をお使いいただけます。 今後もアノテーション機能の使いやすさと信頼性の向上に取り組んでまいります。
関連記事
- 個別採点画面とMathJax数式表示 - アノテーション機能の紹介
- 採点マークの描画を美しく — 波線・ジグザグの統一 - 描画の改善