前回、SCORM対応教材の作り方で、何も成績を送信しない、最も単純なSCORMのAPIを実装してみました。これだけでは、仕様を満たしているとはいえますが、使い物にはなりません。そこで、今回はlesson_status(学習結果)を送信できるようにしてみましょう。
SCORM1.2では、lesson_statusには、
- incomplete: 未修了
- completed: 修了
- passed: 合格
- failed: 不合格
- browsed: 閲覧済
- not attempted: 未受講
の6種類値を設定することができますが、実際によく送信される値は以下の4つでです。
- passed
- completed
- failed
- incomplete
たとえば、開いた瞬間に、completed(修了)を送信する教材であればこういう風にかけばOKです。
<script type=”text/javascript”>
var API;
for(win = window;win.API==null && win.parent!=null && win.parent!=win; win = win.parent);
API = win.API;
API.LMSInitialize(“”);
API.LMSSetValue(“cmi.core.lesson_status”, “completed”)
API.LMSFinish(“”);
</script>
クイズ問題などであれば合否判定が発生しますが、開くだけでよい教材なら、これだけのプログラムで成績を記録することができます。実際には、session_time(学習時間)を送信したほうがよいので、bodyタグのonloadでinitializeを行い、bodyタグのonunloadやonbeforeunloadでFinishを送信する教材が多いようです。
弊社が販売しているオーサリングツールの中でも、とりわけ、QuizCreatorのAPI通信についての問い合わせが多いので、それぞれ紹介します。
以下の通信ログは、QuizCreatorで4問の問題を作成し、SCORM1.2向け書き出ししたものの通信例です。
QuizCreator
通信ログの例(SCORM1.2)
# LMSInitialize —–(1)
# LMSGetValue(cmi.interactions._count) : 0
# LMSGetValue(cmi.student_data.mastery_score) : 60
# LMSGetValue(cmi.core.student_id) : 123456
# LMSGetValue(cmi.core.student_name) : キバンインターナショナル
# LMSCommit
# LMSGetValue(cmi.core.lesson_mode) : normal
# LMSGetValue(cmi.core.lesson_status) : incomplete —–(2)
# LMSSetValue(cmi.interactions.0.id,Q01)
# LMSSetValue(cmi.interactions.0.type,true-false)
# LMSSetValue(cmi.interactions.0.weighting,1)
# LMSSetValue(cmi.interactions.0.correct_responses.0.pattern,t)
# LMSSetValue(cmi.interactions.0.student_response,t)
# LMSSetValue(cmi.interactions.0.time,20:23:51)
# LMSSetValue(cmi.interactions.0.result,correct)
# LMSSetValue(cmi.interactions.1.id,Q02)
# LMSSetValue(cmi.interactions.1.type,choice)
# LMSSetValue(cmi.interactions.1.weighting,1)
# LMSSetValue(cmi.interactions.1.correct_responses.0.pattern,東京)
# LMSSetValue(cmi.interactions.1.student_response,京都)
# LMSSetValue(cmi.interactions.1.time,20:23:53)
# LMSSetValue(cmi.interactions.1.result,wrong)
# LMSSetValue(cmi.interactions.2.id,Q03)
# LMSSetValue(cmi.interactions.2.type,choice)
# LMSSetValue(cmi.interactions.2.weighting,1)
# LMSSetValue(cmi.interactions.2.correct_responses.0.pattern,3,5)
# LMSSetValue(cmi.interactions.2.student_response,3,5)
# LMSSetValue(cmi.interactions.2.time,20:23:55)
# LMSSetValue(cmi.interactions.2.result,correct)
# LMSSetValue(cmi.interactions.3.id,Q04)
# LMSSetValue(cmi.interactions.3.type,fill-in)
# LMSSetValue(cmi.interactions.3.weighting,1)
# LMSSetValue(cmi.interactions.3.correct_responses.0.pattern,pen,pencil)
# LMSSetValue(cmi.interactions.3.student_response,pen)
# LMSSetValue(cmi.interactions.3.time,20:23:58)
# LMSSetValue(cmi.interactions.3.result,correct)
# LMSCommit —–(3)
# LMSSetValue(cmi.core.score.raw,75)
# LMSSetValue(cmi.core.score.min,0)
# LMSSetValue(cmi.core.score.max,100)
# LMSSetValue(cmi.core.lesson_status,passed)
# LMSSetValue(cmi.core.exit,)
# LMSSetValue(cmi.core.session_time,0000:00:16.73) —–(4)
# LMSFinish —–(5)
QuizCreatorで作成した教材は、たった4問に回答しただけで、これだけの内容をLMSに送信しています。量は多いですが、それほど複雑なことはしていません。最初の部分から順に解説していきます。
(1) LMSInitializeを送信し、LMSとのやり取りを開始します。
(1)~(2) 受講者のIDや名前など、プレイヤー上で表示するための情報を取得します。ここまでの通信はクイズをロードすると自動的にすすみます。
(2)~(3) 問題に解答し終わり、結果表示画面に移動するタイミングで(2)~(3)の通信は行われます。この部分の通信で、設問ごとの問題情報と回答情報を送信します。この部分はとても重要なので、各要素の意味を紹介しておきます。
- LMSSetValue(cmi.interactions.3.id,Q04)
設問の識別IDです。出題順序をランダム化した場合も、問題を一意に識別できるIDが送信されます。問題ごとの正答率などを集計するために使うことになります。
- LMSSetValue(cmi.interactions.3.type,fill-in)
問題種別を表しています。fill-inであれば、記入問題だということがわかります。この情報を使うと、問題種別に合わせて回答表示をカスタマイズすることができます。
- LMSSetValue(cmi.interactions.3.weighting,1)
問題の配点(重み付け)です。
- LMSSetValue(cmi.interactions.3.correct_responses.0.pattern,pen,pencil)
回答例です。penもしくはpencilが回答なのですが、実はこのメッセージは正しくありません。このメッセージを素直に解釈すると、pen と pencilの両方を回答した場合だけが正解になります。本来であれば以下のようなメッセージを送信すべきですが、現状は上記のようなメッセージを送信する仕様になっています。
- LMSSetValue(cmi.interactions.3.correct_responses.0.pattern,pen,pencil)
- LMSSetValue(cmi.interactions.3.correct_responses.0.pattern,pen,pencil)
- LMSSetValue(cmi.interactions.3.student_response,pen)
生徒の回答内容です。このデータを集計することで、各選択肢がどの割合で選択されたかわかるので、問題や解説の質の向上につなげることができます。
- LMSSetValue(cmi.interactions.3.time,20:23:58)
回答が行われた時刻です
- LMSSetValue(cmi.interactions.3.result,correct)
正誤情報: 設問に正解したのかどうかがわかります。
(3)~(4) 全体の得点、合否情報、受講時間を送信します。
(5)最後にLMSFinishを送信します。
LMSFinishなどを、教材を閉じるタイミングで送信する教材も多いのですが、QuizCreatorの場合は、(2)~(5)を結果画面を表示するタイミングで送信していますのでご注意ください。
今回作成したAPI: sample2
次回は、SCORM教材のAPI通信の解析手法について紹介する予定です。