SCORMデータモデル(CMIエレメント)とは、eラーニング教材(SCO)とLMSの間でやり取りされるデータ項目の定義です。学習者の進捗状況・得点・完了状態などを、どのような名前・形式で記録するかを標準化しており、SCORM準拠の教材開発では必須の知識となります。
1. SCORMデータモデルとは
SCORMのランタイム通信では、教材(SCO)がJavaScript APIを通じてLMSにデータを読み書きします。このとき使用されるデータ項目をデータモデル(Data Model)またはCMIエレメントと呼びます。
データモデルには大きく分けて2つのバージョンがあります。
- SCORM 1.2 ——
cmi.core.*を中心としたフラットな構造 - SCORM 2004 ——
cmi.*を中心とした拡張・再設計された構造
教材開発者は、これらのエレメントを LMSGetValue() / GetValue() で読み取り、LMSSetValue() / SetValue() で書き込むことで、LMSと学習データを連携させます。
2. SCORM 1.2 CMIエレメント一覧
SCORM 1.2で使用される主要なCMIエレメントの一覧です。R=読み取り専用、W=書き込み専用、RW=読み書き可能を示します。
cmi.core 系(必須エレメント)
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.core.student_id | 学習者のID | CMIString255 | R |
| cmi.core.student_name | 学習者の氏名 | CMIString255 | R |
| cmi.core.lesson_location | 学習位置(ブックマーク) | CMIString255 | RW |
| cmi.core.credit | 単位認定の有無 | "credit" / "no-credit" | R |
| cmi.core.lesson_status | 学習ステータス | "passed","completed","failed","incomplete","browsed","not attempted" | RW |
| cmi.core.entry | 初回/再開の区分 | "ab-initio","resume","" | R |
| cmi.core.score.raw | 素点 | CMIDecimal (0-100) | RW |
| cmi.core.score.min | 最低点 | CMIDecimal | RW |
| cmi.core.score.max | 最高点 | CMIDecimal | RW |
| cmi.core.total_time | 累計学習時間 | CMITimespan (HHHH:MM:SS.SS) | R |
| cmi.core.session_time | 今回のセッション時間 | CMITimespan | W |
| cmi.core.exit | 終了方法 | "time-out","suspend","logout","" | W |
| cmi.core.lesson_mode | 学習モード | "browse","normal","review" | R |
cmi.suspend_data / cmi.launch_data 系
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.suspend_data | 中断データ(自由形式の保存領域) | CMIString4096 | RW |
| cmi.launch_data | 起動時パラメータ | CMIString4096 | R |
| cmi.comments | 学習者コメント | CMIString4096 | RW |
| cmi.comments_from_lms | LMSからのコメント | CMIString4096 | R |
cmi.objectives / cmi.interactions 系
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.objectives._count | 目標の数 | CMIInteger | R |
| cmi.objectives.n.id | 目標ID | CMIIdentifier | RW |
| cmi.objectives.n.score.raw | 目標の素点 | CMIDecimal | RW |
| cmi.objectives.n.score.min | 目標の最低点 | CMIDecimal | RW |
| cmi.objectives.n.score.max | 目標の最高点 | CMIDecimal | RW |
| cmi.objectives.n.status | 目標のステータス | "passed","completed","failed","incomplete","browsed","not attempted" | RW |
| cmi.interactions._count | インタラクション数 | CMIInteger | R |
| cmi.interactions.n.id | インタラクションID | CMIIdentifier | W |
| cmi.interactions.n.type | 問題の種類 | "true-false","choice","fill-in","matching","performance","sequencing","likert","numeric" | W |
| cmi.interactions.n.result | 解答結果 | "correct","wrong","unanticipated","neutral",CMIDecimal | W |
| cmi.interactions.n.latency | 解答にかかった時間 | CMITimespan | W |
3. SCORM 2004 CMIエレメント一覧
SCORM 2004ではデータモデルが大幅に拡張され、名前空間も整理されました。以下に主要エレメントを示します。
学習者情報・基本エレメント
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.learner_id | 学習者のID | long_identifier_type (4000文字) | R |
| cmi.learner_name | 学習者の氏名 | localized_string_type | R |
| cmi.location | 学習位置(ブックマーク) | characterstring (1000文字) | RW |
| cmi.credit | 単位認定の有無 | "credit" / "no-credit" | R |
| cmi.completion_status | 完了ステータス | "completed","incomplete","not attempted","unknown" | RW |
| cmi.success_status | 合否ステータス | "passed","failed","unknown" | RW |
| cmi.entry | 初回/再開の区分 | "ab-initio","resume","" | R |
| cmi.mode | 学習モード | "browse","normal","review" | R |
| cmi.exit | 終了方法 | "time-out","suspend","logout","normal","" | W |
| cmi.session_time | 今回のセッション時間 | timeinterval (PT形式: PT1H30M) | W |
| cmi.total_time | 累計学習時間 | timeinterval | R |
| cmi.suspend_data | 中断データ | characterstring (64000文字) | RW |
| cmi.launch_data | 起動時パラメータ | characterstring (4000文字) | R |
| cmi.max_time_allowed | 最大許容時間 | timeinterval | R |
| cmi.time_limit_action | 時間超過時の動作 | "exit,message","exit,no message","continue,message","continue,no message" | R |
| cmi.completion_threshold | 完了とみなす閾値 | real (0.0-1.0) | R |
| cmi.scaled_passing_score | 合格とみなす閾値 | real (-1.0-1.0) | R |
| cmi.progress_measure | 進捗度 | real (0.0-1.0) | RW |
| cmi.learner_preference.audio_level | 音量設定 | real (>=0) | RW |
| cmi.learner_preference.language | 言語設定 | language_type | RW |
| cmi.learner_preference.delivery_speed | 再生速度 | real (>=0) | RW |
| cmi.learner_preference.audio_captioning | 字幕設定 | state (-1, 0, 1) | RW |
スコア系エレメント
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.score.raw | 素点 | real | RW |
| cmi.score.min | 最低点 | real | RW |
| cmi.score.max | 最高点 | real | RW |
| cmi.score.scaled | 正規化スコア(-1.0〜1.0) | real (-1.0-1.0) | RW |
cmi.objectives / cmi.interactions / cmi.comments_from_learner 系
| エレメント名 | 説明 | データ型 | R/W |
|---|---|---|---|
| cmi.objectives._count | 目標の数 | integer (non-negative) | R |
| cmi.objectives.n.id | 目標ID | long_identifier_type | RW |
| cmi.objectives.n.success_status | 目標の合否 | "passed","failed","unknown" | RW |
| cmi.objectives.n.completion_status | 目標の完了状態 | "completed","incomplete","not attempted","unknown" | RW |
| cmi.objectives.n.score.scaled | 目標の正規化スコア | real (-1.0-1.0) | RW |
| cmi.objectives.n.progress_measure | 目標の進捗度 | real (0.0-1.0) | RW |
| cmi.interactions._count | インタラクション数 | integer (non-negative) | R |
| cmi.interactions.n.id | インタラクションID | long_identifier_type | RW |
| cmi.interactions.n.type | 問題の種類 | "true-false","choice","fill-in","long-fill-in","matching","performance","sequencing","likert","numeric","other" | RW |
| cmi.interactions.n.result | 解答結果 | "correct","incorrect","unanticipated","neutral",real | RW |
| cmi.interactions.n.latency | 解答にかかった時間 | timeinterval | RW |
| cmi.interactions.n.timestamp | 解答日時 | time (ISO 8601) | RW |
| cmi.comments_from_learner._count | 学習者コメント数 | integer | R |
| cmi.comments_from_learner.n.comment | コメント本文 | localized_string_type (4000文字) | RW |
| cmi.comments_from_lms._count | LMSコメント数 | integer | R |
| cmi.comments_from_lms.n.comment | LMSコメント本文 | localized_string_type (4000文字) | R |
4. SCORM 1.2 → 2004 マッピング表
SCORM 1.2のエレメントがSCORM 2004ではどのエレメントに対応するかを示します。移行時の参考にしてください。
| SCORM 1.2 | SCORM 2004 | 備考 |
|---|---|---|
| cmi.core.student_id | cmi.learner_id | 名前空間の変更のみ |
| cmi.core.student_name | cmi.learner_name | 同上 |
| cmi.core.lesson_location | cmi.location | 最大文字数が255→1000に拡張 |
| cmi.core.lesson_status | cmi.completion_status + cmi.success_status | 1つのステータスが完了と合否の2軸に分離 |
| cmi.core.score.raw | cmi.score.raw | データ型がrealに変更 |
| cmi.core.score.min | cmi.score.min | 同上 |
| cmi.core.score.max | cmi.score.max | 同上 |
| (なし) | cmi.score.scaled | 2004で新規追加(正規化スコア) |
| cmi.core.total_time | cmi.total_time | 時間形式がHHHH:MM:SS→ISO 8601 PT形式に変更 |
| cmi.core.session_time | cmi.session_time | 同上 |
| cmi.core.exit | cmi.exit | "normal"が追加 |
| cmi.core.entry | cmi.entry | 変更なし |
| cmi.core.credit | cmi.credit | 変更なし |
| cmi.core.lesson_mode | cmi.mode | 名前の変更のみ |
| cmi.suspend_data | cmi.suspend_data | 最大文字数が4096→64000に大幅拡張 |
| cmi.launch_data | cmi.launch_data | 最大文字数が4096→4000に微減 |
| (なし) | cmi.progress_measure | 2004で新規追加(進捗度0.0-1.0) |
| (なし) | cmi.completion_threshold | 2004で新規追加 |
| (なし) | cmi.scaled_passing_score | 2004で新規追加 |
5. よく使うエレメントの解説
lesson_status / completion_status + success_status
SCORM 1.2では cmi.core.lesson_status 1つで「完了かつ合格」「未完了」などを表現していました。SCORM 2004ではこれがcompletion_status(完了状態)とsuccess_status(合否)の2つに分離されています。
これにより「完了したが不合格」「未完了だが途中経過は合格ライン」といった細かい状態表現が可能になりました。移行時は、1.2の lesson_status の値を2つのステータスに振り分けるロジックが必要です。
suspend_data
suspend_data は教材が自由に使える保存領域で、学習の中断・再開時にブックマーク情報やUIの状態を保持するために使います。SCORM 1.2では最大4096文字でしたが、SCORM 2004では64000文字に大幅拡張されました。
JSON形式でデータを格納するのが一般的ですが、LMSによっては日本語(マルチバイト文字)の扱いに差異がある場合があります。encodeURIComponent() でエンコードしてから保存すると安全です。
score.scaled(SCORM 2004のみ)
SCORM 2004で追加された cmi.score.scaled は、-1.0から1.0の範囲で正規化されたスコアです。cmi.scaled_passing_score(合格閾値)と比較することで、LMSが自動的に cmi.success_status を判定できる仕組みになっています。100点満点のテストで80点なら 0.8 と設定します。
session_time の形式の違い
SCORM 1.2では HHHH:MM:SS.SS(例: 0001:23:45.00)という独自形式を使いますが、SCORM 2004ではISO 8601のDuration形式(例: PT1H23M45S)に変更されました。フォーマットを間違えるとLMSに記録されないことがあるため注意が必要です。
6. よくある質問(FAQ)
Q1. SCORM 1.2と2004でデータモデルの最大の違いは何ですか?
最大の違いは lesson_status が completion_status と success_status に分離された点です。これにより学習の完了状態と合否を独立して管理できるようになりました。また、suspend_data の最大容量が4096文字から64000文字に大幅拡張されたことも実務上の大きな変更点です。
Q2. cmi.suspend_data に日本語を保存しても問題ありませんか?
SCORM仕様上は問題ありませんが、LMSの実装によっては文字化けやデータ欠損が発生するケースがあります。安全のため、encodeURIComponent() でエンコードしてから保存し、読み出し時に decodeURIComponent() でデコードすることを推奨します。
Q3. cmi.interactions は必ず実装する必要がありますか?
必須ではありません。テスト結果の詳細(各問題の正誤・解答内容)をLMSに記録したい場合に使用します。単純な進捗管理だけであれば lesson_status(1.2)や completion_status / success_status(2004)の設定で十分です。
Q4. SCORM 1.2の教材をSCORM 2004に移行する際、データモデル部分で注意すべき点は?
主な注意点は3つです。(1) lesson_status を completion_status と success_status に分離するロジックの実装、(2) 時間形式を HHHH:MM:SS.SS からISO 8601 PT形式に変換、(3) API関数名の変更(LMSGetValue → GetValue など)。マッピング表(第4章)を参考に、1つずつ対応を確認してください。
Q5. LMSによってサポートされるエレメントに差異はありますか?
はい、あります。SCORM仕様では必須エレメント(Mandatory)とオプションエレメント(Optional)が定義されていますが、特に cmi.interactions や cmi.objectives の対応範囲はLMSによって異なります。導入前にLMSベンダーに対応エレメントを確認することをお勧めします。
7. まとめ
- SCORM 1.2 は
cmi.core.*を中心としたシンプルな構造で、導入・実装が容易 - SCORM 2004 は
completion_statusとsuccess_statusの分離、score.scaledの追加など、より精密な学習管理が可能 suspend_dataの容量はSCORM 2004で約15倍に拡張(4096→64000文字)されており、複雑な教材の中断・再開に対応しやすい- 1.2から2004への移行時は、ステータスの分離・時間形式の変換・API関数名の変更が主な対応ポイント
- LMSによるオプションエレメントのサポート差異があるため、事前確認が重要
SCORMデータモデルの実装やバージョン移行でお困りの方は、eラーニング専門18年・3,000件超の実績を持つ株式会社エレファンキューブにご相談ください。教材のSCORM変換から技術的なトラブルシューティングまで、専門スタッフがサポートいたします。
株式会社エレファンキューブ
eラーニング教材制作の専門会社。2008年の創業以来、3,000件超の制作実績を持ち、SCORM 1.2 / SCORM 2004 / xAPI / cmi5など各種規格に精通。企画からLMS搭載まで、ワンストップで対応しています。
コーポレートサイト