現場

基準は今もあなたのものだ — 採点ツールがやらないこと

著者: makemind · 2026年7月21日

先に明かしておく。 2026年3月にこの雑誌は、ある教師が採点ツールを作った話を載せた。この現場は特定の学校ではない。 実際にそう回っている形をそのまま構成し、どこかは明かさない。以下はその形どおりに自分で作ったものであり、答案とルーブリックはすべて作り物だ。

元の記事の問題は別のところにあった。道具が点をつけたという話はあるのに、何を根拠につけたのかがなかった。

採点においてそれは些細な欠落ではない。点数は生徒が異議を申し立てられるものでなければならず、教師はその異議に答えられなければならない。理由のない点数は、異議を申し立てることも答えることもできない。

ルーブリックはデータだ

まずこの道具が持たないものから。何が良い答えかを判断するコードがない。 それはルーブリックであり、ルーブリックは教師が書いたデータだ。

/// One rubric line, written by the teacher.
///
/// `accept` is the list of things that earn the mark. It is deliberately a list
/// of strings rather than a regular expression or a scoring function: the
/// teacher has to be able to read their own standard back, and change it
/// without asking anyone.

正規表現や採点関数にしなかった理由がそこにある。教師が自分の基準を読み返せなければならない。 実行ログにその読み返しがある。

rubric: Q1(10) accept=[24] | Q2(10) accept=[x=3, x = 3, 3]
      | Q3(20) accept=[-5, x=-5] | Q4(10) accept=[12cm, 12 cm]

2番の accept が三つあるのを見てほしい。x=3x = 33。空白と表記をどこまで許すかが採点基準であり、それは教師の判断であって道具の寛容ではない。

部分点は理由を付けて出てくる

ここがこの編の中心だ。採点表を参照テーブルから判断に変えるのは部分点だ。

/// Mark one answer against one rubric line, and say which branch was taken.
///
/// The reason for returning the branch and not just the number: a teacher
/// overriding a mark needs to see what the scheme decided, not guess at it.
(int, String) _mark(RubricItem r, String? given) {
  if (given == null || given.isEmpty) return (0, 'blank');
  if (r.accept.contains(given)) return (r.points, 'accepted');
  if (r.partial.containsKey(given)) {
    return (r.partial[given]!, 'partial (${r.trap})');
  }
  return (0, 'wrong');
}

点数だけを返さず、どの枝を通ったかを一緒に返す。実際の答案をひとつそのまま移す。

paper 02: Q1 "24" -> 10/10 (accepted)
        | Q2 "x=3" -> 10/10 (accepted)
        | Q3 "5" -> 8/20 (partial (drops the minus sign on the root))
        | Q4 "12 cm" -> 10/10 (accepted)

3番が20点満点中8点で、なぜ8点かが付いている。 根の符号を落としたということ。生徒が尋ねたら教師はその行を見せればいい。

検証もそれを見る。

# 部分点はルーブリックのどの枝が与えたかを言わなければならない。理由のない
# 数字は反論できず、教師は反論できなければならない。
grep -q 'partial (drops the minus sign on the root)' captures/run.log \
  || { echo "a partial mark arrived without the reason that produced it"; exit 1; }
Papers — 40.5 average, 8 papers marked against the rubric。実レンダーのキャプチャ
Papers — 40.5 average, 8 papers marked against the rubric。実レンダーのキャプチャ

このコンテンツは開発者以上が必要です

サインインしてプランをアップグレードすると続きを読めます。

プランを見る
Twitter