Moodle と JupyterHub を用いた Web 型プログラミング教育環境の改善
事例: 複数科目・複数講師による Nbgrader の共同利用
齊藤 智也 1) , 王 躍 1) , 西井 淳 2) , 末長 宏康 1) , 大平 康旦 1) , 西村 世志人 1) , 金山 知余 1) ,村永 聡 1) , 爲末 隆弘 1) , 岡田 耕一 1) , レール マルク 1)
1) 山口大学 情報基盤センター2) 山口大学 大学院創成科学研究科
info-cc@ml.cc.yamaguchi-u.ac.jp

Case Study of Improvement of Web-based Programming
Educational Environment using Moodle and JupyterHub: Shared
Use of Nbgrader by Multiple Subjects and Multiple Instructors
Tomoya Saito1) , Yue Wang1) , Jun Nishii2) , Hiromichi Suenaga1) , Yasuaki Ohira1) ,Yoshito Nishimura1) , Chiyo Kaneyama1) , Satoshi Muranaga1) , Takahiro Tamesue1) ,Koichi Okada1) , Marc Loehr1)
1) Center for Information Infrastructure, Yamaguchi Univ.
2) Graduate School of Sciences and Technology for Innovation, Yamaguchi Univ.

概要
山口大学情報基盤センターでは、Moodle といくつかの周辺システムを連携させた学習管理システムを整備・運用している。Moodle 経由で活用する JupyterHub は、全学部を対象としたデータサイエンス関連科目等において標準的なプログラミング演習環境として期待されている。特に、JupyterHub の機能拡張の一種である Nbgrader が持つ課題の配布・回収・採点の機能が注目されている。しかしながら、従来のシステムでは多数の科目が自由にかつ同時に JupyterHub 及び Nbgrader を利用するための仕組みを備えていない。本稿では、Moodle と JupyterHubを連携させたプログラミング教育環境を多数の授業科目が共同利用する場合に生じる課題、並びにそれらの改善事例について述べる。

JupyterHub は、これらの授業科目における標準的な

1 はじめにプログラミング演習環境として期待されている。医学

近年、大学等における情報科学の関連科目を中心と部及び理学部では、その他の共通教育科目及び専門教

して、Jupyter Notebook 及び JupyterHub [1] の活用

育科目においても JupyterHub が活用されている。

が広まりつつある [2]。特に、Moodle 等の学習管理シ

山口大学情報・データ科学教育センターは、Jupyter-

ステムと JupyterHub を連携させたプログラミング教

Hub の拡張機能である Nbgrader [9, 10] が持つ課題の育環境の構築が進められている [3–5]。

配布・回収・自動採点の機能に着目し、前述のデータ

山口大学情報基盤センターでは、Moodle といく

サイエンス関連科目、及び理学部等の専門教育科目につかの周辺システムを連携させた学習管理システム

おける Nbgrader の活用を検討している。Nbgraderを整備し、全学的な講義支援サービスを運用していを大学の授業に導入した事例は存在するが [11]、先る [6,7]。現行の Moodle 3（バージョン 3.9）システム

行事例では単独もしくは少数の教職員が各自の授業

は Kaltura、Maxima、VPL（Virtual Programming

科目に利用しているのみである。複数の学部・学科

Lab）、Learning Locker に加え、JupyterHub とも連にわたり任意の授業科目が自由に JupyterHub 及び携している [8]。

Nbgrader を利用可能な教育環境の構築事例は報告さ山口大学では、全学部に「データサイエンス技術」
等の専門教育科目を設けている。Moodle と連携した

434
433

れていない。
従来の JupyterHub 及び Nbgrader は、多数の科目

-XS\WHU+XEεητϞ
ࣰߨγʖώ
+7736
ཤ༽ं

0RRGOHγʖώ-XS\WHU+XEγʖώ0RRGOHαʖη

+7736

֐෨ςʖϩ

-XS\WHU 1RWHERRN-XS\WHU 1RWHERRN+7736
ʤ/7,࿊‫ܠ‬ʥՀ૟γʖώ

-XS\WHU+XEՀ૟ϋρφϭʖέ

-XS\WHU 1RWHERRN

6ZDUPϜϋʖζϡʤϨʖξʥ

6ZDUPϜϋʖζϡʤϟϱώʥϓΟ΢ϩγʖώʤ1)6γʖώʥυʖνϗʖηγʖώ'RFNHUγʖϑη'RFNHUαϱτψ೟ৄγʖώʤ/'$3γʖώʥ

図 1: JupyterHub システム

がシステムを同時に利用しながら演習を進めるための境に仮想サーバとして構築されている。仮想サーバ仕組みを備えていない。加えて、Nbgrader では、各の OS は Rocky Linux 8.6、主要なソフトウェアの各教員が担当／非担当を問わず全科目・全受講生に関連バージョンは JupyterHub 1.4.2、Nbgrader 0.6.1、及するファイル（課題内容や提出物等）の閲覧・書き込

び MariaDB 10.5.15 である。JupyterHub の標準のみが可能である。この仕様は、多数の学部・学科の科

データベースは SQLite であるが、クライアント間の目で活用される環境においては、情報セキュリティ及排他制御の仕組みを備えていないため、複数の実行

びプライバシー保護の側面で問題となる。

サーバ間でデータベースを共同利用する形態には適しそこで我々は、システム設定ファイルの修正、利用者ごとの Jupyter 環境を起動するクラス（プログラム）ていない。そのため、本システムでは MariaDB を採用している。

の修正、並びに Moodle から取得した情報の活用によJupyterHub にはユーザ認証やコンテナ起動のたり、任意の授業科目・研修会等が自由に JupyterHub

めの各種クラスが用意されており、各々のクラスは及び Nbgrader を活用する仕組みを実現した。また、Python のパッケージとして提供されている。本シスNbgrader のソース・コードの修正により、Nbgrader

テムでは、LTI（Learning Tools Interoperability）を用が活用する共有ディレクトリのアクセス権限を改善

いて Moodle と JupyterHub を連携させるため、LTIした。これらの改善により、システム管理者が授業

認証クラス（LTIAuthenticator クラス）を用いている。

科目・授業担当者・受講生等の情報をその都度設定す

ただし、4.1 節で示すように、我々は LTIAuthenticator

ることなく、多数の科目が自由に JupyterHub 及びクラスに独自の改修を施している。

Nbgrader を活用することが可能になった。Nbgrader

Moodle 側に特別なプラグイン等は導入せず、Moo-で取り扱われる課題や提出物等については、各教員はdle 3 に付属の「外部ツール」プラグインに JupyterHub

自身の担当科目に関するデータのみ読み書きが可能にのサーバに関する情報を登録している。Moodle コー

なった。各学生は、受講科目の課題内容及び自分宛て

スの教師は、各自の Moodle コースに外部ツールのイのフィードバック情報の読み込み、並びに自身が作成

ンスタンスを貼り付けておく。学生がこのインスタした提出物についての読み書きのみが可能になった。

ンスをクリックすると、JupyterHub システムの Web
サイトにジャンプする。ことのき、LTI 認証の働きに

2 JupyterHub 及び Nbgraderより自動的に JupyterHub へのログインが完了する。

Moodle との間の LTI 認証のみを有効にしているた

2.1 JupyterHub
図 1 に、山口大学における JupyterHub システムの概要を示す。本システムは JupyterHub サーバ、実め、利用者は Moodle を経由せずに JupyterHub にログインすることはできない。

行サーバ、ファイルサーバ、及びデータベースサーバ

本 シ ス テ ム で は 、利 用 者 ご と の Jupyter 環 境 をから構成される。これらのサーバは、オンプレミス環

JupyterHub サ ー バ と は 独 立 し た 実 行 ノ ー ド 上 に

435
434

Docker コンテナとして起動する。Docker コンテナの起動・終了等を管理するためのコンテナオーケスト
レーションツールとして、Docekr Swarm を採用している。JupyterHub サーバ及び実行サーバでは Swarm
マネージャが起動している。リーダー役の Swarm マ
ネージャはメンバの中から 1 つを選択し、そのメンバに Docker コンテナを起動させる。
利 用 者 の Jupyter 環 境 を 起 動 す る 仕 組 み は 、Spawner クラスとして提供される。Docker Swarmに対応するための SwarmSpawmer クラスでは、利用者の Docker コンテナ内におけるユーザ・アカウント

図 2: Nbgrader の課題一覧

は一律に「jovyan」となるため、各利用者のデータをファイルサーバに記憶する際に、ファイル等の所有者を実際のユーザ・アカウントに設定することが困難である。そこで我々は、実際のユーザ・アカウントとの対応付けが可能な SystemUserSpawner クラスとSwarmSpawner クラスのソース・コードを応用した独自の Spawner クラスを作成している。大学の認証
サーバと連携することにより、各利用者が Moodle 等を利用する際のユーザ名、ユーザ ID に加え、教職員／
学生の別をアクセス権限の設定に活用している。これらの改修は、システム管理者が各利用者のファイルを

図 3: Nbgrader の提出物一覧

識別しやすくするためだけでなく、後述する Nbgraderの問題点の改善のためでもある。

2.2 Nbgrader

本研究に関連する項目を抜粋したものである。共有

Nbgrader は、JupyterHub において課題の配布・回

ディレクトリのパスはシステムのすべての利用者に共収・採点を効率的に行うための機能拡張である [9,10]。

通した設定内容となり、運用中に変更されることは稀

図 2 及び 3 は、教師側の Nbgrader の画面例である。

である。従来のシステムでは学生向けに定義される設

図 2 は課題一覧の画面を示している。教師はこの画面

定項目は共有ディレクトリのパスのみで、その他の設を利用して、課題（Notebook ファイル）の作成、課題

定項目は主に教師用の設定ファイルに記載される。たの公開、提出物（提出された Notebook ファイル）のだし、個人ディレクトリのルート、成績ファイルのパ取得、及びフィードバックの作成・公開の操作を行う。

ス、及びコースの学生一覧は授業科目ごとに異なるた

設定の難易度は高いが、自動採点の機能も有している。

め、教師は授業の度に設定内容を書き換えなければな

図 2 において、教師が提出数の数字をクリックするらない。

と、図 3 に示す提出物一覧の画面が表示される。この多数の科目が自由に JupyterHub 及び Nbgrader を

画面では、個々の提出物について採点、及びフィード

使用するためには、授業科目毎の設定ファイルを自動バックの作成・公開が可能である。

生成する仕組みが必要である。

Nbgrader の公式ドキュメントでは、JupyerHub の

3 従来のシステムの課題
3.1

設定ファイルの記載内容によって、Nbgrader のコー

複数科目への対応の問題点

ス毎に Formgrader サービスを起動し、複数の科目に

Nbgarder を利用する場合、システム設定ファイルの対応する手順が紹介されている [12]。この手順では、パス（例えば「/etc/jupyter」）、及び教師のホームディ

システム管理者は JupyeteHub の設定ファイルを編集

レクトリ以下の所定の場所に「nbgrader config.py」とし、コース毎の Formgrader に対し、専用の通信ポーいう設定ファイルを作成する必要がある。図 4 は、

ト番号、及びそのポート番号にアクセス可能なユー「nbgrader config.py」に記載すべき設定項目の中から

ザ（教師及び学生）の一覧を記述する。大学全体の

436
435

‫༙ڠ‬υΡϪέφϨ͹ϩʖφF([FKDQJHURRW  H[FKDQJH
αʖη໌
F&RXUVH'LUHFWRU\FRXUVHBLG  FRXUVH‫ݺ‬ਕυΡϪέφϨ͹ϩʖφF&RXUVH'LUHFWRU\URRW  KRPHLQVWUXFWRUFRXUVH੔੹ϓΟ΢ϩ͹Ϗη
F&RXUVH'LUHFWRU\GEBXUO VTOLWHKRPHLQVWUFXWURUFRXUVHJUDGHERRNGE
αʖη͹ָਫ਼Ҳལ
F&RXUVH'LUHFWRU\GEBVWXGHQWV >
GLFW LG UDDILUVWBQDPH -LURODVWBQDPH <RVKLGD 
GLFW LG UDDILUVWBQDPH +DQDNRODVWBQDPH 7RNLZD 
GLFW LG UDDILUVWBQDPH 6DEXURODVWBQDPH .RJXVKL @と、課題の Notebook ファイルは教師のホームディレ
クトリの配下から、コース・ディレクトリの配下にある outbound ディレクトリの中にコピーされる。教師の個人ディレクトリには一般にコース名が使用され、その中に課題ごとのファイルが保存される。標準では、学生の個人ディレクトリにはコースの区別が無く、また、ホームディレクトリそのものが個人ディレクト
リとなる。学生が課題の取得の操作を行うと、ホーム
ディレクトリの直下に課題名のディレクトリが作成さ

図 4: Nbgrader の設定ファイルの一部れ、取得したファイルはその中に保存される。
学生は取得した Notebook ファイルを編集して解答

多数の授業で Nbgrader を用いる場合、システム管理などを記入した後、課題提出の操作を行う。このとき、者は JupyerHub を使用し得るすべての授業に対して

Notebook ファイルは提出物として、inbound ディレ

Formgrader のポート番号を設定し、それらの科目のクトリの中にコピーされる。教師が提出物の回収の操受講生を記述しなければならない。学期途中での受講作を行うと、提出物の Notebook ファイルが inbound

生の増減、及び Nbgrader の利用科目の増加に応じてディレクトリから教師の個人ディレクトリにコピー

設定ファイルを編集する必要があるほか、設定の変更される。これにより提出物の手動／自動採点が可能にをシステムに反映させるためには、JupyterHub サーなる。

ビスの再起動が必要になる。また、この手順では、コー教師が作成・公開した各学生へのフィードバック・スの全参加者の Jupyter 環境から該当の Formgrader

ファイルは、feedback ディレクトリに保存される。学の通信ポートにアクセス可能にする必要がある。設定

生は、自分宛てのフィードバックが公開されている場

ファイルに登録する科目数に応じて多数の通信ポート

合には、JupyterHub の画面においてそれらの情報をを開き、そのポートへの接続要求を受け入れなければ閲覧することが出来る。

ならない。このような仕組みは、重大なセキュリティ・
ホールになる恐れがある。
以上の理由により、本研究では公式ドキュメントに教師と学生を含む全ユーザが同一のユーザ・グループに所属する必要があり、図 6 ではそのグループ名をおいて紹介されている手順は採用していない。

3.2

図 6 は、共有ディレクトリの所有者、グループ、及びアクセス権限を示している。なお、Nbgrader では

users としている。

共有ディレクトリの権限設定

Nbgrader では、教師・学生のホームディレクトリ

従来の Nbgrader では、共有ディレクトリの権限設に中に配置される個人ディレクトリと、共有ディレク

定に大きな問題点がある。教師が自由に Nbgrader のトリの間のファイルのやり取りによって課題の配布・コースを作成するため、exchange ディレクトリはすべ回収等の機能が実現されている。図 5 は、共有ディレてのユーザからの書き込みが許可されている。Linux

クトリの概要を示している。なお、共有ディレクトリ

系 OS では、いわゆる「777」のディレクトリについの利用形態及びアクセス権限に焦点を当てるため、教ては、全ユーザがその中にあるサブディレクトリを削師の個人ディレクトリ及び学生の課題ディレクトリの除することが可能である。教師はコマンド操作により詳細は省略している。

コース・ディレクトリを作成するため、JupyterHub のNbgrader では、課題に関連するファイルは共有

端末（ターミナル）等を用いてコマンドライン上からディレクトリ（図 5 中の exchange）の配下に作成さ

exchange ディレクトリを操作する。コース設定や課れるコース・ディレクトリ（図 5 中の course1 及び題の設定の不備により、教師が既存のコースのディレ

course2）の中にまとめて記憶される。標準ではコー

クトリを削除するケースもあるが、このとき、操作をス・ディレクトリは自動的に作成されないため、教師間違えると他の授業科目のコースを削除してしまう。

は JupyterHub 上で端末（ターミナル）を起動した後、学生にも JupyterHub の端末（ターミナル）の利用を

コマンド操作により任意の名称のコース・ディレクト

許可している環境においては、学生がコース・ディレ

リを作成する。

クトリを削除することも可能である。

JupyterHub 上で教師が課題の公開の操作を行う

437
436

inbound ディレクトリは全ユーザから書き込み可能ָਫ਼ʤVWXGHQWʥ‫ࢥگ‬ʤLQVWUXFWRUʥ
1EJUDGHU͹‫༙ڠ‬υΡϪέφϨ
ʞH[FKDQJHᶉ ϓΡʖχώρέ
ʞLQVWUXFWRU ͹ޮ֋ᶊ ϓΡʖχώρέ͹खಚFRXUVHʞVWXGHQW

IHHGEDFNOHVVRQFRXUVHᶈ ՟ୌ͹րर

LQERXQGᶇ ՟ୌ͹఑ड़

RXWERXQGᶅ ՟ୌ͹ޮ֋FRXUVHʀʀʀ

OHVVRQOHVVRQʀʀʀ

FRXUVHʀʀʀᶆ ՟ୌ͹खಚ

OHVVRQʀʀʀˠʰFRXUVHʱ‫;ٶ‬ʰFRXUVHʱͺ1EJUDGHUͶ͕͜Ζαʖη໌ɽʰOHVVRQʱ‫;ٶ‬ʰOHVVRQʱͺFRXUVH͹஦͹՟ୌ໌ɽ

図 5: Nbgrader の共有ディレクトリ

であるが、ユーザはこのディレクトリ内にあるファイ

ʞH[FKDQJH

ルの名称等を取得できないため、すべての提出物を一FRXUVHURRWURRW 
LQVUXFWRUXVHUV ŞŞ

括削除することはできない。また、inbound に保存さ

IHHGEDFNLQVWUXFWRUXVHUV ŞŞŞŞ

れる提出物のファイル名は課題名、ユーザ名、提出日

LQERXQGLQVWUXFWRUXVHUV ŞŞ

時に加えてランダムな文字列が追加されているため、

RXWERXQG

LQVWUXFWRUXVHUV ŞŞ

ユーザは特定のファイルの上書きや削除を行うことは

OHVVRQ

出来ない。

ʀ
ʀ
ʀ

feedback ディレクトリについてはグループ・ユーʀʀʀ

OHVVRQザもその他のユーザも、ディレクトリ内にあるファイ
図 6: 共有ディレクトリの権限設定

ルの名称等を取得することは出来ない。提出物と同様に、フィードバック・ファイルのファイル名にもランダムな文字列が使用されている。学生側のユーザ・イ
ンターフェースは、データベースを介してその学生宛

由して JupyterHub にログインすると、本クラスは、てのフィードバック・ファイルの名称を取得する。

Moodle から引き渡されたパラメータの値を確認する。

Nbgrader を多数の科目で利用するためには、共有

Moodle コースにおいて「教師」のロールを持つユーザ

ディレクトリの権限設定を改善しなければならない。

の場合、roles パラメータの値が「Instructor」となっ

また、学生の利用環境ではホームディレクトリの直下ている。その場合、Moodle サーバからコースの学生に課題名のディレクトリが作成されるため、複数の科

1 ）一覧を取得する（図 7⃝。

目で課題名が重複した場合には課題提出の操作に不具

次に、本クラスは大学の認証サーバ（LDAP サーバ）合が生じる。そのため、個人ディレクトリの作成規則

から、利用者の認証サーバにおけるユーザ ID、及び教に関する改善も必要である。

2 ）
職員・学生の別を取得する（図 7⃝。大学の認証サー

バに登録されてないアカウント（Moodle の手動アカ

4 改善事例
4.1

ウント）が JupyterHub へのログインを試みた場合には、ここでエラーが発生し、ログインに失敗する。

複数科目に対応するための改善

続いて、本クラスは、利用者のホームディレクトリ

複 数 の 授 業 科 目 が 自 由 に JupyterHub 及 び

3 ）が存在しなければ新規に作成する（図 7⃝。ホーム

Nbgrader を利用するため、我々は LTI 認証クラス

ディレクトリを新規作成する場合には、認証サーバ取（LTIAuthenticator クラス）を独自に改修した。
図 7 は、作成した認証クラスの機能を示している。

得したユーザ ID を使用する。また、ユーザの教職員

利用者が Moodle コースに配置された外部ツールを経／学生の別に応じて、ディレクトリの所属グループを「teachers」もしくは「students」に設定する。

438
437

೟ৄγʖώ
ʤ/'$3γʖώʥ
0RRGOHγʖώ
0RRGOHαʖη֐෨ςʖϩᶆ Ϥʖδ৚ๅΝखಚ/'$3৏͹Ϥʖδ,'‫گ‬৮ҽʀָਫ਼͹พ
/7,࿊‫ܠ‬ͶΓΕ৚ๅΝఽୣϤʖδ໌
-XS\WHU+XE
αʖη঴ྲྀ໌
ߪࢥʙָਫ਼͹พ/7,$XWKHQWLFDWRUΝրरͪ͢ಢࣙέϧηᶅ 0RRGOHαʖη͹‫͍Ͳࢥگ‬Ηͻᶊ ‫ڧ؂‬ร਼Νઅఈ
Ϥʖδ໌
ήϩʖϕ
αʖη঴ྲྀ໌
ߪࢥʙָਫ਼͹พᶋ -XS\WHU‫ڧ؂‬Νًಊ‫ڧ؂‬ร਼͹஍Ͷ‫ͱ͏Ͱخ‬1EJUDGHU͹αʖη໌ɼ‫ݺ‬ਕ༽υΡϪέφϨ͹Ϗηɼ
1EJUDGHU͹અఈϓΟ΢ϩ͹
ϏηΝઅఈཤ༽ं͹-XS\WHU‫ڧ؂‬ಢࣙͶրरͪ͢
6SDZQHUέϧηणߪਫ਼͹ҲལΝखಚᶇ ϙʖϞυΡϪέφϨ͹ࡠ੔ᶈ 0RRGOHαʖη͹ָਫ਼Ͳ͍Ηͻָਫ਼޴͜͹‫ݺ‬ਕ༽υΡϪέφϨΝࡠ੔ᶉ 0RRGOHαʖη͹‫͍Ͳࢥگ‬Ηͻαʖη঴ྲྀ໌Ν࢘༽͢ͱαʖηʀυΡϪέφϨΝࡠ੔ߪࢥ޴͜͹‫ݺ‬ਕ༽υΡϪέφϨΝࡠ੔ߪࢥ༽͹1EJUDGHUઅఈϓΟ΢ϩΝࡠ੔ʤणߪਫ਼ҲལΝ‫؜‬΋ʥϓΟ΢ϩγʖώʤ1)6γʖώʥ

図 7: 独自に改修した認証クラスの機能

続いて、利用者が Moodle コースの学生の場合、そ図 8 に、Moodle コースにおける教師・学生が共通でのコース用の個人ディレクトリが存在しなければ作成

読み込む設定ファイルの一部を示す。この設定ファイ

4 ）する（図 7⃝。

ルは「/etc/jupyter/nbgrader config.py」として配置

利用者が Moodle コースの教師で、かつ、共有ディされている。MOOCLECOURSE（Moodle コースのレクトリの配下に Nbgrader 用のコース・ディレクト

コース省略名）、COURSEROLE（利用者の Moodle

リが存在しない場合、コース・ディレクトリが新規にコース内におけるロール）、及び HOME（利用者の5 ）作成される（図 7⃝。コース・ディレクトリの名称

ホームディレクトリのパス）といった環境変数を用いには Moodle コースにおけるコース省略名を用いていることにより、ユーザ毎の個人ディレクトリのパスがる。山口大学では教務システムとの連携により、通常設定される。

の授業科目に対応する Moodle コースのコース省略名

従来のシステムでは教師・学生共に共有ディレクトには年度及び時間割番号が含まれるため、授業科目のリのパスは設定されるが、その他の設定項目について間で Nbgrader のコース名が重複することは無い。まは各教師が自身のホームディレクトリの配下に置いた、ホームディレクトリの配下にそのコースの個人

た設定ファイルに記載するため、利用者が学生の場合

ディレクトリが存在しない場合は新規に作成される。

には Nbgrader のコース名は設定されない。学生用の加えて、学生一覧の情報、及び成績ファイルのパスに

Nbgrader の画面では共有フォルダの配下にあるすべ関する情報等を含む教師用の Nbgrader 設定ファイルてのコース・ディレクトリを閲覧可能である。学生はを、そのコースの個人ディレクトリの中に作成する。

リストボックスに並ぶコース名の一覧の中から現在

新たな履修登録に伴う学生の新規登録や、履修登録のの授業に応じたコース名を選択し、その後に表示され取り下げに伴う学生の登録解除に対応するため、このる課題について各種の操作を行う。Nbgrader の利用

設定ファイルは教師が JupyterHub にログインする度科目が増加した場合、学生は大量に表示されるコースに新規に作成される。

名の中から正しいコース名を選択しなければならな

本クラスは、利用者の Jupyter 環境で用いられる環い。そこで本研究では教師・学生に共通の設定ファイ

境変数を設定した後、利用者の Jupyter 環境を起動す

ルを作成し、学生に対しても Nbgrader のコース名を

6 及び⃝
7 ）
る（図 7⃝。

設定している。これにより、Jupyter 環境の起動時にDocker Swarm 環境において利用者毎の仮想的なMoodle コースに対応した Nbgrader のコースが選択

Jupyter 環境を起動することと、Jupyter 環境内の済みとなり、他のコース名は表示されなくなるため、

ユーザ・アカウントとシステム外（ファイルサーバ等）

誤ったコースが選択されることが無くなる。

におけるユーザ・アカウントを対応させることを両立

図 9 に、教師用の Nbgrader の設定ファイルを示するため、我々は従来の SystemUserSpawner クラス

す。このファイルにはそのコースに応じた学生一覧、と SwarmSpawner クラスのソース・コードを応用し及び成績ファイルのパスが含まれている。このファた独自の Spawner クラスを作成している。

1 に示した動作により、教師がイルの内容は、図 7⃝

439
438

‫༙ڠ‬υΡϪέφϨ͹ϩʖφF([FKDQJHURRW  H[FKDQJH‫ڧ؂‬ร਼Ν࢘༽͢ͱαʖη໌Νઅఈ
F&RXUVH'LUHFWRU\FRXUVHBLG RVHQYLURQJHW 022'/(&2856(
ָਫ਼͹‫ݺ‬ਕυΡϪέφϨ͹ϩʖφΝઅఈ
F&RXUVH'LUHFWRU\URRW RVHQYLURQJHW +20(
RVHQYLURQJHW 022'/(&2856(
0RRGOHαʖηͶ͕͜Ζϫʖϩ͗‫ࢥگ‬͹৖߻
LIRVHQYLURQJHW &2856(52/(   ,QVWUXFWRU ‫༽ࢥگ‬͹‫ݺ‬ਕυΡϪέφϨ͹ϩʖφΝઅఈ
F&RXUVH'LUHFWRU\URRW RVHQYLURQJHW +20(
 QEJUDGHU RVHQYLURQJHW 022'/(&2856(

貴可能となることが望ましい。教師のユーザ・アカウ
ントが teacher1 のとき、コース・ディレクトリの所
有者及び所属グループは「instructor1:teachers」となる。feedback、inbound、及び outbound の各ディレ
クトリについては、所属グループを students としている。これは、Nbgrader では inboundd ディレクトリ
に対して、学生が授業担当教員の権限を用いて提出物

図 8: 改善後の共通の設定ファイルの一部を書き込む必要があるためである。
以上の対策により、本システムでは多数の科目が੔੹ϓΟ΢ϩ͹Ϗη
F&RXUVH'LUHFWRU\GEBXUO VTOLWHKRPHLQVWUFXWURUFRXUVHJUDGHERRNGE
αʖη͹ָਫ਼Ҳལ
F&RXUVH'LUHFWRU\GEBVWXGHQWV >
GLFW LG UDDILUVWBQDPH -LURODVWBQDPH <RVKLGD 
GLFW LG UDDILUVWBQDPH +DQDNRODVWBQDPH 7RNLZD 
GLFW LG UDDILUVWBQDPH 6DEXURODVWBQDPH .RJXVKL @

Ngrader を共同利用する場合における共有フォルダのアクセス権限の問題を改善している。

5 まとめ
本稿では、Moodle と JupyterHub を用いた Web 型
プログラミング教育環境の改善事例について述べた。

図 9: 改善後の教師用設定ファイルの一部

JupyterHub の機能拡張である Nbgrader を用いるこJupyterHub にログインする度に自動的に作成され、そとにより、教師は JupyterHub の GUI を経由して課題の時点での Moodle コースの学生一覧が適用される。

の配布・回収・採点が可能になる。従来のシステムで以上に示した仕組みにより、本システムでは多数のは、Nbgrader を利用するクラスのコース名及び受講者

科目が自由に JupyterHub 及び Nbgrader を利用する

一覧を JupyterHub のシステム設定ファイルに記述すことが可能になる。

る必要がある。また、複数の科目が同時に Nbgrader

4.2を利用する場合、システム設定ファイルにおいて科目

アクセス権限の改善

図 10 は 、改 善 後 の 共 有 デ ィ レ ク ト リ の 概 要ごとに固有の通信ポートを割り当てる必要がある。そを 示 し て い る 。「course1」と い う コ ー ス に お い てのため、任意の科目が自由に Nbgrader を利用するこは 、教 師 の 個 人 デ ィ レ ク ト リ の 例 は「/.../instruc-とが出来なかった。

tor1/nbgraer/course1」となり、学生の個人ディレク

そこで本研究では、システム設定ファイルを大学

トリの例は「/.../student1/course1」となる。学生用の教職員やシステム管理者が編集することなく、多の課題ディレクトリがホームディレクトリの直下に作数の科目が自由に Nbgrader を利用するための改善を成されることを防止し、複数の科目で Nbgrader が利行った。改善したシステムでは、利用者が経由した用される場合の利便性の向上を図っている。山口大学

Moodle コースに応じて、利用者ごとの Jupyter 環境

では教職員を対象とした JupyterHub に関する研修会に自動的にその授業に適した設定が施される。また、も開催されるため、教職員が Moodle コースでは学生

Moodle から取得した授業情報及び及び認証サーバかとして JupyterHub 及び Nbgrader を利用する機会もら取得したユーザ情報に基づき、利用者の所属グルーある。そのため、Moodle コースにおけるロールが教プ及び共有ディレクトリのアクセス権限が自動的に設師か学生かにより、個人ディレクトリのパスが別々と定される。これにより、従来のシステムが抱えていたなるように設定されている。

セキュリティ面の課題が改善されている。

図 11 は、改善後の共有ディレクトリの権限設定を示

山口大学では 2022 年度より、全学部において「デーしている。ルートとなる exchange ディレクトリの権

タサイエンス技術」等の専門教育科目のデータサイエ

限を「755」に変更し、教師や学生によるコース・ディンス関連科目が開講されている。本研究により開発さレクトリの削除を回避している。この権限設定では、れたシステムは、これらの授業科目における標準的な教師は手動でコースファイルを作成することが出来な

プログラミング演習環境として活用されている。

くなるため、前節で述べたように、Moodle コースか

今後の課題として、複数の教師が 1 つの科目を担当

ら取得した情報に基づいて自動的にコース・ディレクする場合における、Nbgrader の共有ディレクトリのトリが作成される。

アクセス権限に関する検討が挙げられる。

コース・ディレクトリは授業担当教員のみが書き込

440
439

ָਫ਼ʤVWXGHQWʥ‫ࢥگ‬ʤLQVWUXFWRUʥ

1EJUDGHU͹‫༙ڠ‬υΡϪέφϨ
ʞH[FKDQJHFRXUVHᶉ ϓΡʖχώρέ
͹ޮ֋

ʞLQVWUXFWRUᶊ ϓΡʖχώρέ
͹खಚ
IHHGEDFNʞVWXGHQWFRXUVHQEJUDGHU
LQERXQGFRXUVHᶈ ՟ୌ͹րर

JUDGHERRNGEʀʀʀFRXUVH

ʀ
ʀ
ʀ

ʀ
ʀ
ʀ

ʀ
ʀ
ʀ

FRXUVHOHVVRQOHVVRQᶅ ՟ୌ͹ޮ֋QEJUDGHUBFRQILJS\OHVVRQᶇ ՟ୌ͹఑ड़

RXWERXQGʀʀʀ

OHVVRQʀʀʀᶆ ՟ୌ͹खಚʀʀʀ

FRXUVHˠʰFRXUVHʱ‫;ٶ‬ʰFRXUVHʱͺ1EJUDGHUͶ͕͜Ζαʖη໌ɽʰOHVVRQʱ‫;ٶ‬ʰOHVVRQʱͺFRXUVH͹஦͹՟ୌ໌ɽ

図 10: 改善後の共有ディレクトリ

ʞH[FKDQJHFRXUVHURRWURRW ŞŞ

（2019）．

LQVWUXFWRUWHDFKHUV ŞŞŞ

IHHGEDFNLQVWUXFWRUVWXGHQWV ŞŞŞ

LQERXQGLQVWUXFWRUVWXGHQWV ŞŞ

RXWERXQG

LQVWUXFWRUVWXGHQWV ŞŞ

https://moodle.org/ （2022 年 10 月 5 日確認）．

[7] 齊藤智也 他，「山口大学における遠隔授業の増加に伴う授業支援システムの性能改善」，第 24 回学

OHVVRQ

ʀʀ
ʀ

ʀʀ
ʀ

Open-source learning platform，[6] Moodle:

術情報処理研究集会（2020）．

OHVVRQ[8] 齊藤智也 他，「山口大学における Moodle システ
ムの性能改善及び機能拡張」，日本ムードル協会
全国大会 （2022）．

図 11: 改善後の権限設定[9] nbgrader，https://nbgrader.readthedocs.
io/en/stable/ （2022 年 10 月 5 日確認）．
[10] Nik Klever，「Jupyter Notebook,

参考文献

HJub

and

Jupyter-Nbgrader」，https://klever.

JupyerHub，https:

hs-augsburg.de/nb/OWL/LAB_2020_02_//jupyter.org/hub （2022 年 10 月 5 日

Klever_Jupyter_Notebook_JupyterHub_

確認）．

Nbgrader.pdf （2022 年 10 月 5 日確認）．

[1] Project

Jupyter:[2] 山口健二，「Google Colaboratory による自宅学[11] 田浦健次朗，「Jupyterhub と nbgrader で授業・習教材の作成と遠隔授業方法の検討」，高等教試験・レポートを DX してみた件」，第 39 回大学

育と学生支援 : お茶の水女子大学紀要，vol.10，

等におけるオンライン教育とデジタル変革に関す

pp.59-63 （2019）．

るサイバーシンポジウム （2021）．

[3] 井関文一 他，「LTI カスタムパラメータによる[12] Using nbgrader with JupyterHub，https:

Moodle - JupyterHub 連携に関する研究」，日//nbgrader.readthedocs.io/en/stable/

本ムードル協会全国大会（2022）発表論文集，

configuration/jupyterhub\_config.html

pp.20–25 （2022）．

(2022 年 10 月 5 日確認)．

[4] 池田裕希 他，「Moodle と JupyterHub を用いた
プログラミング環境の構築」，情報処理学会第 84
回全国大会 （2022）.

[5] 石坂徹 他，「Moodle と Jupyter Notebook の連携によるプログラミング教育環境の構築」，日本ムードル協会全国大会（2019）発表論文集，pp.32–37

441
440