メインコンテンツにスキップ

xAPI統合

:robot_face:

注意:英語以外の言語の記事はAIの助けを借りて翻訳されています。正確さを目指していますが、一部の表現が若干異なる場合があります。改善点に気づかれた場合は、ぜひご意見をお寄せください。

統合について

DataCampはxAPI標準をサポートするLMSまたはLRSと統合できます。統合が有効な場合、開始、完了、および進捗のステートメントをLMSが提供するxAPIエンドポイントに送信できます。

認証

DataCampはxAPIエンドポイントへの認証方法として以下の2つをサポートしています:

  • ベーシック認証(usernameとpasswordが必要)

  • ベアラー認証(トークンが必要)

完了同期プロセス

DataCampはxAPIを介してコンテンツの完了を同期できます。これにはコース、プロジェクト、練習、評価、認定、およびコースチャプターの完了が含まれます。

完了ごとに、xAPIステートメントがLMSに送信されます。ステートメントはほぼリアルタイムで同期されるため、学習者がDataCampでコンテンツを完了すると、対応する完了ステートメントがLMSに届くまで最大5分かかる場合があります。

開始イベント同期プロセス

コンテンツ完了イベントに加え、DataCampは開始イベントも同期できます。現在、開始イベントはコースのみで利用可能です。開始イベントは、学習者がコースの最初の演習を完了したときに発行されます。

完了ステートメントと同様に、開始イベントステートメントもほぼリアルタイムで送信されます。

進捗同期プロセス

DataCampは進捗ステートメントも送信できます。現在、進捗ステートメントはコースのみで送信されます。学習者がチャプターを完了するたびに、DataCampは学習者が完了したコースの割合を含むステートメントを送信します。

完了および開始イベントステートメントと同様に、進捗ステートメントもほぼリアルタイムで送信されます。

ユーザー識別子

ステートメント内でユーザーを識別するために、以下の2種類の識別子が使用可能です:

  • メールアドレス:この場合、プラットフォームに登録されているユーザーのメールアドレスを使用します;

  • NameID:組織でSSOが有効になっている場合、IDPを設定して従業員IDをNameIDとして送信できます。このNameIDはDataCamp側に保存され、ステートメントのユーザー識別子として使用されます。

xAPIイベント

DataCampは3つのxAPI動詞を発行します。以下の表は、それぞれの動詞がどのコンテンツタイプに対して発行されるかを示しています。すべてのステートメントはセットアップ時に設定されたLRSエンドポイントにPOSTされます。

動詞

動詞IRI

発行対象

タイミング

COMPLETED

http://adlnet.gov/expapi/verbs/completed

コース、コースチャプター、プロジェクト、練習、評価、認定

学習者がコンテンツアイテムを完了したとき。トラックのテストアウトなどでスキップされたコースは送信されません。

STARTED

https://activitystrea.ms/schema/1.0/start

コースのみ

学習者がコースの最初の演習を完了したとき。

PROGRESSED

http://adlnet.gov/expapi/verbs/progressed

コースのみ

学習者がチャプターを完了するたびに送信。ステートメントには全体のコース完了率が含まれます。チャプターのCOMPLETEDステートメントと共に送信されます。

ステートメントは学習イベントの発生からほぼリアルタイム(5分以内)で配信されます。

ステートメント例

完了 — コース(メールアクター)

{
  "actor": {
    "mbox": "mailto:[email protected]",
    "objectType": "Agent"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": { "en-US": "COMPLETED" }
  },
  "object": {
    "id": "http://datacamp.com/course/123",
    "definition": {
      "name":        { "en-US": "Introduction to Python" },
      "description": { "en-US": "Master the basics of data analysis in Python…" },
      "type":        "http://datacamp.com/course",
      "extensions":  {
        "http://datacamp.com/topics": ["Python", "Programming"]
      }
    }
  },
  "timestamp": "2026-05-08T14:44:01.267Z"
}

完了 — コース(NameIDアクター)

{
  "actor": {
    "account": { "name": "emp_001", "homePage": "https://www.datacamp.com" },
    "objectType": "Agent"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": { "en-US": "COMPLETED" }
  },
  "object": {
    "id": "http://datacamp.com/course/123",
    "definition": {
      "name":        { "en-US": "Introduction to Python" },
      "description": { "en-US": "Master the basics of data analysis in Python…" },
      "type":        "http://datacamp.com/course"
    }
  },
  "timestamp": "2026-05-08T14:44:01.267Z"
}

完了 — コースチャプター

{
  "actor": {
    "mbox": "mailto:[email protected]",
    "objectType": "Agent"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": { "en-US": "COMPLETED" }
  },
  "object": {
    "id": "http://datacamp.com/course-chapter/412",
    "definition": {
      "name":        { "en-US": "Hello Python!" },
      "description": { "en-US": "An introduction to Python basics." },
      "type":        "http://datacamp.com/course-chapter",
      "extensions":  {
        "http://datacamp.com/parentId":          "http://datacamp.com/course/123",
        "http://datacamp.com/parentContentType": "http://datacamp.com/course"
      }
    }
  },
  "timestamp": "2026-05-08T14:48:18.740Z"
}

完了 — プロジェクト / 練習 / 評価 / 認定

コース完了と形は同じです。変更されるのはobject.idとobject.definition.typeのみです。例:

"object": {
  "id":   "http://datacamp.com/project/456",
  "definition": { "name": {…}, "description": {…}, "type": "http://datacamp.com/project" }
}

開始 — コース

{
  "actor": {
    "mbox": "mailto:[email protected]",
    "objectType": "Agent"
  },
  "verb": {
    "id": "https://activitystrea.ms/schema/1.0/start",
    "display": { "en-US": "STARTED" }
  },
  "object": {
    "id": "http://datacamp.com/course/123",
    "definition": {
      "name":        { "en-US": "Introduction to Python" },
      "description": { "en-US": "Master the basics of data analysis in Python…" },
      "type":        "http://datacamp.com/course"
    }
  },
  "timestamp": "2026-05-08T14:44:01.267Z"
}

進捗 — コース

{
  "actor": {
    "mbox": "mailto:[email protected]",
    "objectType": "Agent"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/progressed",
    "display": { "en-US": "PROGRESSED" }
  },
  "object": {
    "id": "http://datacamp.com/course/123",
    "definition": {
      "name":        { "en-US": "Introduction to Python" },
      "description": { "en-US": "Master the basics of data analysis in Python…" },
      "type":        "http://datacamp.com/course",
      "extensions":  {
        "http://datacamp.com/percentCompleted": 75
      }
    }
  },
  "timestamp": "2026-05-08T14:50:27.571Z"
}

前提条件

xAPI統合を設定する前に、以下の要件を満たしている必要があります:

  • DataCampの有効なエンタープライズサブスクリプション;

  • xAPIステートメントの受信をサポートするLMSまたはLRS;

  • (任意)DataCampでSSOが設定されていること;

  • ユーザー識別子をNameIDにする場合、IDPがNameIDフィールドに送信するよう設定されており、NameIDフォーマットが「urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified」に設定されていること

セットアップ

xAPI統合を設定するには、まずDataCampからのxAPIステートメントを受信するようにLMSまたはLRSを設定してください。さらに、DataCampがLMSに認証できるように認証情報を作成してください。

次に、DataCampに以下の情報を提供します:

  • xAPIエンドポイント;

  • 認証情報(ベーシック認証の場合はusername/password、ベアラー認証の場合はトークン);

  • 送信するステートメントの種類(完了、進捗および/または開始);

  • 完了ステートメントを送信する場合、どのコンテンツタイプの完了を含めるか;

  • ユーザー識別子としてメールアドレスまたはNameIDのどちらを使用するか

DataCampはこれらの情報を使用して統合の設定とテストを行います。

よくある質問

コースをスキップした場合、ユーザーの完了はxAPIで送信されますか?

スキップされたコースの完了は送信されません。(トラックの一部として、テストアウト評価に合格した場合などにコースがスキップされることがあります。)

こちらの回答で解決しましたか?