LTI基礎編  ③押さえておきたいキーワード

# はじめに
LTIとはLearning Tools Interoperability（学習ツールの相互運用性）の略称であり、LMS（学習管理システム）を始めとする学習用プラットフォームと教材・学習ツールを連携させるための国際技術標準です。
教育関連のシステムやアプリケーションの利用者、導入者、開発・提供者それぞれにとってLTIを活用することには様々なメリットがあります。
今回はLTIの概要・詳細について、次の4つの記事を作成しました。
**LTI基礎編**
記事①[LTIの基本](https://qiita.com/Hiroki_Kobari/items/2419299342367a9f2535)
記事②[利用の流れ（連携初期設定～ツール呼び出しまで）](https://qiita.com/Hiroki_Kobari/items/a68026faa3a9cbaeff2c)
記事③押さえておきたいキーワード ⇒ 本記事

**LTI詳細編**
記事④[LTI Coreの通信フロー](https://qiita.com/Hiroki_Kobari/items/c9054769efad0f6b2822)

本記事は3つ目のLTI概要編③押さえておきたいキーワードになります。
ここでは、LTIを理解する上で押さえておきたいキーワードについて説明します。

# Platform
一般的には、学習管理システム（LMS）を指すことが多いですが、ツール群に機能の一部を移譲する必要のあるプラットフォームであれば、どのようなものでも問題ありません。

# Tool
プラットフォームに機能を提供する外部のアプリケーションやサービスのことをツールと呼びます。具体例としては、テストシステムや教材・学習コンテンツを提供するサービスなどが挙げられます。

# LTI Link
プラットフォーム上に設置された特定のツールへの参照リンクです。多くの場合、LTIリンクはHTMLリンクとしてユーザーに提示されます。しかし、LTIリンクは単なるURLではなく、ツールの起動時に含まれなければならない追加データを含んでいます。例えば、この後に説明する"Resource Link ID"や"Deployment ID"といった情報が必須になります。


# Context / Context ID
一般的にLMSでコースと呼ばれているものを、LTIではコンテキストと呼んでいます。つまり、コンテキストとは複数のコンテンツやリソースの集合体になります。このとき、コンテンツやリソースがどのコンテキストに含まれているかを区別するために必要となるのがコンテキストIDです。1つのコンテキストに含まれているすべてのコンテンツやリソースには同じコンテキストIDが割り当てられることになります。

# Resource Link / Resource Link ID
ツールによって提供されるコンテンツやリソースへのリンクを指す用語になります。
1つ前で説明したように、コンテキストとは複数のコンテンツやリソースの集合体であり、言い換えれば複数のリソースリンクの集合体と言えます。これら複数のリソースリンクを区別するために必要となるのがリソースリンクIDです。コンテキスト内のすべてのリンクは同じコンテキストIDを共有していますが、各リソースリンクにはプラットフォーム内で一意のリソースリンクIDが割り当てられ、これを使って複数のリンクを区別することができるようになります。

# ContextとResource Linkの具体例
例えば、以下の図のようなコンテンツが登録されたコースAとコースBがあるとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725519/ba924de4-6e42-9837-5efa-4ac1302f3f02.png)
このとき、コースAとコースBがコンテキストにあたり、それぞれに異なるコンテキストIDが割り当てられます。コースAに含まれているコンテンツ1~3へのリンクには、それぞれ異なるリソースリンクIDが割り当てられ、この値を使ってそれぞれのリンクを区別することができます。対してコンテキストIDは、コンテンツ1~3がコースAという同じコンテキストに含まれているため、3つとも同じコンテキストID（この場合はaaa）が割り当てられることになります。
また、コースBでは同じコンテンツ4へのリンクが2つ存在しています。このようにリンクのアクセス先が同じコンテンツである場合でも、2つのリンクにはそれぞれ異なるリソースリンクIDを割り当てる必要があります。これによって、例えば同じテストを2回配信した場合などに、どちらのリンクからテストを受けたかなどを判別することが可能になります。

# Client ID
プラットフォームで発行される一意の値であり、プラットフォームがツールを識別するために使用します。発行されたクライアントIDは、[記事②の2. 初期設定](https://qiita.com/Hiroki_Kobari/private/a68026faa3a9cbaeff2c#2-%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A)で説明しているように、前もってツール側に登録しておく必要があります。
クライアントIDの概念自体はOAuth 2.0で定義されたもので、OAuthを拡張したOpenID Connect（OIDC）をベースにしているLTIでも使用されており、ツールからプラットフォームへの認証リクエストにおける必須のパラメータになっています。
（OIDCの詳細については、[記事④]()にて説明しています）

# Deployment ID
プラットフォームで発行される一意の値であり、プラットフォームとツールの利用単位を識別するために使われます。こちらもクライアントID同様、発行されたデプロイメントIDを事前にツール側に登録しておく必要があります。
 
例えば、学校Aと学校BがいずれもプラットフォームMとツールNを利用しているとします。学校Aと学校Bは、それぞれ個別にプラットフォームMやツールNを契約しています。このとき、プラットフォームMは学校Aに対して「001」を、学校Bに対して「002」をそれぞれデプロイメントIDとして振り出します（実際には数字の連番である必要はないです）。プラットフォームMからツールNがLTIで呼び出されるとき、プラットフォームMは、ログイン中のユーザーが学校AのユーザーであればデプロイメントIDとして「001」を、学校Bのユーザーであれば「002」をツールNに送ります。これによってツールNは、同じプラットフォームMからのLTI呼び出しであっても、デプロイメントIDを見ればそれが学校Aのユーザーなのか学校Bのユーザーなのかを識別することができる、という仕組みになります。

以下の図は、プラットフォームとツールがともにマルチテナントであるパターンです。
ツールNは送られてきたIssuer IDとClient IDによって、プラットフォームMから呼び出されたということまではわかりますが、その2つの情報だけではどのテナント（この場合は学校）のユーザーであるかが識別できないため、その際に必要となってくるのがDeployment IDになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725519/eaf80be6-ede9-e324-188f-16e841b1c6ee.png)

# PII
Personally Identifiable Informationの略称で、特定の人物に紐づき、実際の人物の識別に用いることができる情報のことです。
LTIで利用する具体的なものとしては、名前（姓・名・ミドルネーム）、メールアドレスなどがあります。プラットフォームの中には、ツールを起動する際にPIIをパラメーターとして含めるかどうかを設定することができる仕様になっているものもあります。

# 参考資料
+ [Learning Tools Interoperability (LTI)® Core Specification](https://www.imsglobal.org/spec/lti/v1p3/)
+ [Learning Tools Interoperability (LTI) Assignment and Grade Services Specification](https://www.imsglobal.org/spec/lti-ags/v2p0/)
+ [Learning Tools Interoperability (LTI)® Deep Linking Specification](https://www.imsglobal.org/spec/lti-dl/v2p0/)
+ [Learning Tools Interoperability (LTI)® Names and Role Provisioning Services](https://www.imsglobal.org/spec/lti-nrps/v2p0)
+ [1EdTech Security Framework](https://www.imsglobal.org/spec/security/v1p1)
+ [OpenID Connect Core 1.0 incorporating errata set 1](https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html)
+ [学習基盤を拡張する国際技術標準 IMS LTI 1.3 第1回～第3回](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_snippet&all=&title=%E5%AD%A6%E7%BF%92%E5%9F%BA%E7%9B%A4%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B%E5%9B%BD%E9%9A%9B%E6%8A%80%E8%A1%93%E6%A8%99%E6%BA%96%20ims%20lti%201.3&count=20&order=7&pn=1&page_id=13&block_id=8)