SCORM1.2概要

SCORM1.2 データモデル要素一覧

SCORM1.2 ランタイム環境のデータモデル要素は、49個あります。LMSGetValue()、LMSSetValue()の引数として利用します。

SCORM1.2は、LMSに対して3つの適合性カテゴリ(LMS-RTE1, LMS-RTE2, LMS-RTE3)というものがあります。これは、データモデル要素がどのくらいLMSに実装されているか分類したものです。

  • LMS-RTE1 : LMSは、必須条件のデータモデル要素をすべて実装している
  • LMS-RTE2 : LMSは、必須条件および、1つ以上、オプションのデータモデル要素を実装している
  • LMS-RTE3 : LMSは、必須条件および、オプションのデータモデル要素をすべての実装している

必須およびオプションのデータモデル要素を1つでも実装すれば、LMSは、LMS-RTE2となります。

No
実装条件
データモデル要素
1
必須
cmi.core._children
LMSがサポートするcmi.core要素のリストを取得する
必須
cmi.core.student_id
学習者のIDを取得する
必須
cmi.core.student_name
学習者の氏名を取得する
必須
cmi.core.lesson_location
SCOを終了時、現在の位置から、再度、学習開始できるように、現在のSCOの位置を登録
学習再開時、終了時のSCOの位置から学習を始められるように、SCO終了時の位置を取得する
必須
cmi.core.credit
履修記録が上書き可能(credit)か不可能(no-credit)か、状態を取得する
必須
cmi.core.lesson_status
学習状況のステータスの登録 / 取得する
必須
cmi.core.entry
現在のSCOが、初回受講か中断から再開したものか、すでに完了しているか、状態を取得する
必須
cmi.core.score._children
LMSがサポートするcmi.core.score要素のリストを取得する
必須
cmi.core.score.raw
学習者の得点を登録 / 取得する
10
必須
cmi.core.total_time
個別のSCOで費やした学習時間の総計を取得する
11
必須
cmi.core.exit
SCOを終了するときの理由を登録 (タイムアウト、一時中断、ログアウト、正常終了)
12
必須
cmi.core.session_time
1つのSCOに費やした学習時間を登録
13
必須
cmi.suspend_data
SCOごとに学習再開時必要となる情報を登録
学習再開時、登録した情報を取得する
14
必須
cmi.launch_data
SCOの起動時にマニフェストファイル内の<adlcp:datafromlms>要素を取得する


No
実装条件
データモデル要素
15
オプション
cmi.core.score.max
最高得点の設定を登録 / 取得する
16
オプション
cmi.core.score.min
最低得点の設定を登録 / 取得する
17
オプション
cmi.core.lesson_mode
SCOの動作モードの取得する
18
オプション
cmi.comments
学習者が記述したコメント(文字列)を登録 / 取得する
19
オプション
cmi.comments_from_lms
LMSからのコメントや注釈を取得する ( ”” 空文字が多い)
20
オプション
cmi.objectives._children
LMSがサポートするcmi.objectives要素のリストを取得する
21
オプション
cmi.objectives._count
LMSが保持している現在の学習目標の数を取得する
22
オプション
cmi.objectives.n.id
n番目のSCOの学習目標の識別子を設定 / 取得する
23
オプション
cmi.objectives.n.score._children
n番目のSCOが使用しているcmi.objectives.n.score要素のリストを取得する
24
オプション
cmi.objectives.n.score.raw
n番目のSCOの学習目標に対する学習者の素点を設定 / 取得する
25
オプション
cmi.objectives.n.score.max
n番目のSCOの学習目標の最高得点を設定 / 取得する
26
オプション
cmi.objectives.n.score.min
n番目のSCOの学習目標の最低得点を設定 / 取得する
27
オプション
cmi.objectives.n.status
n番目のSCOの学習目標の試行後の状態(合格、完了、不合格、未完了、未実施、閲覧済み)を登録 / 取得する
28
オプション
cmi.student_data._children
LMSがサポートするcmi.student_data要素のリストを取得する
29
オプション
cmi.student_data.mastery_score
lesson_statusの状態を完了 / 習得に変更するために必要な合格得点<adlcp:masteryScore>を取得する
30
オプション
cmi.student_data.max_time_allowed
SCOに設定された制限時間を取得する
31
オプション
cmi.student_data.time_limit_action
制限時間を越えた場合、SCOを終了 / 継続させるか、メッセージを表示するか動作<adlcp:timelimitaction>を取得する 
32
オプション
cmi.student_preference._children
LMSがサポートするcmi.student_preference要素のリストを取得する
33
オプション
cmi.student_preference.audio
音量を制御するために音量値の設定 / 取得する
34
オプション
cmi.student_preference.language
SCOが多言語で作成された場合、言語の設定 / 取得する
35
オプション
cmi.student_preference.speed
コンテンツの表示速度の値を設定 / 取得する
36
オプション
cmi.student_preference.text
ナレーション(音声)とキャプションテキストの表示モードを設定 / 登録
(テキストなし、音声あり / テキストあり、音声あり / テキストあり、音声なし)
37
オプション
cmi.interactions._children
LMSがサポートするcmi.interactions要素のリストを取得する
38
オプション
cmi.interactions._count
LMSが保持している現在の設問の数を取得する
39
オプション
cmi.interactions.n.id
n番目の設問に識別子(ID)を設定
40
オプション
cmi.interactions.n.objectives._count
n番目の学習目標に存在する設問の数を取得する
41
オプション
cmi.interactions.n.objectives.m.id
n番目の学習目標内のm番目の設問に識別子を設定
42
オプション
cmi.interactions.n.time
n番目の設問を解答した時刻を設定
43
オプション
cmi.interactions.n.type
n番目の設問の形式を設定 true-false(真偽)、choice(多肢選択)、fill-in(穴埋め)
long-fill-in(長文入力)、matching(一致)、performance(行動手順)
sequencing(順序)、likert(調査【そう思う・やや思う、思わない】)、numeric(数値)、other(その他)
44
オプション
cmi.interactions.n.correct_responses._count
n番目の設問の正答数を取得する
45
オプション
cmi.interactions.n.correct_responses.m.pattern
n番目の設問に正答を設定
46
オプション
cmi.interactions.n.weighting
n番目の設問に配点(重み付け)を設定
47
オプション
cmi.interactions.n.student_response
n番目の設問に対する学習者の解答を登録
48
オプション
cmi.interactions.n.result
n番目の設問の正誤結果 correct(正しい)、wrong(誤り)、unanticipated(予期しない)、neutral(どっちつかず)、x.x(CMIDecimal)
49
オプション
cmi.interactions.n.latency
n番目の設問の解答開始から終了までに要した時間を登録

SCORM1.2に対応しているLMSは、LMS-RTE3またはLMS-RTE2が多いと思います。No19のcmi.comments_from_lmsは、目的がはっきりしないため、LMSは意味のない空文字を返すことで、「とりあえず要素を実装」してLMS-RTE3の条件を満たしているように見えます。そのため、実装してないLMSは、ほかの要素を実装していてもテスト要件上、LMS-RTE2となります。

SCORM1.2概要

SCORM1.2 SCOからAPIアダプタへの接続の概要

SCOはAPIアダプタのパスが分らない

APIアダプタは、SCOとサーバー側のLMSを結びつける、ブラウザ内で動作するLMSの一部です。APIアダプタは、JavaアプレットやJavaScript(AJAX)などで実装され、SCOからの要求を受け取り、サーバー側にデータを送信、サーバー側のデータをSCOに戻す役割を担っています。

APIアダプタには、LMSInitialize()などデータモデル要素を実行するメソッドが格納されています。SCOはJavaScriptを利用して、そのメソッドを実行します。

しかし、困ったことに、APIアダプタの位置は、必ず2つ上に存在するなどLMS共通として決まっていません。LMSによって配置場所が異なり、SCOからLMSInitialize()などを実行するパスが異なります。そのため、SCOは、パスが分からないためメソッドを実行することができません。

APIアダプタのパスを調べる

そこでAPIアダプタは、SCOにパスを取得しやすくするために、目印を作りました。これがAPIオブジェクトです。「API」とうい名称のオブジェクトで、APIアダプタと同じウインドウ階層にあります。つまりこのオブジェクトのパスが分れば、APIアダプタのメソッドが実行できるということです。

仕様書では、APIオブジェクトは、DOMオブジェクトであると記載されていますが、Windowオブジェクトと言った方が分かりやすいでしょう。Windowオブジェクトは、frameタグのname属性、JavaScriptのグローバル変数です。

LMSは、フレームで分割されていたり、複数ウインドウで構成されることがあります。APIオブジェクトは、ブラウザウインドウ内なら、どのウインドウでも良いという訳ではなく、必ずSCOからルートウインドウへ向かう親ウインドウに配置しなければなりません。SCOは、APIオブジェクトを見つけるために、親ウインドウ内に、APIオブジェクトが存在するか確認します。存在しなければ、さらに親のウインドウにないか、繰り上がり探していきます。

そして、SCOは、APIオブジェクトを探し出すと、パスを取得しデータモデル要素のメソッドを実行できるようになります。

こうした処理は、JavaScriptで自身でコーディングしていくか、ADLなどで配布されているライブラリを利用していきます。ライブラリを利用する場合、自動的に処理してくれるため、中でどう動いているのかは、概略を知っている程度で十分だと思います。

ILIAS

ILIAS4.2.1 SCORM1.2、2004 HelloWorldコンテンツの起動

前回の続きで、UbuntuにILIASをインストールしましたが、実際にSCORMコンテンツが動くか確認してみましょう。

SCORM HelloWorldコンテンツ

動作内容は2点。

  • 「HelloWorld」の文字列を表示する。
  • SCOが起動したとき得られる、Initializeの戻り値を表示する。

HelloWorldを表示しただけでは、ぱっとみアセットと区別が付かない(面白くない)ため、Initializeの戻り値を取得します、これにより、ランタイム環境に接続できたかどうかが確認できます。

サンプルコンテンツ ダウンロード
SCORM12_HelloWorld.zip
SCORM2004_HelloWorld.zip


SCORMコンテンツを登録する

コンテンツは、「リポジトリ」で管理されます。

リポジトリ画面では、登録されているコンテンツが一覧されますが、まだ何も登録されていないため、空の状態です。「新規アイテムを追加」からコンテンツの登録を行います。

プルダウンが開くと、さまざまな形式のコンテンツを登録することができます、ここでは、「ラーニングモジュール SCORM/AICC」を選択します。

「SCORM/AICCパッケージをインポート」の設定項目の「タイプ」から4種類のコンテンツを登録できますが、ここで利用するのは、SCORM1.2とSCORM2004です。まず、SCORM1.2を選択して「参照」により、ZIP形式で1つにまとめたコンテンツの「インポート」を行います。

なぜかSCORM1.2(Java-RTE)とRTEがJavaアプレットで動作すると書いてありますが、RTEは、JavaScriptで動作します。

コンテンツが認識されると、下図のようになります、とりあえず確認だけですので、そのまま「表示」をクリックすると、コンテンツが起動します。

別ウインドウが起動し、「Hello World」の文字列、そして重要なのがInitializeの値です。trueが表示されれば、SCOとして正しく起動しています。falseや空白の場合は、失敗しています。(例えば、LMSに載せず、ファイルをブラウザにそのまま表示させるとfalseとなります。)

同じような要領で、SCORM2004も試してみましょう。「タイプ」のプルダウンで「SCORM 2004 3rd Edition(JavaScriptRTE)」を選択します。
なぜか3rd Editionと表記されてますが、ILIAS 4.2では4th Edition対応と謳っています。ILIAS 4.2 Features

このようにILIASは、SCORM1.2、2004のコンテンツが動作することが分かりました。

(参考) Moodle2.3 SCORM1.2 SCORM2004 HelloWorldコンテンツの起動
MoodleとILIASでどう違うかみてみてください。
ILIAS

UbuntuにLMSのILIAS4.2.1をインストール

ドイツのオープンソースLMS、ILIAS(イリアス)を使ってみましょう。

ILIAS(イリアス)とは

ILIASは、1998年(11/2)にドイツのケルン大学で開発された学習管理システムです。もともと経営学部など学部内の利用を想定として開発されましたが他大学からの関心が高まり、2000年にGPLとして公開されました。2002年から2004年にかけては、スクラッチから再開発され、ILIAS3としてリリースされました。

その後、2004年にSCORM 1.2、2007年にSCORM 2004(3rd Edition)に対応し、ADLから認定を受けました。ILIAS4.2では、現行最新バージョンのSCORM2004(4th Edition)にも対応しました。(※4thは、ADLの認定は受けてないと思います)

ILIASは、アカウント管理、ロール、コースウェアの配信のようなLMSの基本機能だけでなく、教材作成ツールも付いており、ブログ、wiki、フォーラム、チャットなどCMS、コミュニケーションツールとしても利用することができます。日本では、まだ無名に近く情報もほどんとありませんが、日本語にも対応しているため、比較的、利用しやすいソフトウェアだと思います。LMSの選定で、ほかのオープンソースLMSがどうも肌に合わないときは、候補として検討してみてもいいかもしれません。

ILIAS公式サイト
http://www.ilias.de/
ILIAS wikipedia
http://en.wikipedia.org/wiki/ILIAS


インストール

ILIASは、PHPで作られたソフトウェアです、インストールする主なソフトウェアは、apache、PHP、MySQL、Javaです。今回、使用するOSは、Ubuntu11.10のデスクトップ版を利用します。とりあえず、最低限の構成で必要なものは後からインストールしたいと思います。

インストールするもの

apache2
php5
php5-gd
php5-mysql
php5-xsl
php-pear
htmldoc
imagemagick
openjdk-7-jre
phpMyadmin
mysql-server-5.1

Ubuntuのパッケージリストを取得・更新、インストール済みのパッケージをアップグレード

sudo apt-get update
sudo apt-get upgrade

Apache、MySQLのインストール

sudo apt-get install apache2 php5 php5-gd php5-mysql php5-xsl php-pear htmldoc

この状態ではPHPは、まだ動作しないため、有効にするためにapacheを再起動する。

sudo /etc/init.d/apache2 restart

/var/www/ のオーナー、グループを(apacheの実行ユーザー)www-dataに変更する。

sudo chown -R www-data:www-data /var/www/

グループが、ファイルの読み書きができるよう権限を与える。それ以外はアクセスを与えない。

sudo chmod 770 /var/www/

グループwww-dataにログインユーザを入れる。ファイルを作成した場合、ファイルグループがwww-dataになるようにします。変更したら、有効にするため一度ログアウトして、ログインしてください。

sudo usermod -g www-data ログインユーザID

imagemagick、Java、MySQL、phpMyAdminのインストール
MySQLのルートユーザに対してのパスワードを設定するダイアログがでてくるので、パスワードを設定してください。phpMyAdminは、自動再設定で、apache2を選択して、コンフィグの設定でMySQLで設定したパスワードを入力します。

sudo apt-get install imagemagick openjdk-7-jre mysql-server-5.1 phpmyadmin

SCORM1.2のコンテンツアップロードのさい、サーバー内でJavaが動作しているようで、JREが必要となります。
phpMyAdminのサイトアドレスは、http://localhost/phpmyadmin/ となります。


ILIASのダウンロード

公式サイトからダウンロードします。

解凍を行い、/var/www/の中に移動します。

権限を設定。オーナーとグループをwww-dataに設定し、グループに対して、読み書きの権限を与えます。それ以外はアクセスを与えない。

sudo chown -R www-data:www-data /var/www/ilias
sudo chmod -R 770 /var/www/ilias

ILIASが利用するデータフォルダの作成と権限の設定。

sudo mkdir /opt/iliasdata
sudo chown www-data:www-data /opt/iliasdata
sudo chmod 770 /opt/iliasdata


セットアップ 準備

ブラウザからILIASに接続します。準備の項目がすべてOKが付けば、最低限の項目はクリアしています。また、セットアップを日本語で表示するため、「Choose your Language」のプルダウンから「Japanese」を選択します。
この言語設定は、セットアップのみ、その言語で表示するものです。

http://localhost/ilias/



基本設定

「Webの外部データディレクトリ」、「ログファイルのPath」、「タイムゾーン」「マスターパスワード」を設定します。

「Webの外部データディレクトリ」 /opt/iliasdata
「ログファイルのPath」 /opt/iliasdata/ilias.log

新規クライアントの作成

データベースの選択は、MySQL5.0.x or higherで保存します。

クライアントID は、適当な文字列を入力。
データベースのパスワードに、MySQLのパスワードを設定します。


データベース

データベースにILIASで利用するテーブルを構築します。
「データベースの作成」にチェックを入れて、「データベースのインストール」を選択します。

言語

日本語が表示されるように、日本語にチェックをいれます。

コンタクト情報

必須項目の名前とメールアドレスを登録します。

登録

ILIASのコミュニティーサーバ接続できるようにするか登録するものです。とりあえずしないので、「登録をスキップ」を選択します。

セットアップを終了中

これで初期登録は完了です。

ログインと日本語表記

ログイン画面に移動して、ユーザID: root、パスワード: homerでログインできると思います。

ただ、ここでログインをすると、中のサイトは英語表記になっているため、日本語に切り替えます。
セットアップの言語設定で、英語の選択を外し日本語のみにすると、この画面は日本語で表示されます。

「Parsonal Desktop」のメニューから「Settings」を選択します。

「General Settings」の「Language」のメニューから、「Japanese」を選択して「Save」をします。

そうすると、サイトが日本語で表示されるようになります。

このように、ILIASは、比較的簡単にインストールを行うことができます。

SCORM1.2概要

SCORM1.2 APIアダプタの状態遷移とSCOのメソッド

SCOとLMS間のデータのやり取りは、「SCORM1.2 ランタイム環境の概要」で説明したように、SCOは、APIアダプタに接続してデータの送受信を行います。SCOは、APIアダプタに対して次のJavaScriptのメソッドを利用することができます。これらのメソッドは、LMSが用意するものです。

APIメソッド
意味
LMSInitialize() LMSとの通信セッションを開始する
LMSFinish() LMSとの通信セッションを終了する
LMSGetValue() LMSから値を取得します
LMSSetValue() LMSに値をセットします
LMSCommit() すべてのデータを永続化(サーバー側に保存)します
LMSGetLastError() 最後のAPIの呼び出しに起因するエラーコードを返します
LMSGetErrorString() 指定されたエラーコードの文字列を返します
LMSGetDiagnostic() 最後に発生したエラーについての詳細情報を返します



APIアダプタとSCOとの通信は、3つの状態遷移からなります。

  • 未接続
  • 接続中
  • 切断

それぞれの状態で、利用できるメソッドが異なります。

仕様書では、Not Initialized、Running、Terminatedという風にAPIアダプタの状態遷移が分かれています。
findAPI() は、擬似コードです。APIアダプタのメソッドではありません。


未接続 APIアダプタへの接続処理

学習者がSCOを選択しようとしたとき、そのSCOはAPIアダプタに対して、まだ未接続状態です。接続状態になるには、次の2つの処理が必要です。

  • APIアダプタのJavaScriptの階層パスを取得する
  • LMSInitialize()を実行して接続を確立する

SCOがAPIアダプタに接続しようとするとき、まだLMSInitialize()を実行することはできません。実行するうえで、SCOはLMSのLMSInitialize()メソッドの階層パスが分らないためです。そのため、階層パスを調べ、場所が分った段階で、LMSInitialize()を実行します。そうすることで、「未接続」から「接続中」へと状態を遷移させることができます。

SCORMコンテンツを作成するうえで、APIアダプタのパスの取得は、つまづき易いポイントだと思います。


通信セッション中

「接続中」の状態になったら、LMSGetValue()、LMSSetValue()を使いLMSとデータのやり取りができるようになります。どのようなデータを取得、セットするかは、データモデル要素を利用していきます。

とくに、LMSSetValue()は、APIアダプタに対して値をセットするもので、クライアント側の処理となります。必ずしもサーバー側にデータがセットされるとは限りません。そのため、きちんとサーバー側にデータを渡すように、LMSSetValue()を実行した後に、LMSCommit() を実行すると、その時点、クライアント側に溜まっている情報が、サーバ側に渡ります。プッシュする確定ボタンみたいなものです。

通信セッションの終了処理

SCOを終了するときは、LMSFinish()を実行して「切断」します。仕様上では、LMSFinish()を実行すると内部では、LMSCommit()が自動的に実行されます。そのため、むやみに?データをセットしたからといって、LMSCommit()をする必要はそれほどありません。※ただLMSのデフォルトの動作は、LMS依存を引き起こす原因に繋がるため、安心ではありますが。

「切断」状態は、LMSFinish()を実行したときの戻り値により実行できるメソッドです。

エラー情報の取得

LMSGetValue()などを実行したとき、存在しないデータモデル要素や、型が間違っていると、LMSは、エラーコードを戻します。LMSGetLastError()、LMSGetErrorString()、LMSGetDiagnostic()の引数に、そのエラーコードを渡すと、詳細情報など知ることができます。

SCORM1.2概要

SCORM1.2 コンテンツアグリケーションモデルの概要

コースウェアの作成は、一度の作り切りで終わるものではなく、別のコースウェアを作成するとき、以前作成した学習資源を再利用できれば利便性が上がると思います。SCORMは、コースウェアの概念、学習資源の管理支援、そしてコンテンツの実装に関して、コンテンツモデル、メタデータ、コンテンツパッケージに分類し、これらを総称してコンテンツアグリケーションモデルと呼んでいます。

コンテンツアグリケーションモデルの理解は、再利用するにはどうすれば効率的か?ということを考えると、なぜSCORMは、そのような仕組みなのか、あれこれ注文をつけてくるのか見えてくるかもしれません。


コンテンツモデル

SCORMのコースウェアは、学習資源(SCO、アセット)の集合から成り立っています。新規に学習資源を作ることもあれば、既存のものを再利用して組み立てることもできます。しかし、1つの学習資源が、ほかの学習資源に依存していると、芋づる式に無関係なものまで含まれる危険性があります、そうすると再利用の利便性は落ちてしまいます。そのため、学習資源は、資源間の結びつきは弱く、独立性が高いことが求められます。コースウェアの設計者は、いつか再利用されることを意識して作る必要があります。

こうして作られた学習資源の集合は、どのような順番で提示するか学習の順番を決めます。フラットな並びでも、また1つの学習項目でも構いませんが、本の目次のような、章節項といった入れ子の階層構造も作ることができます。この体系化された構造のことをコンテンツモデルと言います。SCORM1.2では、学習の進行は、上から下へ(章→節→項)とリニアに進んでいきます。

コンテンツモデルは、体系化した目次のような項目のモデルを示しただけです。学習資源との結びつきは、含まれません。コンテンツモデルに、学習資源としてSCOやアセットを集約した状態のことを、コンテンツアグリケーションと言います。



メタデータ

多くのコースウェアを作成して、学習資源が増えてきたら、再利用して新たなコースウェアを作ることは自然なことだと思います。まだ学習資源の数が少ない場合、何がどこにあるのかといった管理で困ることはないかもしれませんが、もし、それが数千、数万とある場合、さまざまなサーバーに分散されている場合、必要な学習資源を見つけるには、どうしたらいいでしょうか?

SCORMは、そのようなことに対して支援するため、1つの画像からコースウェアに対して、メタデータをつける事ができます。メタデータとは、コンピュータが認識できる対象物への意味づけ(属性)です。

例えば、コンピュータは、一枚の画像から、その画像が示す内容までは分かりません。何の絵が描いてあるかまでは分からないわけです。ウサギの絵が必要になった場合、画像に「ウサギ」という意味づけ(属性)が設定されていれば、検索によりその画像を見つけ出すことができます。

SCORMのメタデータは、学習コンテンツの特徴などを示した意味づけとなります。学習コンテンツは、どの言語(Japanese、English・・)で作られたか、シミュレーション型なのかドリル型なのかといった、情報を持たせることができます。

SCORMのメタデータには、割り当てる種類により3種類に分かれます。

  • コンテンツアグリゲーションメタデータ
  • SCOメタデータ
  • アセットメタデータ

コンテンツアグリゲーションメタデータは、1つのコースウェア全体に対する情報です。SCO、アセットのメタデータは、コースウェアを構成する学習資産に対する情報となります。例えば、映像ファイルがある場合、アセットメタデータとして講義タイトル、作成日などを付けることができます。

メタデータは、SCORMの学習コンテンツの動作に直接関係しないため、記述しなくてもLMS上で学習コンテンツは動作します。LMSによっては、メタデータの情報を管理画面に表示するものもあるかもしれませんが、コンテンツリポジトリなどデータベースでコンテンツを管理することで、メタデータの便利さが実感できるかもしれません。

そのため、そのような検索システムを利用しない場合、あまりメリットが享受できないため、メタデータの記述は、省略することもあると思います。

コンテンツパッケージ

コンテンツパッケージは、コンテンツモデルやメタデータの具体的な記述を行い、さまざまなLMSで実行可能なコースウェアのフォーマットを提供することです。

SCORMのコースウェアの作成は、学習資源(SCO、アセット)と、マニフェストファイルに分かれます。マニフェストファイルは、コンテンツモデルなど構造に関するものをXML形式で記述したものです。

学習資源は、基本的に個々が独立しているため、それらをどのように繋げて、制御をしたいのか、そういった記述は、すべてこのマニフェストファイルに記述します。マニフェストファイル1つで同じ学習資源でもコンテンツの挙動はまったく違うものになります。また、このファイルが無ければLMSは、コースウェアとして認識することができません。それだけとても重要なファイルです。

こうして作られたコースウェアは、最後に圧縮フォーマットのZIP形式で1つのファイルにまとめます。このファイルを特にPIF(ぴふ)ファイルといい、LMSにコースウェアを登録するときのファイル形式となります。

SCORM1.2概要

SCORM1.2 ランタイム環境の概要

ランタイム環境

ランタイム環境は、学習コンテンツとLMSとの間で行われる処理に関する内容です。
次の3つから構成されます。

  • 学習コンテンツの起動の仕方
  • SCOとLMSとの間でのデータ送受信の仕方 APIの利用
  • データ送受信で利用される、データモデル要素の提供

LMSは、学習コンテンツを起動するとき、コンテンツアグリケーションモデルのマニフェストファイルに記述されるURLを参照します。

学習コンテンツは、SCOなのかアセットなのかで大きく処理が変わります。SCOの場合、LMS(具体的には、APIアダプタ)に対して、APIを利用して情報の送受信を行うことができます。そのなかで、どのような情報を伝えることができるかを定義したものが、データモデル要素です。

データモデル要素には、学習時間や学習完了などに関する情報が定義されています。そういった要素を組み合わせて、必要な処理を組み立てていきます。

アセットの場合は、そもそもLMSに対してデータの送受信はできません。ブラウザに表示するだけです。※ただしLMS側は、何もデータ送信しない学習コンテンツは、デフォルトの挙動で学習完了などのフラグが立ちます。

このような処理は、次のように表現することができます。おそらく気になるところは、APIアダプタからLMSに対してのデータ送受信でしょうか。この部分は、SCORMでは規定されておらず、LMSの独自仕様として自由に実装することができます。そのため、この部分は、コンテンツ制作者は気にする必要はありません。APIアダプタは、SCOに対してインターフェースの役割をもち、コンテンツ制作者は、APIアダプタとのやりとりだけを考えればいいわけです。

例えば、データモデル要素として仮に○○という情報を、LMSに送信する場合、APIの規定としてLMSSetValueというメソッドを利用します。この引数にデータモデル要素を渡します。SCOから、APIアダプタに渡された○○は、LMSにバトンタッチされていきます。

このように、ランタイム環境は、学習コンテンツの起動からデータの送受信といった一連の動作に関する内容が規定されています。

SCORM1.2概要

SCORM1.2の構成要素

SCORM1.2の仕様構成は、ランタイム環境(RTE あーるてぃーい)とコンテンツアグリケーションモデル(CAM きゃむ)の2つの構成に分けることができます。

学習コンテンツとLMSとの間で、位置関係を大まかに示すとつぎのようになります。

まずこの2つが、どのあたりのことを意味しているのか把握するといいでしょう。

SCORM1.2コンテンツ開発 実践

SCORM1.2 学習者のStudent IDを取得したい

cmi.core.student_id を利用すると、学習者を識別する一意の値を取得できます。ログインIDを返すLMSが多いですが、一意な文字列であれば何でも良いため、必ずしもログインIDが返されるとは限りません。

書式

LMSGetValue(“cmi.core.student_id”);

戻り値
LMSがログインIDをStudent IDと定めた場合、norausagiでLMSにログインするとnorausagiの文字列を返します。

norausagi

動作例

サンプルコンテンツ
SCORM12_student_id.zip

{tab=SCORM Cloud}
ログインIDを返す。SCORM Cloudでは、ログインIDは、登録メールアドレスのため、戻り値はメールアドレスが表示される。

{tab=Moodle2.1}
ログインIDを返す。

{tab=ILIAS4.1.7}
usr_idの値を返す。※ norausagiでログインしている。

ILIASでは、loginではなく、usr_idがcmi.core.student_idとして設定される。(usr_dataテーブル)

{tab=Moodle2.3+ELECOA}
idの値を返す。※ norausagiでログインしている。

ELECOAでは、usernameではなく、idがcmi.core.student_idとして設定される。(mdl_userテーブル)

※ELECOAのバージョン 2012年6月12日版
{/tabs}

eラーニングコトハジメ

SCORM vs 独自仕様

SCORMは、国際規格ですが独自の仕様を持ったLMSも多く存在します。ここでは独自形式について考えてみます。独習型LMSの学習コンテンツの仕様は、大きく2つに分かれます。

  • SCORM準拠
  • 独自仕様(SCORM以外)

そして組み合わせにより3つに分かれるでしょう。

  • SCORMのみサポート
  • 独自仕様のみサポート
  • SCORM・独自仕様、両方サポート

独自仕様とは、SCORMとは違う学習コンテンツ・学習管理の方式を採用したもので、学習コンテンツの一部がシステムに依存しているものなどがあります。

例えば、Youtubeの動画プレーヤは動的生成のため、映像ファイルごとにファイルは存在していません。映像ファイルは、システム側の動画プレイヤーに載ることで、コンテンツとして成立します。学習コンテンツで言えば、下のような関係が成り立つでしょう。

学習素材 + システム側の生成コンテンツ = 学習コンテンツ

学習コンテンツとして、重複する部分をシステム側が自動生成することで、制作負担を下げることができます。

SCORMの扱いづらさ

LMSの最低限の機能は、意外と単純です。ちょっとしたプログラマなら自力で設計できるでしょう。

  • 学習者の管理
  • 学習コンテンツの登録・管理
  • 学習者に教材を提示
  • 学習履歴の取得・管理

LMSが、SCORMを採用したくない理由を挙げるとすれば、

  • SCORMでは役不足で目的を達成できない、規格が足かせとなる
  • 利用する機能のみ実装したい
  • 規格が難読である

などなど

SCORMを採用することは、他人が作ったルールに従うという意味です。身動きがしづらくなる可能性があり、こんな機能を追加したいけど、SCORMではできないといったことが起こります。

また、自前でLMS、学習コンテンツを開発する場合、相互運用性を不要とすれば、SCORMに準じる必要はなくなります。必要な機能のみ実装すればよくなりますから、無理してSCORMに準拠してLMSを作っても、ほとんど使わない機能ばかりだと、労力の無駄となってしまいます。

そのため、不要な機能を実装しない、開発負担を下げる、そして、SCORMに無いような機能を実装できることを考えて、あえてSCORMに準拠しないという考え方も納得できます。SCORMを採用するか・しないかは、目的を明確にすることが重要になってきます。

私個人としては、SCORMはただの道具の1つという位置づけです。なにがなんでもSCORMという発想は持っていません。不要であれば採用しませんし、学習形態の1つその程度です。