LTIのキャッチアップ一歩目のための概要と仕様書読み解きのガイド

# はじめに
　本記事は、LTI(Learning Tools Interoperability)について紹介しています。教育ドメインに係る技術者を対象に、LTIのキャッチアップの一歩目を踏み出せるよう概要や仕様書の読み解き方のガイドを記載しています。
 
 <!-- LTIの理解やキャッチアップの助けとなることを目指しています。具体的には、目を通し終わったあとでハンズオンに取り組めるReady状態になるよう、文脈や概要と各種リソースがどこにあるのか把握してもらうことを目指します！本質的な理解は手を動かしながら、仕様書と通信内容を見ながら行っていただえればと思います。 -->
 
　LTIは、教育関連のシステムやアプリケーションの利用者、導入者、提供事業者それぞれにとって利点があり、日本でも省庁や、業界団体などでその導入検討や促進が行われています。([学習eポータルの取り組み](https://ictconnect21.jp/document/eportal/#summary))
 
　一方で、LTIの理解やキャッチアップには、一定のハードルがある状況です。このハードルは、ドキュメントが点群のように存在していることと感じています。その解消のためにこの記事を通して、LTIのキャッチアップの一歩目をどこに踏み出せば良いか見通してもらえればと思います！

:::note info
筆者はもともとフロントエンドエンジニアで、そこからキャッチアップをしていった経験を基に記事をまとめています。そういったバックグラウンドでの観点になる点注意、参考まで
:::

# 目次
1. [LTIの概要](#1-ltiの概要)
1. [LTI仕様書の読み解き方](#2-lti仕様書の読み解き方)
    2.1. [事前把握が必要な分野の紹介](#21-事前に把握が必要なこと)
    2.2. [LTI標準関係図](#22-lti標準関係図)
    2.3. [LTI標準読み解き大まかな流れ](#23-lti読み解き大まかな流れ)
    2.4. [各セクションのポイント](#24-各セクションのポイント)
1. [最後に](#3-最後に)

# 1. LTIの概要
　本章ではLTIの概要として、その背景や目指す世界観、実現のためにどのような技術標準があるのかについて説明します。
　

## 1.1. LTIとは : What
　LTIは、異なる学習プラットフォームやツールを簡単に連携させ、教育の質を高めるための国際的な規格です。LTIを採用することで、教育現場の利用者側のニーズに応じて柔軟な教育環境を構築できるようになります。さらに、供給者側としても統一された規格をもって開発することで、他のシステムとの連携のコストを下げることができます。例えば、USBのように、「インターフェース」と「やり取りする手順と中身」の規格化によって互換性が保証されることで、メーカーやデバイスに依らない接続と連携が可能になります。


## 1.2. 背景 : Why
　学校現場や教育においては、多様な教材を用いて様々な活動が行われています。例えば、社会の授業において、教科書をベースに進めつつ、参考書や先生が配布したプリント資料を基にノートをとったり意見交換をする活動などがあります。
　そのような中でICTが日々発達し、大学のみならず小中学校でもPCとインターネットによって様々な活動が行われています。デジタル化した教材は、その目的や科目や提供者が異なるためそれぞれにアクセスログインし、別々のシステム/アプリとして使うしかない課題が見えてきていました。

 
## 1.3. 目指す世界観 : Where
　そのような中で[NGDLE](https://library.educause.edu/resources/2015/4/the-next-generation-digital-learning-environment-a-report-on-research)というコンセプトが2015年に提唱されました。先生方が組み立てたい授業のためにも、児童生徒の興味関心が赴くがままに自由に学ぶためにも、多様な教材を柔軟に、そして必要な時にいつでも利用できることを目指したコンセプトです。LTIの説明にむけて重要なコンセプトは、以下の2点になります。
 + 管理者(教員など)によって多様な教材を柔軟に選び連携できること
 + 利用者にとって多様な教材を必要な時にいつでも使えること
  
 これは会社に置き換えても同じで、情報システム部門が導入と連携が簡単であることと、利用者が多重にログインせずに簡便に扱えることが求められるかと思います。
 　特に学校現場や教育においては多様な教科、多様な活動(授業、宿題、自主学習、実験、レポート、研究 etc.)、多様な関係者(児童生徒、先生、教育委員会、保護者 etc.)が関わっているために相互運用性が非常に重要になっています。
 
## 1.4 実現のための手段 : How
　NGDLE、相互運用性(Interoperability)を実現するための、1つの手段がLTIという技術標準になっています。LTIによって、標準化される主要な対象は次の3点になります。
 + 教育×システムのキーコンセプト
 + 教材の起動 ≒ システム間の認証認可
 + 教育システム間の情報のやり取り

例えば、教育における先生による教材の選択と児童生徒による利用をシステムで実現するために、教材ごとにContextやResourceという情報のコンセプトを持たせたり、利用≒起動にLaunchという動きのコンセプトを規定しています。
　他にも、教材の採点結果を共有する標準や起動対象となる教材を選択する標準があります。例えば、「あるLMSからCBTの問題を選択して児童生徒に起動して受験させ、その結果を共有する」とったことがLTI標準によって実現できます。

# 2. LTI仕様書の読み解き方
　過不足なく十全であることより、見通しが立つことを目的に、ミニマムな仕様だけを選んで紹介を試みます。

　まず初めに事前の把握が必要な項目に関してざっくりと紹介します。 次にLTI標準の関係図と読み解く大まかな順序を紹介します。その後でポイントとなる部分を紹介します。

 <!-- 各チャプター -->
<a id="#Chap-pre"></a>
## 2.1. 事前に把握が必要なこと
　LTIは、一般的なWeb技術をベースとして、教育活動における様々なユースケースを加味した標準化を行っています。Web関連の技術としてHTTPやブラウザなどについては割愛します。この章で取り上げている内容を「ざっくりと把握して、戻り先を持っておく」レベル感で見てもらえればと思います。

### 暗号や認証
　暗号や認証に関する基礎的な内容は把握しておく必要があるかと思います。
 以下の項目については、どういった目的でどういった役割を担っているか程度までを把握する必要があるかと思います。
 + 認証認可
 + 公開鍵
 + 署名
 + 暗号化
 
 以下の項目についても、どういった目的でどういった手段(計算)をしているのかをざっくり把握できていると、実装時のライブラリの利用やパフォーマンスを考える時に困ることが少なくなると思います。
 + 暗号
 + 乱数
 + RSA暗号
 + ハッシュ

こちらはOpenな記事などで良いものに辿り着けなかったので、参考にした書籍を共有させてもらいます。
[図解即戦力暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書](https://gihyo.jp/book/2021/978-4-297-12307-9)
　図解即戦力シリーズは大型の書店に行くと平積みされていますし、手に入りやすいかと思います。
 
### OIDC(Open ID Connect)
　LTIはOIDCを基にした標準であるため特に理解が必要です。OIDCについて参考にしたドキュメントを列挙したいと思います。
 + [一番分かりやすい OpenID Connect の説明](https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe)
 + [IDトークンが分かれば OpenID Connect が分かる](https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06)
 + [OpenID Connect 全フロー解説](https://qiita.com/TakahikoKawasaki/items/4ee9b55db9f7ef352b4)

### その他
 以下に関しては、検索エンジンで調べて最初の1,2記事をざっと読むくらいで良いかと思います。
 + LMS(Learning Management System)
 + CBT(Compter Based Testing)

<a id="#Chap-lti-rough"></a>
## 2.2. LTI標準関係図
　ポイントは、1EdTech Security Frameworkというセキュアな通信のための標準を参照して、LTIが定められていることです。(ここに気づくのに遅れて時間とられました、、)
 なお、以下の図はざっくりとしたイメージで、厳密ではない点注意してもらえればと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417783/a24a8576-4af1-4056-de5b-98f57e31e1bf.png)


## 2.3. LTI読み解き大まかな流れ
　各種仕様は[LTIのプロジェクトページ](https://www.1edtech.org/standards/lti)にあります。今回は、LTIを使って異なるシステムが連携し合うところまでを、1つのゴールとして紹介します。ここで、連携とはLTI PlatformからLTI Toolをセキュアに、かつ必要な情報を提供して立ち上げるところまでを指します。
 　※また、1 EdTechは2022年にIMS Globalからリブランド(名称変更)されました。旧IMS Globalは今の1EdTechを指していることもあり、ドキュメントを遡って読む際に注意が必要です。([1EdTech brandのlink](https://www.1edtech.org/about/brand))

| 順 | 何を理解するか？ | 該当仕様書とセクション| Link |
|:-:|:-:|:-:|:-:|
| 1 | LTIのキーコンセプトと要素| LTI Core Section 3  | [link](https://www.imsglobal.org/spec/lti/v1p3/#key-concepts-and-elements)  |
| 2 | LTIでのセキュアな通信のための認証認可  | 1EdTech Security Framework Section 5 | [link](https://www.imsglobal.org/spec/security/v1p0/#message-security-and-message-signing)  |
| 3 | LTIでのシステム間のメッセージのやり取り  | LTI Core Section 4  | [link](https://www.imsglobal.org/spec/lti/v1p3/#lti-message-general-details)  |
| 4 | LTIでの連携システムの起動(リソースリンクでの起動)  | LTI Core Section 5  | [link](https://www.imsglobal.org/spec/lti/v1p3/#lti-message-general-details)  |

<a id="#Chap-lti-read"></a>
## 2.4. 各セクションのポイント
　本記事はあくまでキャッチアップのガイドまでとし、解説は行わずに特に重要となるポイントについて紹介します。
### LTIのキーコンセプトと要素
　[LTI Core Sec.3 Key concepts and elements](https://www.imsglobal.org/spec/lti/v1p3/#key-concepts-and-elements)に、キーコンセプトと構成要素が説明されています。何度も立ち戻って解釈の更新をしていく箇所になるかと思います。始めのうちに重要と思われるポイントを★三つで列挙します。※実装時(DB設計時)や、アーキテクチャ検討時には全セクション重要
 | 始め重要度| セクション |
|:--|:--|
|★★★|3.1 Platforms and tools|
| ★  | 3.1.1 Historical identification of LTI integration parties  |
| ★★ | 3.1.2 LTI Domain Model  |
|★★★ |3.1.4 LTI Links|
|★★★ |3.1.5 LTI Launch|
|★★★ |3.2 Contexts and resources|
|★★ |3.3 Users and roles|
|★★ |3.4 Authentication, authorization, and capabilities|
|★★ |3.5 Messages and services|

### LTIでのセキュアな通信のための認証認可
　[1EdTech Security Framework - Sec.5 Message Security and Message Signing
](https://www.imsglobal.org/spec/security/v1p0/#message-security-and-message-signing)に、セキュアな連携確立(メッセージのやり取り)までのコアな仕様があります。この章でのメッセージをセキュアにやり取りするのプロトコルが、LTI LaunchなどのLTIの各動作や他の拡張仕様のベースになっています。この章で書かれている図はどちらも重要です。基本的なユースケースはPlatformからのツールの立ち上げやメッセージ送信なので、5.1 Platform-Originating Messagesが、特に始め理解が必要な章かと思います。

### LTIでのシステム間のメッセージのやり取り
　[LTI Core Sec.4 LTI message general details](https://www.imsglobal.org/spec/lti/v1p3/#lti-message-general-details)に、PlatformとTool間のメッセージにおける仕様が記載されています。Security Frameworkに加える形でPlatformとToola間のメッセージのやり取りのための、仕様が書かれています。
 　4.1.1 lti_message_hint login parameter はSecurity Frameworkにはなく、この章で定義されたパラメータです。記載も少なく捉えどころがないですが、柔軟に様々なユースケースを想定されたパラメータで重要です。様々な情報を持たせられるので起動時のオプションとして使えたりします。また、起動時に認証フロー全体で保持されるのでセッションの状態保持や、セキュリティトークンではありませんがnonceのように起動リクエストを一意に維持してリプレイ攻撃を防ぐのにも使えます。

### LTIでの連携システムの起動
　[LTI Core Sec.5 Resource link launch request message](https://www.imsglobal.org/spec/lti/v1p3/#resource-link-launch-request-message)に、連携時のLTIによる他システムの起動要求の構成について記載されています。始めのうちに重要と思われるポイントを★三つで列挙します。
 | 始め重要度| セクション |
|:--|:--|
|★★|5.1 Resource link|
|★★|5.2 Launch from a resource link|
|★★★| 5.3 Required message claims |
| ★ | 5.4 Optional message claims  |
 
 　5.3はそれぞれのクレームがどのような役割を持ち、どのような値をどのような形で入れるべきかが規定されています。実装時はこれらのクレームを適切にセットする必要があるため重要な章になります。

<a id="#Chap-lti-read"></a>
## 2.5. 他の仕様やドキュメントに関して
### バージョンに関して
　2024年3月現在、1.3が推奨されています。1.0, 1.1, 2.0を目にすることがあるかもしれませんが、執筆時点で有効な標準は1. 3 のみとなります。

### LTI Advantageについて
　LTIにはより柔軟で便利な連携のために、以下の3つのLTI Advantageと呼ばれる仕様も策定、公開されています。
 | 仕様 | 概要 |
|:--|:--|
|[Assignment and Grade Services 2.0 (AGS)](https://www.imsglobal.org/spec/lti-ags/v2p0/) |結果情報の共有(評定表の共有) |
|[Names and Role Provisioning Services 2.0 (NRPS)](https://www.imsglobal.org/spec/lti-nrps/v2p0)   | ユーザー情報の共有|
|[Deep Linking 2.0 (DL)](https://www.imsglobal.org/spec/lti-dl/v2p0)   |柔軟なコンテンツ配信|

### その他蛇足
　LTI標準は拡張を続けており、様々な仕様がLTI Optional Serviceとして更新されています。また、実装などに関してはプロジェクトページ以外にも、LTIの理解や実装を手助けするリンク集があり、1 EdTechのG itHub リポジトリである[LTI Bootcamp](https://github.com/1EdTech/ltibootcamp)としてまとまっています。
<a id="#reference"></a>
# 3. 最後に
　LTIのキャッチアップの一歩目を踏み出せるように、その概要や仕様書の読み解きガイドを記事にしました。最低限の骨子や、LTI PlatformからのTool起動までの見通しをなんとなくつかんでいただけたら幸いです。誤記や明らかに異なる解釈や紹介があれば、お手数ですがコメントしていただければと思います。この後、ハンズオン的に仕様書と通信内容をにらめっこする記事を書きリンクをこちらに追加したいと思っています。
　未来にかけることのできる教育ドメインで、多様な役割を持つ人々とシステムが協調し、三方良しどころか多方良しを目指す面白い技術標準と思います。日本 1EdTech 協会などでは最新の標準の検証や日本へのローカライズの検討など行っています、ご興味のある方は日本 1EdTech 協会に連絡をお願いします！