0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LTIカスタムパラメータによる Moodle + JupyterHub 連携システムの構築と運用

Last updated at Posted at 2025-12-24
Moodle + JupyterHub 連携システム シリーズ(1)

0.はじめに

本記事では MoodleJupyterHubLTI を用いて連携し,SSO にとどまらず,LTI カスタムパラメータを活用した動的制御により,受講者が最小限の操作で演習環境に入れる基盤の構築・運用方法を紹介します.説明では,授業利用を想定した 小規模オンプレミス環境 を例にしていますが,構成自体はクラウド環境にも応用可能です.

対象読者は,Linux の基本操作や Web サービスの運用にある程度馴染みがあり,Moodle や JupyterHub を用いた演習環境の整備・運用に関心を持つ方を想定しています.本記事では,環境構築の細部を網羅することよりも,最小構成で確実に動作する設計と,実運用で得られた知見に重点を置いて解説します.

記事中の設定例は,実際の授業運用で確認した構成をもとにした 最小構成の一例 です.組織のポリシや運用要件に応じて,適宜調整しながら利用してください.

1.概要

1.1 解説

本記事では MoodleJupyterHubLTI で連携し,SSO に加えて LTI カスタムパラメータの受け渡しによる動的制御を行う構成を扱います.これにより,受講者ごとに隔離された JupyterLab 環境を最小限の操作で起動できる演習基盤 を構築できます.

本システムの設計は Moodle 固有のものではなく,Open edX,Sakai,ILIAS,RELATE(Python 製軽量 LMS)など,LTI を実装した他の LMS へも展開可能なアーキテクチャです.ただし,現時点で公開しているモジュールは Moodle 向けのみです.

実運用では,Moodle サーバと JupyterHub サーバを 別々のミドルレンジ構成の PC に分離した構成で,40~50 名程度の同時利用においても安定して動作することを確認しています(※1).本記事では,オンプレミス環境における 単一 JupyterHub 運用 を前提に解説しますが,必要に応じて 1 台の Moodle から複数の JupyterHub を制御する構成 も可能です.

※1: 実運用時の最低構成例

  • Moodle 側:AMD Ryzen 7 2700X(8 Core),RAM 32GB,Rocky Linux 8(過去の運用時のOSバージョン)
  • JupyterHub 側:AMD Ryzen 9 5900X(12 Core),RAM 64GB,Rocky Linux 8(過去の運用時のOSバージョン)

当面は LTI 1.1 による連携を前提とします.Moodle 側では mod_lticontainer モジュールが LTI カスタムパラメータの設定を支援し,課題やコース情報を LTI Launch とともに JupyterHub へ送信します.JupyterHub 側では LTIContainerSpawner がこれらのパラメータを解釈し,コンテナイメージの選択,リソース制限,ボリューム割り当てなどを自動的に行ったうえでコンテナを起動します.

さらに,configurable-http-proxy(CHP) の代替として ltictr_proxy を組み合わせることで,Notebook のコードセル実行結果に基づく正答情報を収集し,Moodle 側へ可視化用データとして返す構成も選択できます(オプション).

これらの連携により,受講者は端末ごとの環境構築から解放され,授業開始直後から 同一の実行環境で演習に入ることが可能になります.また,教室外からの予習・復習についても,ブラウザのみで対応できます.

教員側にとっては,環境差異やライブラリ依存関係に起因するトラブル対応を最小限に抑えつつ,授業設計や教材作成に集中できる点が利点です.
コンテナによる隔離により安全性と安定性を確保するとともに,複数プログラミング言語対応環境CPU 数メモリ上限実行時間制限マウントボリューム(課題配布・作業・回収領域) などを,課題単位で柔軟に切り替える運用が可能 です.付属ツールを用いれば,教材の配布・回収・採点も運用に沿って一元化できます.

1.2 システムの構成

1.2.1 本シリーズでの動作確認環境(※2)

本シリーズで解説する構成は,以下の環境において動作確認を行っています.いずれも最小構成での検証であり,大規模環境やクラウド構成を前提としたものではありません.

  • OSRocky Linux 9 または Ubuntu Server 24(各最小構成)
  • Moodle: 執筆時点での最新安定版
  • Python: 3.11
  • JupyterHub: 4.x
  • configurable-http-proxy(CHP): 4.x

ただし,本構成の原型となる 旧バージョンでは,Moodle サーバ 1 台,JupyterHub サーバ 5 台(うち 1 台は予備) による構成で,約 250 名規模の同時利用を想定した授業運用を,3 年間にわたり継続的に実施 してきました.本シリーズでは,これらの運用実績を踏まえつつ,まずは再現性の高い最小構成に焦点を当てて解説します.

なお,過去の授業運用では比較的高性能なサーバを用いていましたが,本シリーズで紹介する構成は,それらの運用経験を踏まえたミドルレンジのサーバ構成 を前提としています.

※2:補足

  • Docker または Podman が動作する環境であれば,記載以外の Linux ディストリビューションでも基本的に動作します
  • Moodle についても,必ずしも最新版である必要はありません
  • 本記事では,Python は 運用実績のある安定版である 3.11 を使用します.Python 3.12 については,本記事で扱う構成としての体系的な検証は行っておらず,関連ライブラリの対応状況を踏まえ,今後の検証課題とします.

1.2.2 本シリーズで紹介する OSS(著者らによる開発)

本システムは,既存の OSS を組み合わせるだけでなく,以下のコンポーネントを新たに開発・拡張することで実現しています.

Fig.0.1.png
JupyterLab-Broccoli-Turtle の画面


1.2.3 システム構成の概略

以下に本システムの全体構成の概略を示します.

Fig.5.2.png
システムの全体像の概略

本構成で新たに実装・導入した主な要素は,下記のとおりです.

  • Moodle 用モジュール mod_lticontainer
  • JupyterHub の Spawner クラス LTIContainerSpawner
  • CHP の代替 Proxy である ltictr_proxy(オプション)
  • コンテナ初期化用スクリプト start.sh

LTIContainerSpawner は JupyterHub の DockerSpawner を継承しており,Docker および Podman のいずれでも利用可能です.

mod_lticontainer は,主として LTI カスタムパラメータの設定 を支援します.ここで設定されたパラメータは,SSO を伴う LTI Launch とともに JupyterHub へ送信され,後段で LTIContainerSpawner が解釈します.LTIContainerSpawner は受信した情報に基づいて,コンテナイメージの選択,リソース制限,ボリューム割り当てなどを決定し,起動後はコンテナ内で start.sh が各種パラメータを読み込んで Jupyter 環境の初期化を行います.

学習状況データの収集については,オプションとして ltictr_proxy を利用できます.これは,ユーザのブラウザとコンテナ間の WebSocket 通信に介在し,コードセル実行結果(正常終了またはエラー)を解析し,REST を介して mod_lticontainer に通知します.現バージョンでは,収集対象は実行結果の種別に限定しています.
なお,本機能は将来的に LTI 1.3 を用いた構成に置き換えられる可能性があります.

SSH ポートフォワーディング は,mod_lticontainer が JupyterHub サーバ上のコンテナ環境(コンテナイメージ一覧など)の情報を取得するために使用します.この機能についても,今後は LTI 1.3 を利用した構成に統合される可能性があります.


シリーズ総目次

本ページは 「0.はじめに/1.概要」 です.以降は章ごとに別記事として公開します.

  • 2.Linux と Moodle のインストール・設定記事はこちら
  • 3.JupyterHub(LTIContainerSpawner)のインストールと設定記事はこちら
  • 4.Moodle モジュール mod_lticontainer のインストールと設定記事はこちら
  • 5.Moodle と JupyterHub の連携記事はこちら
  • 6.運用方法[書きかけ]
  • 7.コンテナイメージ記事はこちら
  • 8.応用(オプション機能,大規模運用,NFS)[書きかけ]
  • 9.トラブルシューティング記事はこちら

参考文献・URL


シリーズ「LTI カスタムパラメータによる Moodle+JupyterHub 連携システムの構築と運用」第1回
次へ:Linux と Moodle のインストールと設定

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?