SCORMの学習ステータスとは、eラーニング教材がLMSに対して「学習者が今どの状態にあるか」を伝えるためのデータ要素です。SCORM 1.2ではlesson_status、SCORM 2004ではcompletion_statussuccess_statusの2つに分かれており、正しく設計しないと「完了したのに未完了と表示される」などのトラブルが発生します。

1. 学習ステータスとは

SCORMにおける学習ステータスは、教材がLMSに送信する「学習の進捗状態」です。LMSはこの値をもとに、受講一覧画面の表示やレポート集計、修了証の発行判定などを行います。

ステータスの設計を誤ると、以下のような問題が起こります。

  • 最後まで閲覧したのに「未完了」のまま
  • テストに合格していないのに「合格」と記録される
  • LMSによって完了判定の結果が異なる

こうしたトラブルを防ぐには、SCORM仕様のステータス値と遷移ルールを正しく理解することが不可欠です。

2. SCORM 1.2のlesson_status

SCORM 1.2では、cmi.core.lesson_statusという1つのデータ要素で完了と合否の両方を管理します。

値の一覧

意味説明
not attempted未着手初期値。学習者がまだ教材を開いていない状態
incomplete未完了学習を開始したが、完了条件を満たしていない
completed完了完了条件を満たした(合否判定なしの教材向け)
passed合格合格条件を満たした(テスト型教材向け)
failed不合格合格条件を満たさなかった
browsed閲覧済みブラウズモードで表示された(LMS側の機能)

重要な仕様ポイント

  • cmi.core.lesson_modebrowseの場合、LMSが自動的にbrowsedをセットすることがある
  • 教材側が明示的にセットしない場合、LMSがマスタリースコア(cmi.student_data.mastery_score)とスコア(cmi.core.score.raw)の比較で自動判定する
  • 自動判定の動作:スコア >= マスタリースコア → passed、スコア < マスタリースコア → failed

3. SCORM 2004のcompletion_statusとsuccess_status

SCORM 2004では、SCORM 1.2のlesson_status2つのデータ要素に分離されました。

completion_status(完了状態)

意味説明
unknown不明初期値。まだ判定されていない
not attempted未着手学習者が教材を開いていない
incomplete未完了学習を開始したが完了条件を満たしていない
completed完了完了条件を満たした

success_status(合否状態)

意味説明
unknown不明初期値。まだ判定されていない
passed合格合格条件を満たした
failed不合格合格条件を満たさなかった

分離のメリット

SCORM 1.2では「完了したが不合格」という状態を正確に表現できませんでした。SCORM 2004では完了と合否が独立しているため、「テストは最後まで受けた(completed)が、点数が足りない(failed)」といった状態を正しく記録できます。

4. 状態遷移の流れ

SCORM 1.2の遷移パターン

not attempted
    │
    ▼(教材を開く)
incomplete
    │
    ├──▶ completed  (閲覧完了・合否判定なし)
    │
    ├──▶ passed     (スコア >= マスタリースコア)
    │
    └──▶ failed     (スコア < マスタリースコア)
              │
              └──▶ passed  (再受験で合格)

SCORM 2004の遷移パターン

completion_status:  unknown → incomplete → completed
                                             ※一度completedになると原則戻らない

success_status:     unknown → passed  (合格)
                    unknown → failed  (不合格)
                    failed  → passed  (再受験で合格)

注意: SCORM 2004では、cmi.completion_thresholdcmi.progress_measureによるLMS側の自動判定が行われる場合があります。教材がcompletion_statusを直接セットしていても、LMSが上書きする可能性があるため、imsmanifest.xmlの設定と合わせて設計する必要があります。

5. 教材タイプ別の設計パターン

教材の種類によって、ステータスの設定方法は異なります。以下に代表的な3パターンを示します。

推奨設定一覧

設計パターン教材の例SCORM 1.2での設定SCORM 2004での設定
閲覧型スライド教材、動画教材最終ページ到達でcompletedcompletion_status = completed / success_statusは設定しない
テスト型確認テスト、試験スコア送信+マスタリースコアで自動判定completion_status = completed(提出時)/ success_status = passed or failed
ハイブリッド型テスト付き学習教材全ページ閲覧+テスト合格でpassedcompletion_status = completed(全ページ閲覧時)/ success_status = passed(テスト合格時)

6. JavaScriptコード例

SCORM 1.2 — 閲覧型教材の完了処理

// 教材の初期化時
function initializeSCORM() {
  API.LMSInitialize("");
  var status = API.LMSGetValue("cmi.core.lesson_status");
  if (status === "not attempted") {
    API.LMSSetValue("cmi.core.lesson_status", "incomplete");
    API.LMSCommit("");
  }
}

// 最終ページ到達時
function setCompleted() {
  API.LMSSetValue("cmi.core.lesson_status", "completed");
  API.LMSCommit("");
}

// 教材の終了時
function terminateSCORM() {
  API.LMSFinish("");
}

SCORM 2004 — テスト型教材の合否処理

// テスト結果の送信
function submitTestResult(score, passingScore) {
  API_1484_11.SetValue("cmi.score.raw", String(score));
  API_1484_11.SetValue("cmi.score.min", "0");
  API_1484_11.SetValue("cmi.score.max", "100");
  API_1484_11.SetValue("cmi.score.scaled", String(score / 100));

  // 完了状態を設定
  API_1484_11.SetValue("cmi.completion_status", "completed");

  // 合否判定
  if (score >= passingScore) {
    API_1484_11.SetValue("cmi.success_status", "passed");
  } else {
    API_1484_11.SetValue("cmi.success_status", "failed");
  }

  API_1484_11.Commit("");
}

7. LMSによる自動判定の注意点

LMSが教材のステータスを自動的に上書きするケースがあります。意図しない動作を防ぐために、以下の点を確認しましょう。

  • SCORM 1.2: cmi.student_data.mastery_scoreがimsmanifest.xmlで設定されている場合、LMSがスコアとの比較でpassed/failedを自動セットする。教材側でもlesson_statusをセットしていると二重判定になりうる
  • SCORM 2004: cmi.completion_thresholdが設定されている場合、LMSがcmi.progress_measureの値と比較してcompletion_statusを自動判定する。教材側のSetValueよりLMSの自動判定が優先されるLMSもある
  • 対策: imsmanifest.xmlでマスタリースコアや閾値を設定する場合は、教材側での手動セットと競合しないよう、どちらか一方に統一する

8. よくある質問(FAQ)

Q1. SCORM 1.2で「completed」と「passed」のどちらを使うべきですか?

合否判定が不要な閲覧型教材ではcompletedを使います。テスト型教材で合格/不合格を区別したい場合はpassed/failedを使います。completedpassedは排他的な値なので、両方を同時にセットすることはできません。

Q2. SCORM 2004で教材がcompletion_statusをセットしても反映されないのはなぜですか?

imsmanifest.xmlでcompletionThresholdcmi.completion_threshold)が設定されている場合、LMSがprogress_measureの値をもとに自動判定します。この自動判定が教材側の設定より優先されるLMSがあるため、manifest側の設定を確認してください。

Q3. lesson_statusを「incomplete」から「not attempted」に戻すことはできますか?

SCORM仕様上、ステータスの「巻き戻し」は想定されていません。一度incomplete以降に進んだ値をnot attemptedに戻す動作は未定義であり、多くのLMSでエラーまたは無視されます。

Q4. 再受験でfailedからpassedに変更することはできますか?

はい、可能です。SCORM 1.2・2004ともに、failedからpassedへの遷移は仕様上許可されています。再受験時にスコアとステータスを更新すればLMSに反映されます。ただし、LMSの設定によっては受験回数制限がかかっている場合があります。

Q5. ブラウザを閉じてしまった場合、ステータスはどうなりますか?

LMSCommit(SCORM 1.2)またはCommit(SCORM 2004)を実行する前にブラウザを閉じると、セットした値がLMSに保存されない可能性があります。重要な状態変更の直後には必ずCommitを呼び出す設計にしましょう。

9. まとめ

  • SCORM 1.2はlesson_status1つで完了・合否を管理し、SCORM 2004はcompletion_statussuccess_statusの2つに分離されている
  • ステータスの値と遷移ルールを正しく理解し、教材タイプに合った設計パターンを選ぶことが重要
  • LMSによる自動判定(マスタリースコア・閾値)と教材側の手動設定が競合しないよう注意する
  • 重要なステータス変更の直後には必ずCommitを呼び出し、データの消失を防ぐ
  • SCORM 1.2から2004への移行時は、ステータスの分離に対応した実装変更が必要

SCORMの学習ステータス設計でお困りですか?株式会社エレファンキューブは、eラーニング専門18年・3,000件超の制作実績で、教材の完了判定・合否判定の最適な設計をサポートします。既存教材のステータス不具合の修正から新規教材の設計まで、お気軽にお問い合わせください。

SCORMのことなら、何でもご相談ください

SCORM変換・教材制作・技術トラブルの解決まで、ワンストップで対応します。ご相談・お見積もりは無料です。

無料で相談する

株式会社エレファンキューブ

eラーニング教材制作の専門会社。2008年の創業以来、3,000件超の制作実績を持ち、SCORM 1.2 / SCORM 2004 / xAPI / cmi5など各種規格に精通。企画からLMS搭載まで、ワンストップで対応しています。

コーポレートサイト