{learnr}で課題の実行結果を提出する仕組みを作る
講義のオンデマンド化と課題
昨日に引き続き、担当しているRの講義に関することですが、来年度は授業をオンデマンドで展開することになりました。もともと、「教室が足りないからオンライン化 (ライブ・オンデマンド問わず) できる授業はしてくれ」という要請1が来ていて、すでに他の講義をオンデマンドで提供していることもあり、Rの講義もオンデマンド化することにしました。
現在も、講義は教室で行っていますが、(「単位の実質化」とかで) 毎週出している課題は、Rプログラムを書いて、LMS (Google Classroom) に提出してもらう形式です。来年は、それを一歩進めて、動画+ハンズオン+課題を {learnr} パッケージの枠組みでできないかと考えています。実際、社会人向けに3年ほどRの研修コンテンツを販売していて、そこでは {learnr} のコンテンツの中に動画を埋め込んで、shinyapps.ioでホスティングしていました。
そのため、やりたいことの大半は実現できると思っていましたが、唯一課題と考えていたのが課題でした🤪進次郎構文ではなく、「(私が解決しないといけないと思っていた) 課題が、(学生に課す) 課題 (をどうやって提出させるか) でした」という意味です。今度は岡田構文になっていますが。おーん🤪
課題の実行結果を保存して出力するには
{learnr} の中で問題を出して、それに (授業時間外に) 解答させることはできますが、その結果をどうやって出力し、提出するかということを解決する必要がありました。調べる限り、{learnr} 自身に、結果をメールで送信したり、ファイルとしてダウンロードする仕組みはなさそうでした。それらしい機能を持った {learnr} を拡張するようなパッケージもありますが、ドキュメントから (私の能力不足で) 使い方を読み取れないのと、メールで提出されても成績管理がしづらいので、候補からは外れます。
- send_mail_learnr: Send your learnr submissions by email in SciViews/learndown
- learnitdown - R Markdown and Bookdown Additions for Learning Material • learnitdown
他の、R/Examsプロジェクトが開発しているパッケージも、Rで教育コンテンツを提供し、課題の提出を受け付ける機能がカバーされていますが、こちらはMoodleなどのLMSと連携させることが前提で、この授業のためだけに大学の標準のLMSと違うものを使うのは、教員、学生ともに無駄が多いと感じています。
{learnrhash} によるハッシュ化
そんなこんなで、色々調べていたら、ついに以下の記事を見つけました。
- shiny - How to score a learnr tutorial in R by the author? - Stack Overflow
- GitHub - rundel/learnrhash
{learnr} 内の実行状態はShinyのセッション情報として保存されていて、get_tutorial_state()
関数でアクセスできますが、それをどうやって出力して、学生自身で取得して提出できるか、というところが課題でしたが、上記の記事をもとに、{learnrhash} パッケージを使い、セッション情報をハッシュ化して画面に表示することができました。
セッションをハッシュ化する
```{r eval=TRUE, context="server"}
learnrhash::encoder_logic()
```
```{r encode,eval=TRUE,echo=FALSE}
learnrhash::encoder_ui()
```
ハッシュ化されたセッションを復元する
```{r eval=TRUE, context="server"}
learnrhash::decoder_logic()
```
```{r decode,eval=TRUE,echo=FALSE}
learnrhash::decoder_ui()
```
Google Classroomには、Googleフォームと組み合わせて課題を出す機能があるので、ハッシュ化された回答をフォームに貼り付けて提出してもらう、という形式が実現できそうです。上図では {learnr} コンテンツ内でデコードしていますが、もちろん普通にコンソールからも復元できるので、採点も容易にできます。
おそらく、そんな感じで講義のオンデマンド化と合わせて、課題の提出・採点の効率化が実現できるのではないかと思っています。個人的には、そんなに毎週課題を出さなくても、授業内で完結するようにした方が、「大学生らしい」ことができる時間ができていいんじゃないか、とも思いますが。
長期的にはQuarto化、シングルページ化も
Quartoに {webR} と組み合わせた、シングルページでオンライン教材が作成できる拡張機能があるようです。
こちらも、RとPythonの両方に対応しているので、将来的にはRによるオンライン教材作りのスタンダードになっていくのかもしれません。
tutorial.helpersパッケージ
記事を投稿した後もいろいろ調べていたら、{tutotial.helpers} というパッケージが見つかりました。
- CRAN: Package tutorial.helpers https://cran.r-project.org/web/packages/tutorial.helpers/index.html
- Enable Students to Download Their Tutorial Answers • tutorial.helpers https://ppbds.github.io/tutorial.helpers/articles/downloads.html
このパッケージには、上記のリンク先にあるように、回答の情報をHTMLとしてダウンロードできる仕組みがありました。こちらを使う手もありそうです。ただ、HTMLなので目視が中心になる (rvestなどで解析してもいいですが) こと、正解か不正解かの TRUE
/ FALSE
が出力に含まれないところが、ちょっと不便かなとも思いました。
-
他の大学でもそんなことがあるんですかね? ↩︎