chapter4...
TRANSCRIPT
-
SCORM アセッサ講習会テキスト
Chapter4
SCORMコンテンツ作成方法
-
Chapter4:SCORM コンテンツ作成方法
この章では、SCORMコンテンツを制作する際のポイントや、SCORMコンテンツの必須要素であるマニフェストファイルや SCORM APIについて、実例を挙げながら説明します。
この章の目的
この章を修了すると、 ・ SCORMコンテンツを制作する際の禁止事項や、コンテンツと LMSとの役割分担について説明できる
・ SCORM APIについて理解し、基本的な SCOを作成できる ・ SCORM APIについて理解し、より高度で実用的な SCOを設計・作成できる
前提知識
この章を学ぶ前に、以下の知識/スキルが必要です。: ・ HTMLタグを使ったコンテンツを制作できる ・ JavaScriptを使ったコンテンツを制作できる ・ SCORM1.2の概要について理解している ・ SCORMコンテンツを制作するために必要なものは何か理解している
ノート
4-2
-
Chapter4:SCORM コンテンツ作成方法
1. SCORMコンテンツの設計ポイント
ここでは、SCORM コンテンツを開発する際の、設計・制作上の注意点について説明します。 設計のポイントは、「正しいコンテンツを制作すること」です。例えば、APIの使用方法など、表面的には規格に準拠していても、SCORMのコンセプトに反する設計がされていれば正しいコンテンツとは言えません。 また、LMSの SCORM実装方法によっては、SCOの制作にいくつかの制約が出てきます。 正しいコンテンツを制作するための重要なポイントについて見ていきましょう。
1-1. SCO の独立性(1)リンクについて
SCO は独立性を保っておく必要があります。つまり、SCO は単独で完結し、かつ、単独で利用可能でなければなりません。 そのため、SCOは他の SCOに依存していたり、関連をもったりしてはいけません。 SCORM規格の目的のひとつである「コンテンツの再利用性向上」を実現するためには、
SCOの独立性が重要です。
■ 異なる SCO 間のリンク
SCO-1の HTMLから SCO-2の HTMLにハイパーリンク( )を記述することは、SCO-1が SCO-2と関連をもつことになり許されません(図 4-1-1)。 このような構造になっていると、SCOは単独で完結し、利用可能になっているとは言えません。再利用する場合には、SCO-1と SCO-2をペアで利用する必要があるので、SCOの独立性が保証されないということになります。
ノート
4-3
-
Chapter4:SCORM コンテンツ作成方法
SCO-1
HTML
HTML
HTML
SCO間にはリンクを設 定できない HTML
HTML
HTML
SCO-2
図 4-1-1 異なる SCO 間のリンク
■ 同一 SCO 内のリンク
同一 SCO内の HTMLどうしであれば、ハイパーリンクを設定しても、SCOの独立性は保たれます。そのため同一 SCO内でのリンクを利用することは可能です(図 4-1-2)。
HTML
HTML
HTML
SCO-2
HTML
HTML
同一 SCO内で あればリンクを
設定できる
HTML
SCO-1
図 4-1-2 同一 SCO 内のリンク
■ 複数の SCO のナビゲーション制御
複数の SCOをどのような順番で提示するかというナビゲーション制御は、LMSの役割です。そのため、SCOが他の SCOを直接起動することはできません。
ノート
4-4
-
Chapter4:SCORM コンテンツ作成方法
1-2. SCO の独立性(2)データ参照について
SCOの独立性を保つためのもうひとつのポイントが、データ参照です。 コンテンツの仕様や学習目標によっては、他の SCOのデータモデルを参照したいことがあります。例えば、他の SCO の習得状態(lesson_status)を参照して、合格と不合格でそれぞれ表示される内容を変えたり、他の SCO との得点の総和や平均を学習者に提示したりする場合が考えられます。 しかし、SCOの独立性を保つためには、SCOから他の SCOのデータモデルを参照したり、更新したりすることはできません。
■ 複数の SCO の平均点や合計点の提示
SCO-1が SCO-2の得点を取得し、SCO-1の得点との平均点を学習者に提示することはできません(図 4-1-3)。 複数の SCOの平均点や合計点などを学習者へ提示するのは、コンテンツではなく、LMSの役割です。ただし、このような機能の有無は LMSに依存するので注意が必要です。
SCO-1 SCO-2
平均点 80
得点 100 60 得点
他の SCOを参照できない
図 4-1-3 データモデルの参照
コラム SCO間のリンク、およびデータ参照について、ふたつの SCO を統合し、ひとつの SCO とすることで問題
ノート
4-5
-
Chapter4:SCORM コンテンツ作成方法
を解決できる場合があります。
1-3. SCO のサイズ
ひとつの SCOの大きさや長さを決めるときにも注意すべきポイントがあります。 コンテンツによっては、コンテンツ全体をひとつの SCOとすることもありますし、章または節を SCO にする場合もあります。さらに、1 ページを 1SCO に対応させることも可能です。どの方法も規格の上では間違いではありません。 しかし、SCORM規格には、「教育的に意味のあるひとかたまりをひとつの SCOにする」という原則があります。この「教育的に意味のある」という点が重要です。 例えば、ある機械の操作方法が図と説明文から構成されているとき、図と説明文それぞ
れを別 SCO として設計したり、ひととおりの操作手順をページ単位に分けてそれぞれをSCO とする、といった方法では、「教育的に意味のあるかたまり」を分割していることになり、あまりよいとは言えません(図 4-1-4)。
操作方法
①~⑩
SCO-1
図
SCO-2
操作方法①~⑩
SCO-1
操作方法①~⑦
SCO-2
操作方法⑧~⑩
SCO-1
図 操作方法①~⑩
図
図 4-1-4 教育的に意味のあるかたまり(1)
また、たくさんのトピックで構成されるコンテンツ全体を 1 つの SCO にする方法も望ましくありません(図 4-1-5)。
ノート
4-6
-
Chapter4:SCORM コンテンツ作成方法
・・・・・・ 7 章 3 章2 章1 章
SCO-1
1 章 1 章 1 章 1 章 1 章 1 章
1 章
SCO-1
2 章
SCO-2 7 章構成の教材
3 章
SCO-3
7 章
SCO-7
・・・・・
図 4-1-5 教育的に意味のあるかたまり(2)
コラム インストラクショナルデザインの観点からは、1つのレッスンの学習時間を 10~20分程度にすると、学習効果が高いと言われています。
1-4. SCO 間のナビゲーション
SCO間の遷移(ナビゲーション)について考えていきましょう。 既に学習したとおり、SCO間にはリンクを設定することはできません。そのため、SCOから SCOへは直接移動することができません。
SCORM に準拠していないコンテンツであれば、ある章の終わりに「次の章へ」というボタンがあり、それを押すと次の章が起動される、という使い方が考えられます。しかし、
SCORMコンテンツではそれができません。 SCO間のナビゲーションは、LMSの役割です(図 4-1-6)。
ノート
4-7
-
Chapter4:SCORM コンテンツ作成方法
LMS SCO-1
SCO-3
①
②
③
SCO-1
SCO-3
①
②
③ SCO-2
LMS
SCO-2
図 4-1-6 SCO 間のナビゲーション
ただし、SCORM規格では、LMSでどのようにナビゲーションすべきかについては定義されていません。そのため、以下の点に注意する必要があります。
■ 個々の LMS の仕様に依存しない
SCO間のナビゲーションを行う際の仕様は LMSによって異なります。 ある LMSでは、SCOを移動するために、「次へボタン」「前へボタン」を利用するかもしれませんが、別の LMSでは SCOの名称を一覧表示して、学習者に学習すべき SCOを一覧から選択させるかもしれません。 そのため、SCO内部に「次へボタン」を押すことを明示的に記述したり、一覧から選択するよう促したりするメッセージを表示してはいけません。
■ 次に選択される SCO に言及しない
「次へボタン」を押したとき、次にどの SCO が選択されるかは、LMS(の選択ロジック)によって異なる場合があります。SCO内部への「次は“○○のトピック”を学習します」のように、次の SCOが決定されているような記述も控えるべきです。
■ LMS のインタフェースに言及しない
ナビゲーションウィンドウの表示位置や、次へ進むためのボタンの名称は、各 LMS で異なります。SCO内に「画面上部の次へボタンを押してください」などのメッセージを表示すると、他の LMS では「画面左部の次画面ボタンを押してください」が正しい場合があります(図 4-1-7)。
ノート
4-8
-
Chapter4:SCORM コンテンツ作成方法
LMS「A」 LMS「B」
次画面
SCO コンテンツ 表示領域
LMS ナビ ゲーション フレーム
LMSナビゲーションフレーム
次へ
SCO コンテンツ 表示領域
図 4-1-7 さまざまな LMS ナビゲーションフレーム
1-5. SCO 内のナビゲーション
既に学習したように、SCO間のナビゲーションは LMSの役割です。一方、SCO内のナビゲーションについては、LMSは一切関与せず、コンテンツの役割となります。 ここでは、SCO内のナビゲーションをコンテンツの役割とすることのメリット、およびデメリットについて説明します。
■ SCO 内のナビゲーションをコンテンツが行うことのメリット
SCO内部のナビゲーションがコンテンツに任されることのメリットは、コンテンツごとに、単純なナビゲーションも、複雑なナビゲーションも自由に設計することができる点で
す。 例えば、各 SCOを起動した後には必ずプレテストを実施し、その成績によって表示されるページを変えたり、学習者の年齢や性別により内容を変更する、といったことも可能で
す。
■ SCO 内のナビゲーションをコンテンツが行うことのデメリット
デメリットとして挙げられるのは、コンテンツ制作者自身が、SCO内部に必ずナビゲーション機能を作成する必要があることです。
ノート
4-9
-
Chapter4:SCORM コンテンツ作成方法
ナビゲーション機能を開発するには、JavaScript や FLASH(ActionScript)などを利用しますが、プログラミングのスキルが多少なりとも要求され、場合によっては難易度の
高い作業になってしまいます。 SCO内部のナビゲーションの作成を嫌い、1ページを 1SCOのコンテンツとし、ナビゲーションはすべて LMS に任せてしまっているようなコンテンツもありますが、あまり好ましくありません。
また、SCO内部のナビゲーションと LMSのナビゲーションの 2つが同時に学習者に提示されてしまい、学習者の混乱をまねく場合もあります(2 重ナビゲーション問題)(図4-1-8)。これを防ぐために、1SCOのコンテンツのときは、LMSの設定を変更して、ナビゲーションを非表示にするなど、操作性を高めるための工夫をします。
SCO 内部の ナビゲーション
LMSナビゲーションフレーム
SCO コンテンツ 表示領域
LMS ナビゲーション
図 4-1-8 LMS ナビゲーションと SCO 内部ナビゲーションの混在
1-6. SCO と採点処理
e-Learningの演習問題では、一般的に、学習者からの解答入力を受け付け、採点処理を行い、正誤の提示をした後、演習問題の結果を LMS に格納するという流れで処理が行われます(図 4-1-9)。
ノート
4-10
-
Chapter4:SCORM コンテンツ作成方法
採点 正誤の提示 結果を
LMS に格納 解答入力の
受付
図 4-1-9 演習問題の採点処理
これらの処理を、コンテンツと LMS がそれぞれ役割分担して行います。SCORM コンテンツの場合、「解答入力の受付」から「正誤の提示」までをコンテンツ(SCO)が行い、最後の「結果を LMSに格納」のみ、SCOから結果を受信した LMSが行います(図 4-1-9)。 しかし、SCORMに準拠していないコンテンツの場合、「解答入力の受付」をコンテンツが行った後、「採点」は LMSで行い、その後「正誤の提示」はコンテンツで、最後の「結果を LMSに格納」は再び LMSが行うことがあります(図 4-1-10)。
コラム SCORMに準拠していなくても、SCORM コンテンツと同様の処理を行う場合もあります。
SCORMに準拠したコンテンツ
解答入力の 受付
採点 正誤の提示 結果を
LMS に格納
コンテンツ LMS
コンテンツ LMS コンテンツ LMS
SCORMに準拠していないコンテンツ
図 4-1-10 採点処理の役割分担
SCORMコンテンツの場合、SCOに対して、解答入力だけでなく採点処理もコンテンツの一部として作成できるため、非常に複雑な出題方式、採点処理を実現できる反面、コン
テンツ制作者が採点処理も作成しなければならない、というデメリットもあります。
ノート
4-11
-
Chapter4:SCORM コンテンツ作成方法
1-7. SCO の学習ログ表示
e-Learningにおいて、習得状態や得点などの「学習ログ」は大変重要です。学習ログは、学習者が自分自身の学習進行状況を確認したり、研修の管理者が全体の習得状態や学習効
果を把握するために使用されます。 ここでは、学習ログに関するコンテンツと LMSの役割分担について学習しましょう。
■ SCO と LMS の役割分担
学習ログの記録において、コンテンツ(SCO)の役割は、学習ログを LMS に送信するまでです。送信された学習ログは、LMS上のファイルやデータベースなどに格納されます。 学習ログ格納後の、学習者や研修管理者に対する学習ログの表示は、LMSの役割です(図
4-1-11)。
SCO LMS
学習ログ
学習ログ 表示
学習者
研修管理者
図 4-1-11 学習ログ表示処理と SCO/LMS の関係
■ 学習ログの表示形式や項目
なお、LMSによって、学習ログの表示形式や、表示される項目が異なる場合があります。これは、学習ログの表示形式や項目が SCORM規格で定義されていないためです。 例えば、ある LMSでは、SCOの習得状態(lesson_status)を表示しますが、別の LMS
ノート
4-12
-
Chapter4:SCORM コンテンツ作成方法
では表示項目として存在しない場合があります。もちろん、どちらの LMS でも習得状態の情報は SCOから LMSに送られ、格納されています。 また、学習ログを表示する機能を一切もたない LMSもあるかもしれません。 LMS で任意の学習ログが表示されることを前提にコンテンツを制作することは避けましょう。
1-8. SCO の学習ログ設計
SCOの学習ログ設計とは、「どのような情報を、どのデータモデルを使って出力するか」に関する設計です。 学習ログの設計には、学習者、または研修管理者がどのようなログ情報を必要としてい
るかを反映すべきです。必要とされるログ情報は、コンテンツ(研修)の目標や、目標達
成までのプロセス、および管理方法によっても異なるので、コンテンツ設計時に目標など
の分析を十分行うことが求められます。 例えば、研修管理者が、コンテンツの学習完了(合格ではない)のみで、全体の学習進
行状況を把握しようとしている場合は、lesson_status の“complete”だけが正しく出力されていれば問題ありません。 しかし、合否判定、確認テストの得点、学習時間なども含めた総合的な学習進行、およ
び理解状況を把握したい場合には、lesson_status、score.raw、session_time などのログについても SCOが正しく出力する必要があります。 しかし、既に学習したように、表示される学習ログの形式や項目は LMSで異なります。そのため、SCO が学習ログを LMS に送信しても、LMS にそれらの情報を表示する機能がない可能性があります。 つまり、SCOログの設計は、LMSに依存することになってしまいます。 これを回避するためには、多くの LMS で共通に表示されるであろうデータ項目を想定して設計するしかありません。例えば、以下の 4項目は共通データ項目の候補となります。 ・ lesson_status ・ socre.raw ・ session_time
ノート
4-13
-
Chapter4:SCORM コンテンツ作成方法
・ lesson_location
コラム 共通データ項目には、上記以外にも考えられますし、逆に項目を絞ることも考えられます。コンテンツを制
作する担当者(または組織、会社)で SCO の学習ログに関する共通のガイドラインを作っておくとよいでしょう。
コラム suspended_data(本章「4-1. データを蓄積し、利用する(suspend_data)」参照)などに格納するような非定型データ(例えば、過去 5 回の確認テストの得点など)は、LMS の標準の学習ログ表示機能で表示されることは期待できません。このようなログを表示したい場合は、2つの方法があります。 ひとつは、SCO内部に学習ログ表示機能を作る方法です。 もうひとつは、LMSをカスタマイズし、当該コンテンツ専用のログ表示部を開発する方法です。 前者はコンテンツ開発者だけで制作可能ですが、学習者だけがログを見ることができ、研修管理者はログ
を閲覧することができません。 後者は LMS システム開発者との共同開発になり、前者より開発稼動はかかりますが、学習者、研修管理者とも使えるものになります。
1-9. SCO と HTML フレーム
SCO を実装する際、HTML フレームを使用することができます。ただし、以下の 2 つの注意点を守るようにしましょう。
■ フレームの参照先を「top」にしない
SCOは topフレームにロードされることはありません。 ほとんどの LMS は、コンテンツを表示するために、ブラウザの top フレームをナビゲーションフレーム、コンテンツ(SCO)フレーム、SCORM APIフレームの 3つに分割します。コンテンツ開発者が作成した SCO は、このうちのコンテンツ(SCO)フレームにロードされます。
SCO内でフレームを作り、そのフレームの参照に「top」を使用すると、LMSから SCOを配信した場合、動作しなくなります。
ノート
4-14
-
Chapter4:SCORM コンテンツ作成方法
これは、SCO単体の動作チェックではうまく動いている場合でも考えられる現象です。 SCOが topフレームにロードされることを前提に作成することがないようにしましょう(図 4-1-12)。
LMS ナビゲーションフレーム
SCO コンテンツ表示フレーム
フレーム 2
フレーム1
フレーム 0
SCO
API フレーム
TOP フレーム
図 4-1-12 SCO と top フレームの関係
■ フレームの名称に「API」を使わない
SCO内のフレームの名称には「API」を使わないようにします。 「API」は、SCORM API機能を使うためのフレーム名称として予約されているためです。
コラム LMS ナビゲーションフレームにも名前が付与されている場合があります。制作の前に確認した方が無難ですが、一般的な名称が付いていることはないため、あまり気にしなくてもよいでしょう。
1-10. SCO と JavaScript
SCOから新しく別のウィンドウを表示し、学習者に提示するようなコンテンツを制作したい場合などには、JavaScriptを使うことができます。 ノート
4-15
-
Chapter4:SCORM コンテンツ作成方法
しかし、新しく表示されたウィンドウは、LMSGetValue、LMSSetValueなどを使ってLMSと通信することができません。これは、APIフレームを引き継げないためです。 この問題を避けるためには、新しく表示されるウィンドウは、LMSとの通信が不要な「用語解説」や「補足説明」などに限定します(図 4-1-13)。
コラム JavaScriptの openerプロパティを使用することにより、子から親ウィンドウの JavaScriptを操作することができます。つまり、子ウィンドウから LMS との通信が可能となり、問題を回避できます。 しかし、すべての LMSで正常に動作するかは不明であり、使用しない方が無難です。
SCO-1
HTML
window.open()
LMS
図 4-1-13 SCO と window.open()
■ window.close()関数
SCO から新しく表示されたウィンドウを閉じるタイミングだけに使用し、SCO(LMSが起動したもの)そのものに対しては window.close()は使用しないようにしてください。
SCOを window.close()を使って閉じた場合の動作は、SCORM規格では規定されていないので、LMSによって異なります(図 4-1-14)。
ノート
4-16
-
Chapter4:SCORM コンテンツ作成方法
SCO-1
HTML
window.close()
window.close()
LMS
図 4-1-14 SCO と window.close()
ノート
4-17
-
Chapter4:SCORM コンテンツ作成方法
2. マニフェストファイルの作成方法
ここでは、SCORM コンテンツを制作する際には必須となるマニフェストファイルの作成方法を説明します。 なお、マニフェストファイルのファイル名は、必ず「imsmanifest.xml」にしてください。
■ サンプルコンテンツの構成
ここでは、以下のような構成をもつコンテンツに使用するマニフェストファイルを作成
します。 保存形式は、UTF-8または UTF-16とします。 コースのタイトル:「アセッサ基礎知識」
章タイトル 節タイトル 項タイトル ファイル
アセッサ概要 資格取得のメリット Sco1_1.html
制度概要 適合コンテンツとは 認証の要件 Sco2_1_1.html
認証適合レベル Sco2_1_2.html
ノート
4-18
-
Chapter4:SCORM コンテンツ作成方法
■ マニフェストファイル(例)
アセッサ基礎知識
アセッサ概要
資格取得のメリット
制度概要
-
Chapter4:SCORM コンテンツ作成方法
① スキーマの指定
XMLを解釈するためのスキーマの物理位置を指定します。
② メタデータ
ここではメタデータを省略しています。
③ 要素
default属性で、デフォルトとして使用する要素を指定します。
④ 要素
教材構成表に従って要素をネストし、ツリー構造を作ります。 要素の identifier 属性は重複のない識別子、 identifierref 属性はこの下の
識別子への参照となります。
⑤ SCO で使用されるファイルの指定
各 SCOで使用されるファイルの物理位置を要素で指定します。 要素の identifier属性は上記の要素からの参照のための識別子、type属性はタイプ(SCOまたはアセット)、href属性はエントリポイントの参照(つまりこのSCOが起動されたときに表示されるファイル)となります。
ノート
4-20
-
Chapter4:SCORM コンテンツ作成方法
3. SCORM APIの解説
ここでは、実際に SCORMコンテンツを制作する際に必要となる基礎的な知識や、シンプルなコンテンツの制作方法について、ソース例を交えて説明します。 なお、基本的な HTML の作成方法や、JavaScript のプログラミングの基本部分については説明を省略しているので、必要に応じて別途書籍等を参照してください。
3-1. SCO の初期化
まずは、LMSとの間で、通信開始、および終了だけを行うシンプルな SCOを作成してみます。
SCOを作成するために、LMSとの通信は必須です。ここでは、LMSInitialize、およびLMSFinishという命令について、実際にどのように使用するのかを説明します。
ノート
4-21
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
「SCORM サンプル」とだけ書かれたシンプルな HTML を 1SCO とし、作成する場合のソース例です。 ユーザの目には見えませんが、LMSから提供される APIアダプタを使って LMSとの通信を開始します。 また、APIアダプタを取得できない、つまり通信を開始できない場合には、「APIが見つかりません。」というアラートが表示されます。
SCORM サンプル
④
③
②
①
ノート
4-22
-
Chapter4:SCORM コンテンツ作成方法
① FindAPI
SCOが LMSと通信する際に、LMS側から提供されるライブラリが格納されている APIを探し出すための関数です。
SCORM規格では、LMSから提供されている APIフレームは、「API」という名前を付けることが定義されています。 ここで示しているソース例では、「API」という名前が付いたフレームが見つかるまで、親フレームにさかのぼって探すようプログラミングしています。最後まで見つからなかっ
た場合は「null」を返します。
コラム このソース例での記述は、ほぼ定型となっているので、プログラミングが苦手な方はそのまま同じように使
ってください。
② LMSInitialize
「FindAPI」で探したAPIフレーム内にある関数を使ってLMSとの通信を確立します。 SCORM規格では、SCO内で必ず 1回だけ LMSInitializeを行うことが義務づけられています。同じ SCO 内で複数回 LMSInitialize を行うのは規格違反になるので、プログラミングの際には注意してください。 ここで示しているソース例では、先に定義した FindAPIを使って、APIフレームを探し出し、その結果を APIという値に返しています。
APIが「null」でなければライブラリにある LMSInitializeを実行します。 APIが「null」の場合は「APIが見つかりません。」というアラートを表示します。APIフレームが見つからなければ、LMSとの間で通信が確立しないため、学習ログを送信することができません。このような場合には、その後の学習を止めるなどの工夫をしましょう。 この LMSInitializeは他のどの API関数よりも先に実行される必要があります。それは、
SCO の内容が表示されて学習が進んでしまっているにも関わらず、LMS との通信が確立されていない場合、学習ログを LMS に送信することができないからです。そのため、FindAPIを行い、LMSInitializeを行うという一連の流れは、SCOの最初に行われる必要があります。 なお、LMSInitializeでは、空文字列("""")の引数を必ず指定してください。
ノート
4-23
-
Chapter4:SCORM コンテンツ作成方法
③ LMSFinish
LMSとの通信を終了させる関数です。 SCORM規格では、SCO内で必ず LMSInitializeとペアで使用することが義務づけられています。 ここで示しているソース例では、②の LMSInitializeで使用した APIの値が「null」でない場合に LMSFinishを行っています。 やりとりするデータが残っているうちに LMSFinishを実行すると、再度 LMSInitializeを行わなくてはなりません。しかし、既に学習したように、SCORM 規格では、LMSInitializeは 1SCO内で 1度しか行わないと定義されています。そのため、LMSFinishは、LMSとの間で必要なデータのやりとりがすべて終了した後に行うようプログラミングしてください。 なお、LMSFinishでは、空文字列("""")の引数を必ず指定してください。
④ onload、onunload
onload、onunloadとも JavaScriptのイベントハンドラです。 ここで示しているソース例では、SCOの開始時に初期化、終了時に終了処理を実行するようプログラミングされています。
ノート
4-24
-
Chapter4:SCORM コンテンツ作成方法
「null」 API フレームが あるか?
LMSInitialize
「API が見つかりません。」
LMSFinish
FindAPI
図 4-3-1 FindAPI~LMSFinish
ノート
4-25
-
Chapter4:SCORM コンテンツ作成方法
3-2. LMS からのデータ取得
ここでは、LMSInitializeで LMSとの通信が確立された後、LMSからデータを取得し、そのデータを表示する SCOの作成方法について説明します。
■ ソース例と解説
LMSからユーザの名前を取得し、その結果を表示する場合のソース例です。
①
ノート
4-26
-
Chapter4:SCORM コンテンツ作成方法
① LMSGetValue
LMSGetValueは、LMSからデータを取得する場合に使用します。 取得した値を変数に格納し、SCO内で利用することができます。 ここで示しているソース例では、ユーザ名(student_name)を取得していますが、同様にプログラミングすれば、lesson_status、lesson_location、lesson_modeなどのデータを取得することもできます。
3-3. LMS へのデータ書き込み
ここでは、SCOから、LMSにデータを渡して書き込む SCOを作成する方法について説明します。
LMSへ書き込んだデータが SCOから書き込んだものであるかどうかは、LMSからデータを取得し、SCOに表示させることで確認します。
ノート
4-27
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
SCO から LMS へ lesson_status を送信し、その値が正しく送信されたか、画面に表示させる場合のソース例です。
SCORM サンプル
②
①
ノート
4-28
-
Chapter4:SCORM コンテンツ作成方法
① LMSSetValue
LMSSetValueは、LMS側に送信するためのデータを設定します。 括弧内に、LMS側に送信したいデータ名、およびデータを記述します。ここで示しているソース例では lesson_statusを指定していますが、ほかにも、score.raw、lesson_location、session_timeなどのデータを指定することもできます。 なお、LMSSetValue で設定する値は、すべて文字列であることが SCORM 規格で定められています。
② LMSCommit
LMSSetValueで設定した値を LMSに送信するための関数です。 LMSFinishの際にも値を LMSに送信しますが、その前に送信したい場合に使用します。また、LMSFinishが実行されないなど、異常終了した場合にも、LMSCommitを使えば、学習ログを確実に LMSに送信することができます。 なお、LMSCommitでは、空文字列("""")の引数を必ず指定してください。
ノート
4-29
-
Chapter4:SCORM コンテンツ作成方法
4. 実装例と解説
ここでは、より高度な SCOの作成方法について、ソース例を交えて説明します。
4-1. データを蓄積し、利用する(suspend_data)
suspend_data は、SCO により生成された任意の情報を書き込み、それを蓄積し、再度SCOから読み出すためのデータモデルです。
score.raw のように特定の目的(得点情報の管理)のために用意されたものではなく、汎用のデータの格納に利用することができます。また、一度 SCO を終了し、再起動した後でも SCOから読み出すことができます。 このデータモデルは、4,096 バイトのプレーンな文字列データを格納することができます。
suspend_dataは、以下のような、SCORMデータ項目として規定されていない SCO固有のデータを管理する場合に利用すると便利です。 ・ 過去数回分のテストの得点を記録し、学習者に提示する(cmi.core.score では、1回のテストの得点しか格納できない)
・ SCO 内の各ページを閲覧したか否かのフラグとして利用する(すべてのページを閲覧した場合に、lesson_statusを“completed”に変更する)
・ 学習者のバックグラウンドとなる情報 suspend_data内のデータ格納フォーマットは、各 SCOで設計しておきます。
コラム suspend_dataに格納できる文字列の最長は4,096バイトです。過去のすべての得点ログなどを管理しようとすると、最大長を超えてしまう場合があります。 また、あまり長いデータをSCOとLMS間で頻繁にやりとりすると、レスポンスが遅くなるので注意が必要です。
ノート
4-30
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
起動ごとに suspend_data をインクリメントして表示する、いわゆるカウンタを作成する場合のソース例です。
-
Chapter4:SCORM コンテンツ作成方法
function MyFin(){
if(API!=null){
//----LMSFinish("")を呼び出す------------------------
API.LMSFinish("");
}
}
//-->
① 初回起動時の表示
初回起動時には suspend_dataに 0をセットします。
② カウントアップ
suspend_dataを LMSから取得し、インクリメントしてから、あらためてセットし、画面に表示します。
SCORM 規格により、LMSSetValue で設定する値は文字列でなくてはなりません。そのため、ここで示しているソース例では、LMSから取得した値を文字列から数値にしてからインクリメントしています。さらに、その後再び文字列にしてから LMSCommitで LMSへ送信しています。
ノート
4-32
-
Chapter4:SCORM コンテンツ作成方法
初回
LMSCommit
インクリメント
LMSSetValue("cmi.suspend_data", String(suspendData))
初回起動時 かどうか?
LMSGetValue("cmi.suspend_data")
Number(suspendData)
カウンタを取得
2 回目以降
カウンタ初期化(「0」を代入)
開始
カウンタを更新
カウンタ表示
図 4-4-1 カウンタの表示
ノート
4-33
-
Chapter4:SCORM コンテンツ作成方法
4-2. SCO の動きをコースに合わせて変更する(launch_data)
launch_dataは、SCO起動時に、マニフェストファイル(imsmanifest.xml)に定義されている静的データを SCOに引き渡すときに使われます。 引き渡されるマニフェストファイルの項目は、 要素にネストされた
要素の値です。launch_dataの値は read-onlyであり、SCO実行中に変更することはできません。
launch_dataは、以下のように、SCOの動きをコース(教材)に合わせて変えたい場合に利用します。 ・ SCOの最初のページにコース(教材)内で通しの章番号を表示する(SCO単体では、それがコース(教材)内で第何章に組み込まれるのかわからないので、あらか
じめ記述しておくことはできない) ・ 初級者と上級者向けコースで、SCO内で提示する内容を変える
launch_data内のデータフォーマットは、「4,096バイトからなるプレーンな文字列」ということ以外は規定されていないため、利用する前には内部フォーマットを決めておきま
す(name=valueリストなどがよく使われます)。
■ launch_data と suspend_data
launch_dataと suspend_dataの違いは 2つあります。 ひとつは、launch_dataは read-only、suspend_dataは read-writeである点です。 もうひとつは、launch_dataの値は SCOの外側であらかじめ定義しておくことができる点です。 したがって、suspend_dataは受講者の学習ログなど動的データを管理するのに使われ、
launch_data は SCO のコース全体での追加情報など静的データを管理する目的で使われます。
ノート
4-34
-
Chapter4:SCORM コンテンツ作成方法
launch_dataと suspend_dataの違い
launch_data suspend_data
データ属性 read-only read-write
特徴・ 使用目的
SCO の外側であらかじめ定義しておくことができる コース全体での追加情報など静的デ
ータを管理する場合に使用する
受講者の学習ログなど動的データを
管理する場合に使用する
ノート
4-35
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
マニフェストファイルに SCOの章番号を設定しておき、起動時にその章番号を取得して表示する場合のソース例です。
①
ノート
4-36
-
Chapter4:SCORM コンテンツ作成方法
① マニフェストファイルでの定義
ここで示しているサンプルでは、表示する SCOの章番号をあらかじめマニフェストファイル(imsmanifest.xml)に設定しておきます。また、表示する SCO の要素に要素をネストします。 以下に、マニフェストファイル内の記述例を示します。 こ
する
こ
ノー
第1章のタイトル
第1章1節のタイトル
Chapter1
のように記述しておくと、SCOの起動時に LMSGetValueを使用して、その値を取得ことができます。 こで示しているソース例では、SCOが起動されると「Chapter1」と表示されます。
LMSGetValue("cmi.launch_data");によってリクエスト
【データ】
マニフェストファイル
サーバ SCO
データ表示 図 4-4-2 マニフェストファイル内の記述を取得して表示する
ト
4-37
-
Chapter4:SCORM コンテンツ作成方法
4-3. エラー発生時の処理方法を設計する(LMSGetLastError、 LMSGetErrorString、LMSGetDiagnostic)
エラー発生時に、何らかの処理を行うための関数には、以下の 3つがあります。 ・ LMSGetLastError() 直前に実行した API のエラーコードを返す
・ LMSGetErrorString(ErrorCode) エラーコードを引数に、エラーメッセージを返す
・ LMSGetDiagnostic(ErrorCode); エラーコードを引数に、LMS 固有のエラーメッセージを返す
LMSGetLastError を利用してエラーの発生について確認し、エラーが発生しているようであれば、LMSGetErrorStringや LMSGetDiagnosticを利用して、さらに詳細な情報を調べます(図 4-4-3)。
ノート
4-38
-
Chapter4:SCORM コンテンツ作成方法
有り
無し 終了
LMSGetErrorString
LMSGetDiagnostic
LMSGetLastError
エラーが発生した
かどうか?
エラーコード、エラーメッセージ表示
図 4-4-3 エラー発生時の処理
発生する可能性のあるエラーの内容は、以下のとおりです。 ・ 初期化されていない(LMSInitializeが行われていない) ・ 当該データモデルが実装されていない ・ read-only(write-only)属性のデータモデルに書き込もう(読み込もう)とした ・ 引数が誤っている、または引数のデータタイプが誤っている
ノート
4-39
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
オプションのデータモデル student_data.mastery_scoreを実装していない LMSで、そのデータモデルを使用してエラー処理を行う場合のソース例です。
-
Chapter4:SCORM コンテンツ作成方法
//------------ エラーでなければmastery_score を表示させます----------
document.write("masteryScore:"+ masteryScore +"
");}
}else{
alert("API が見つかりません。");
}
}
function MyFin(){
if(API!=null){
//----LMSFinish("")を呼び出す------------------------
API.LMSFinish("");
}
}
//-->
① mastery_score の表示
LMSGetValue を使用して、mastery_score を LMS から取得して表示します。しかし、LMSがこのデータモデルをサポートしていない場合、非実装エラーが発生します。
② エラー発生有無の確認
mastery_score を取得したあとに、エラーが発生したかどうかを LMSGetLastError で調べます。
0 以外が返ってきた場合はエラーが発生しています。ここでは非実装エラーが発生するので、エラーコード「401」が返ってきます。
③ エラーメッセージの確認
エラーコードを確認した後、LMSGetErrorStringを使用して、このエラーコードに対応するエラーメッセージを調べます。
④ エラー情報の取得
エラーコードに対応する LMS固有のエラー情報を取得するために、LMSGetDiagnosticを使用して調べます。
ノート
4-41
-
Chapter4:SCORM コンテンツ作成方法
■ エラーコード
エラー コード 説明 例
0 No error(正常)
100 General Exception (一般的なエラー)
200 シンタクスエラー
201 Invalid argument error (不適切な引数エラー) LMSGetValue(“cmi.core.student_email”);
202 Elements cannot have children(エレメントは子を持たない) LMSGetValue(“cmi.lesson_status._children”);
203 Element not an array.Cannot have count (エレメントは配列でない)
LMSGetValue(“cmi.core._count”);
300 LMSエラー
301 Not initialized (初期化されていない)
LMSInitialize(“”) の前に LMSGetValue(“cmi.core.student_id”);を実行
400 データモデルエラー
401 Not implemented error (インプリメントされていな
い) LMSGetValue(“elc.cmd.next”);
402
Invalid set value, element is a keyword (不適切な集合値、エレメント
がキーワード)
LMSSetValue(“cmi.core._children”,“student_id, student_name”);
403 Element is read only (read-only エレメントに書き込もうとした)
LMSSetValue(“cmi.core.total_time , “01:00:00.00”);
404 Element is write only (write-only エレメントを読もうとした)
LMSGetValue(“cmi.core.session_time”);
405 Incorrect Data Type (正しくないデータタイプを設
定しようとした) LMSSetValue(“cmi.core.score.raw”, “85点”);
ノート
4-42
-
Chapter4:SCORM コンテンツ作成方法
まとめ
SCORM適合コンテンツの制作時には、SCORM規格を遵守すると同時に、SCORM規格のコンセプトに合わせて「正しいコンテンツを制作すること」が重要なポイントとなり
ます。 SCO は、コンテンツの再利用性を向上させるという SCORM 規格の性格上、独立性を保持する必要があります。そのため、SCO間のリンクやデータ参照については注意が必要です。 また、SCOのサイズを決定する際には、教育的に意味のあるひとかたまりを 1SCOとします。ページごとに機械的に区切ったり、多くのトピックを含んでいるのに全体で 1SCOなどとするのは望ましくありません。
SCO間の遷移(ナビゲーション)は、LMSの役割です。一方、SCO内のナビゲーションはコンテンツ自身が行います。そのため、SCO内のナビゲーションは、自由に設計できる半面、プログラミングの知識が求められるというデメリットも挙げられます。 コンテンツと LMSの役割分担などから、SCOの中では、以下の事項が禁じられています。 ・ 他の SCOへのリンクを設定しない ・ 次の遷移先(SCO)について言及しない ・ LMSのインタフェースや機能に言及しない
また、一般的な教材には演習問題が含まれていますが、採点処理についてもコンテンツ
と LMSとで役割分担があります。SCORMコンテンツでは、解答入力の受付、採点処理、および正誤の表示をコンテンツで行った後、LMSへ結果を送信します。LMSではその結果を格納するのみです。したがって、採点処理のプログラミングがコンテンツ側で必要で
す。なお、SCORM に準拠していないコンテンツの場合、採点部分を LMS が担当する場合があります。 教材で最も重要と言える要素、学習ログは LMS が保持します。ただし、SCORM 規格では、学習ログの表示形式や項目は定義されていないため、LMSによって表示できる項目や形式が異なる場合があります。
SCOの中では、フレームを使うことができます。ただし、参照先やフレーム名によっては正しく動作しないことがあるので、注意が必要です。
ノート
4-43
-
Chapter4:SCORM コンテンツ作成方法
また、新しいウィンドウを表示する場合に JavaScript を使うこともできます。ただし、新しく表示されたウィンドウは、LMSとの通信ができないので、用途を限定しましょう。
以上のSCORMコンテンツ設計・制作のポイントをまとめると、以下のようになります。
SCOと SCOの間にリンクがあってはいけない 独立性
SCOは他の SCOのデータモデルを参照できない
サイズ 教育的に意味のあるひとかたまりをひとつの SCOとする
SCOのナビゲーションは LMSの役割 ナビゲーション
SCO内のナビゲーションはコンテンツの役割
学習ログを学習者/研修管理者に表示するのは LMSの役割
表示される学習ログの項目/形式は各 LMS で異なる(SCORM 規格の
範囲外) 学習ログ
SCOの学習ログ設計は、学習者/研修管理者が必要とするログ情報の分
析結果を反映
SCOは topフレームにロードされることを前提に作らない フレームの使用
SCO内のフレームの名称に“API”は使わない
JavaScript の使用 window.open()、window.close()の使用には注意が必要
ノート
4-44
-
Chapter4:SCORM コンテンツ作成方法
■ この章で学習した SCORM API
SCORM API 説明
LMSInitialize APIフレーム内の関数を使って SCOと LMSとの通信を確立する
LMSFinish SCOと LMSとの通信を終了する
LMSGetValue データモデルのデータを取得する
LMSSetValue SCOから LMSに送信するためのデータを設定する
LMSCommit LMSSetValueで設定した値を LMSに送信する
LMSGetLastError 直前に実行した APIのエラーコードを返す
LMSGetErrorString エラーコードを引数に、エラーメッセージを返す
LMSGetDiagnostic エラーコードを引数に、LMS固有のエラーメッセージを返す
■ この章で学習したデータモデル
データモデル 説明
suspend_data SCOで生成された任意の情報を書き込み、蓄積し、再度 SCOから読み出す
launch_data SCO の起動時にマニフェストファイルに定義されている静的データを SCOに引き渡す
ノート
4-45
-
Chapter4:SCORM コンテンツ作成方法
自己チェック
1. SCOの独立性について正しく説明されているのは? □ SCO-1 と SCO-2 にリンクを設定する場合、相互にリンクしていれば問題ない □ SCO-1 での得点を SCO-2 から参照して平均点を算出するという処理は規格上誤り □ SCO の内部ではリンクを設定してはいけない
2. SCOのサイズについて正しく説明されているのは? □ 写真なら写真だけ、操作説明なら操作説明だけ、など、同じ種類の要素を集めてひとつの
SCO にまとめた方がよい □ SCO 内でプログラミングを行うことで LMS のナビゲーションを補助した方が望ましいので、
原則として 1 教材=1SCO として作成する □ ページ区切りだけを SCO の区切りとして考えるのは誤っている場合がある
3. SCO内の記述として使用してよいのは? □ 「これで学習は終了です。画面の上部に表示される NEXT ボタンをクリックし、次に進んでく
ださい」 □ 「次は、△△(教材の目次構成上、現在の SCO の次に位置するトピック)を学習します。次に
進んでください」 □ 「これで学習は終了です。次に進んでください」
4. SCORM APIについて誤った説明となっているのは? □ 学習ログを取得するには、LMSSetValue を使用する □ LMSFinish が実行されない場合でも LMSCommit を使用すれば学習ログを確実にとること
ができる □ ひとつの SCO の中で、LMSInitialize および LMSFinish は一度だけ使用することができる
5. SCORM APIについて正しく説明されているのは? □ LMSGetLastError は、エラーの発生の有無を調べるための関数なので、詳細な情報を表示
することはできない □ launch_data と suspend_data には厳密な違いはないので、任意の関数を使用すればよい □ suspend_data で格納できるデータの容量には制限があるので得点ログなど、過去にさかの
ぼるようなデータの表示には向かない
ノート
4-46
-
Chapter4:SCORM コンテンツ作成方法
演習)SCORMコンテンツ作成体験
この章で学習した関数を用いて、演習問題を含む SCOを作成してみましょう。
■ 作成する教材の仕様
・ 問題数は 3問 ・ 解答形式は 3択(プルダウンメニュー形式) ・ 合格点は 60点(配点は、問 1、2が各 30点、問 3が 40点) ・ 「採点ボタン」をクリックすると、合否、および得点が表示される ・ 再展示に lesson_status、score.rawを LMSに送る ・ 問題、および選択肢は以下のものを使用する
問題 選択肢 1 選択肢 2 選択肢 3 正解
問 1 オーストラリアの首都はどこですか?
キャンベ
ラ シドニー ローザン
ヌ キャンベ
ラ
問 2 ドイツの首都ベルリンとタイ
の首都バンコクではどちらが
人口が多いですか? ベルリン バンコク ほぼ同じ バンコク
問 3 フィリピンの首都マニラはどの島にありますか? セブ島
ミンダナ
オ島 ルソン島 ルソン島
次のページには、上記の仕様で作成したソース例、および解説を掲載しています。
ノート
4-47
-
Chapter4:SCORM コンテンツ作成方法
■ ソース例と解説
-
Chapter4:SCORM コンテンツ作成方法
function MyEvaluate (){
var myScore = 0;
var student_response;
var myStatus;
var msg;
for(var i=0; i< document.forms[0].elements.length; i++){
student_response = document.forms[0].elements[i].selectedIndex + 1;
if(student_response == correct_response[i]){
myScore = myScore + weight[i];
}
}
//----合格点以上なら合格passed、未満なら不合格failedをmySstatusに代入する-----
if(myScore >= masteryScore){
myStatus = "passed";
msg = "合格です。";
}else{
myStatus = "failed";
msg = "不合格です。";
}
if(API != null){
//----LMSにlesson_status、score.rawを送信する-----
API.LMSSetValue("cmi.core.lesson_status", myStatus);
API.LMSSetValue("cmi.score.raw", String(myScore) );
API.LMSCommit("");
}
alert(msg+"\n得点:"+myScore);
}
//-->
⑤
③
⑦
⑥
④
ノート
4-49
-
Chapter4:SCORM コンテンツ作成方法
設問1.オーストラリアの首都はどこですか?
キャンベラ
シドニー
ローザンヌ
設問2.ドイツの首都ベルリンとタイの首都バンコクではどちらが人口が多いですか?
ベルリン
バンコク
ほぼ同じ
設問3.フィリピンの首都マニラはどの島にありますか?
セブ島
ミンダナオ島
ルソン島
⑩
⑨
⑧
① 演習問題の開始
テストを開始するために、以下の変数を設定します。 変数 内容
correct_response 設問ごとの解答を格納するための配列※1
weight 設問ごとの配点を格納するための配列※1
masteryScore 合格点※2 ※1 配列のインデックスは 0から始まるので、設問 1は配列[0]、設問2は配列[1]…とな
ります。 ※2 合格点に cmi.student_data.mastery_score を使用することも考えられますが、この
データモデルは LMSのサポートが必須ではありませんので、注意してください。
ノート
4-50
-
Chapter4:SCORM コンテンツ作成方法
② LMS との通信開始および終了処理
LMSと SCOの間で通信を開始し、必要なデータのやりとりが終わった後、終了処理を行います。
③ 採点処理の開始
採点処理を行うための関数MyEvaluateを定義します。 採点処理を行うために、以下の変数を設定します。
変数 内容
myScore 得点(初期値は 0点)
student_response 学習者の回答
myStatus 習得状態(ステータス)
msg フィードバック(合否)用のメッセージ
④ 設問ごとの採点処理
まず、設問ごとに選択された選択肢(プルダウンメニュー)の番号を取得し
student_responseに格納します。 例えば、設問 1 に対する回答として、学習者が選択肢 1 を選んでいれば、
student_response[0] = 0となります。 次に、その回答と設問の解答が一致していれば、その設問の配点を現在取得している得
点に加算します。
⑤ 合否判定
最終的に取得した得点myScoreと合格点masteryScoreを比較します。 得点が合格点以上であれば、習得状態 myStatusに「passed」(合格)、フィードバック用メッセージmsgに「合格です。」を設定します。 得点が合格点に満たなければ、それぞれ「failed」不合格、「不合格です。」を設定します。
⑥ LMS への送信
LMSに習得状態myStatusと得点myScoreを送信します。
ノート
4-51
-
Chapter4:SCORM コンテンツ作成方法
LMS に送信するデータは必ず文字列でなくてはなりませんので、値が数値であるmyScoreは String(myScore)として文字列に変換しています。
⑦ 学習者へのフィードバック表示
学習者に対するフィードバック、および得点をダイアログで表示します。採点処理はこ
こまでです。
⑧ SCO の初期化と終了処理
起動時、終了時にそれぞれ②で定義したMyInit()、MyFinish()を実行し、SCOの初期化と終了処理を行います。
⑨ 設問の作成
HTMLの Formを使用し、設問を作成します。設問ごとの選択肢をプルダウンメニューで構成します。
⑩ 採点ボタンの作成
採点ボタンを設置し、クリックしたときに③~⑦で定義したMyEvaluate()を実行し、採点処理を行います。
ノート
4-52
自己チェック