SCORMの学習ステータスとは、eラーニング教材がLMSに対して「学習者が今どの状態にあるか」を伝えるためのデータ要素です。SCORM 1.2ではlesson_status、SCORM 2004ではcompletion_statusとsuccess_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_modeがbrowseの場合、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_statusが2つのデータ要素に分離されました。
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_thresholdとcmi.progress_measureによるLMS側の自動判定が行われる場合があります。教材がcompletion_statusを直接セットしていても、LMSが上書きする可能性があるため、imsmanifest.xmlの設定と合わせて設計する必要があります。
5. 教材タイプ別の設計パターン
教材の種類によって、ステータスの設定方法は異なります。以下に代表的な3パターンを示します。
推奨設定一覧
| 設計パターン | 教材の例 | SCORM 1.2での設定 | SCORM 2004での設定 |
|---|---|---|---|
| 閲覧型 | スライド教材、動画教材 | 最終ページ到達でcompleted | completion_status = completed / success_statusは設定しない |
| テスト型 | 確認テスト、試験 | スコア送信+マスタリースコアで自動判定 | completion_status = completed(提出時)/ success_status = passed or failed |
| ハイブリッド型 | テスト付き学習教材 | 全ページ閲覧+テスト合格でpassed | completion_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を使います。completedとpassedは排他的な値なので、両方を同時にセットすることはできません。
Q2. SCORM 2004で教材がcompletion_statusをセットしても反映されないのはなぜですか?
imsmanifest.xmlでcompletionThreshold(cmi.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_statusとsuccess_statusの2つに分離されている - ステータスの値と遷移ルールを正しく理解し、教材タイプに合った設計パターンを選ぶことが重要
- LMSによる自動判定(マスタリースコア・閾値)と教材側の手動設定が競合しないよう注意する
- 重要なステータス変更の直後には必ず
Commitを呼び出し、データの消失を防ぐ - SCORM 1.2から2004への移行時は、ステータスの分離に対応した実装変更が必要
SCORMの学習ステータス設計でお困りですか?株式会社エレファンキューブは、eラーニング専門18年・3,000件超の制作実績で、教材の完了判定・合否判定の最適な設計をサポートします。既存教材のステータス不具合の修正から新規教材の設計まで、お気軽にお問い合わせください。
株式会社エレファンキューブ
eラーニング教材制作の専門会社。2008年の創業以来、3,000件超の制作実績を持ち、SCORM 1.2 / SCORM 2004 / xAPI / cmi5など各種規格に精通。企画からLMS搭載まで、ワンストップで対応しています。
コーポレートサイト