SCORM教材を開発・カスタマイズする際、「LMSにアップロードしたら動かない」「学習履歴が記録されない」といった問題は避けて通れません。こうした問題を効率的に解決するには、適切なデバッグツールと手法を知っておくことが不可欠です。本記事では、ブラウザ開発者ツールやSCORM Cloudを活用した実践的なデバッグテクニックを、コード例付きで解説します。
1. SCORM教材のデバッグに使えるツール一覧
SCORM教材のデバッグには、目的に応じて複数のツールを使い分けることが重要です。以下に主要なツールとその用途をまとめます。
| ツール | 種別 | 主な用途 | 費用 |
|---|---|---|---|
| Chrome DevTools | ブラウザ内蔵 | JavaScript エラー確認、API 呼び出し監視、ネットワーク通信の確認 | 無料 |
| Firefox 開発者ツール | ブラウザ内蔵 | Chrome と同等のデバッグ機能。CSS レイアウト検証に強い | 無料 |
| SCORM Cloud | クラウドサービス | LMS に依存しない SCORM 準拠テスト環境。API ログの詳細確認 | 無料プランあり |
| SCORM Test Track | デスクトップアプリ | オフラインでの SCORM 動作テスト。API 通信ログの記録 | 無料 |
| Rustici Driver | ブラウザ拡張 | SCORM API の呼び出しをリアルタイムでモニタリング | 無料 |
| カスタムロガー | 自作スクリプト | SCORM API 呼び出しをフック(横取り)してコンソールに出力 | 無料 |
2. ブラウザ開発者ツールでのデバッグ
ブラウザ開発者ツール(DevTools)は、SCORM教材のデバッグにおいて最も基本的で強力なツールです。Chrome / Edge / Firefox いずれでもほぼ同じ手順で利用できます。
2-1. Console タブ——JavaScript エラーの確認
- LMS上で教材を起動した状態で F12キー(またはCtrl+Shift+I)を押して開発者ツールを開く
- Console タブを選択する
- 赤色のエラーメッセージが表示されていないか確認する
SCORM教材でよく見るコンソールエラーの例を挙げます。
TypeError: Cannot read properties of null— SCORM API オブジェクトが見つからない(API の検索処理に問題がある)SecurityError: Blocked a frame with origin— クロスオリジン制約によりiframe内の教材がLMSのAPIにアクセスできないReferenceError: API is not defined— SCORM 1.2 の API オブジェクトが未定義(LMS側の問題の可能性)
2-2. Network タブ——通信状況の確認
Network タブでは、教材とLMS間の通信状態を確認できます。
- 開発者ツールの Network タブを開く
- 教材を操作して、通信が発生するアクションを実行する
- ステータスコードが 4xx / 5xx のリクエストがないか確認する
特に注目すべきポイントは以下のとおりです。
- ステータス 403(Forbidden): セッション切れやCSRF(クロスサイトリクエストフォージェリ)トークンの不一致
- ステータス 500(Internal Server Error): LMS サーバー側のエラー。LMS 管理者への問い合わせが必要
- リクエストが発生しない: SCORM API の Commit(LMSCommit / Commit)が呼ばれていない可能性
3. SCORM Cloud でのテスト手順
SCORM Cloudは、Rustici Software が提供するクラウド型のSCORMテスト環境です。特定のLMSに依存せず、教材が SCORM 規格に準拠しているかを検証できます。
ステップ 1: アカウント作成
SCORM Cloud にアクセスし、無料アカウントを作成します。メールアドレスの確認後、すぐにダッシュボードが利用可能になります。
ステップ 2: 教材のアップロード
- ダッシュボード右上の 「Add Content」 ボタンをクリック
- 「Import a SCORM, AICC, xAPI or cmi5 package」 を選択
- SCORM 教材の ZIP ファイルをドラッグ&ドロップでアップロード
- アップロード完了後、インポート結果画面でエラーや警告がないか確認
ステップ 3: 教材の起動とテスト
- アップロードした教材の詳細ページを開く
- 「Launch」 ボタンをクリックして教材を起動
- 教材を最初から最後まで操作し、すべてのページ遷移・テスト問題・完了処理を確認
ステップ 4: API ログの確認
- 教材の詳細ページに戻り 「Activity Details」 タブを開く
- Runtime Data セクションで、SCORM APIを通じてセット・取得された全データを確認
- ステータス、スコア、学習時間などが期待どおりの値になっているか検証
SCORM Cloud でエラーなく動作するのにLMSで動作しない場合は、LMS側の設定や実装の問題であると判断できます。
4. デバッグ用 JavaScript コード例
SCORM APIの呼び出しを自動的にコンソールへ記録するロガースクリプトを紹介します。教材のHTMLファイルに追加することで、すべてのAPI通信を可視化できます。
SCORM 1.2 用ロガー
(function() {
var originalAPI = window.API;
if (!originalAPI) {
console.warn('[SCORM Logger] API object not found');
return;
}
var methods = [
'LMSInitialize', 'LMSFinish', 'LMSGetValue',
'LMSSetValue', 'LMSCommit', 'LMSGetLastError',
'LMSGetErrorString', 'LMSGetDiagnostic'
];
methods.forEach(function(method) {
var original = originalAPI[method];
originalAPI[method] = function() {
var args = Array.prototype.slice.call(arguments);
var result = original.apply(originalAPI, args);
console.log(
'%c[SCORM 1.2] ' + method,
'color: #2563eb; font-weight: bold;',
'| args:', args, '| result:', result
);
return result;
};
});
console.log('%c[SCORM Logger] SCORM 1.2 API monitoring started',
'color: #16a34a; font-weight: bold;');
})();
SCORM 2004 用ロガー
(function() {
var originalAPI = window.API_1484_11;
if (!originalAPI) {
console.warn('[SCORM Logger] API_1484_11 object not found');
return;
}
var methods = [
'Initialize', 'Terminate', 'GetValue',
'SetValue', 'Commit', 'GetLastError',
'GetErrorString', 'GetDiagnostic'
];
methods.forEach(function(method) {
var original = originalAPI[method];
originalAPI[method] = function() {
var args = Array.prototype.slice.call(arguments);
var result = original.apply(originalAPI, args);
console.log(
'%c[SCORM 2004] ' + method,
'color: #9333ea; font-weight: bold;',
'| args:', args, '| result:', result
);
return result;
};
});
console.log('%c[SCORM Logger] SCORM 2004 API monitoring started',
'color: #16a34a; font-weight: bold;');
})();
上記コードを教材の起動HTMLの内にタグで挿入するか、ブラウザの Console タブに直接貼り付けて実行してください。
5. よくあるエラーと解決策
SCORM教材のデバッグで頻出するエラーパターンを以下にまとめます。
| # | エラー / 症状 | 原因 | 解決策 |
|---|---|---|---|
| 1 | API not found / API オブジェクトが見つからない | 親ウィンドウ・opener の探索ロジックが不十分。LMSがAPIをセットする前に教材が実行された | API 探索関数でウィンドウ階層を最大10階層まで再帰的に検索する。読み込みタイミングを window.onload 以降に変更する |
| 2 | LMSInitialize が "false" を返す | LMS 側のセッションが未確立。二重初期化の検出 | ページ読み込み完了後に1回だけ Initialize を呼ぶ。既に初期化済みでないか確認する |
| 3 | LMSSetValue が "false" を返す | データモデル要素名の綴り間違い。Initialize 前に SetValue を呼んでいる | データモデル要素名を SCORM 仕様書と照合する。Initialize 完了後に呼び出す |
| 4 | LMSCommit が "false" を返す | Initialize が完了していない。通信タイムアウト | Initialize の戻り値が "true" であることを確認してから Commit する。ネットワーク接続を確認する |
| 5 | 学習ステータスが incomplete のまま変わらない | cmi.core.lesson_status(1.2)に completed / passed をセットしていない | 教材の完了条件を満たした時点で明示的にステータスをセットし、Commit を実行する |
| 6 | スコアが 0 で記録される | cmi.core.score.raw に値をセットする前に Finish を呼んでいる | SetValue → Commit → Finish の順序を厳守する |
| 7 | SecurityError: cross-origin frame | LMS と教材のドメインが異なる。iframe のサンドボックス設定 | 同一ドメインで配信する。LMS管理者に iframe の allow-same-origin 属性の追加を依頼する |
| 8 | suspend_data が保存されない / 切り詰められる | SCORM 1.2 の cmi.suspend_data は最大4,096文字。超過分は無視される | データを圧縮する(Base64 + LZString など)。SCORM 2004(最大64,000文字)への移行を検討する |
| 9 | 再開時にブックマーク位置が反映されない | cmi.core.lesson_location への書き込み・読み取り処理が未実装 | Initialize 後に GetValue で lesson_location を取得し、該当ページへ遷移する処理を実装する |
| 10 | 学習時間が 00:00:00 のまま | cmi.core.session_time(1.2)のフォーマットが HH:MM:SS でない。セットタイミングの問題 | 規格に準拠したフォーマット(1.2: HHHH:MM:SS.SS、2004: ISO 8601 Duration PT1H30M)でセットする |
| 11 | 教材がポップアップウィンドウで開かない | ブラウザのポップアップブロッカーが有効 | LMS ドメインをポップアップ許可リストに追加する。iframe 埋め込み方式への切り替えを検討する |
| 12 | Terminate 後にデータが消える | Terminate 前に Commit を呼んでいない | Terminate 呼び出しの直前に必ず Commit を実行する |
6. よくある質問(FAQ)
Q1. SCORM教材のデバッグは、どのブラウザで行うのが最適ですか?
Google Chrome が最も推奨されます。DevTools の機能が充実しており、Console / Network / Sources の各タブでSCORM関連の問題を効率的に調査できます。ただし、最終的にはユーザーが利用するブラウザ(Edge、Firefox、Safari など)でも動作確認を行ってください。
Q2. SCORM Cloud の無料プランでは何ができますか?
無料プランでは、教材のアップロード(10教材まで)とテスト起動、APIログの確認が可能です。本番運用には向きませんが、デバッグ目的には十分な機能が揃っています。
Q3. デバッグ用のロガースクリプトを本番環境に残しても問題ありませんか?
本番環境では必ず削除してください。ロガーはコンソールに大量のログを出力するため、パフォーマンスに影響する可能性があります。また、APIの内部通信が外部から閲覧可能になるセキュリティ上のリスクもあります。
Q4. LMSでは動かないがSCORM Cloudでは正常に動く場合、どう対処すべきですか?
LMS固有の問題である可能性が高いです。LMSベンダーに SCORM Cloud での正常動作を伝え、LMS側のSCORM実装やセッション管理の設定を確認してもらいましょう。また、LMSの教材表示方式(ポップアップ / iframe / 同一ウィンドウ)を変更すると解決するケースもあります。
Q5. SCORM 1.2 と SCORM 2004 でデバッグ手法に違いはありますか?
基本的なデバッグ手法は共通ですが、APIオブジェクト名が異なります(1.2: API、2004: API_1484_11)。また、データモデル要素名やエラーコード体系も異なるため、対象バージョンの仕様書を手元に置いて照合しながら作業することをおすすめします。
7. まとめ
- ブラウザ開発者ツールの Console タブと Network タブは、SCORM デバッグの基本中の基本
- SCORM Cloud を使えば、LMS に依存しない環境で教材の SCORM 準拠性を検証できる
- ロガースクリプトを活用すると、API 呼び出しの流れと戻り値を一目で把握できる
- エラーの多くは API の呼び出し順序・データモデル要素名の誤り・タイミングの問題に起因する
- 問題の切り分けには「SCORM Cloud で動くか」を基準にすると、教材側 / LMS 側の原因を特定しやすい
SCORM教材のデバッグでお困りではありませんか?株式会社エレファンキューブは、eラーニング専門18年・3,000件超の制作実績を持つSCORMのプロフェッショナルです。「原因がわからない」「自社で対応しきれない」といったケースでも、豊富な経験をもとに迅速に問題を解決します。まずはお気軽にお問い合わせください。
株式会社エレファンキューブ
eラーニング教材制作の専門会社。2008年の創業以来、3,000件超の制作実績を持ち、SCORM 1.2 / SCORM 2004 / xAPI / cmi5など各種規格に精通。企画からLMS搭載まで、ワンストップで対応しています。
コーポレートサイト