moodle の小テストを作成するスキル : hkob の雑記録 (383)

はじめに

hkob の雑記録の第383回目(通算780日目)は、moodle の小テストを簡単に作成する Notion AI のエージェント Skill を作成してみます。

きっかけは Haruki さんのポスト

これまでよく使うものはコマンドを作成してきましたが、それほどの頻度でないものはテキストベタがきでした。Haruki さんが以下のようなポストを書いていたので、私も少し Skill ベースに移行していこうかと思います。

PDF から moodle の小テストを作成

学生に過去問を配布してもなかなか勉強してくれないため、これまで過去問を moodle の小テストにして、授業中に解いてもらうことをやっていました。昨年度まではこれを手書きでやっていたのですが、穴埋め部分を解答欄から拾ってきて記述するのが面倒でした。

しかし、今の我々には Notion のパーソナルエージェントがいます。せっかくなので、これを Skill にしてしまいましょう。こんな感じにしてみました。

作成したスキル

真似をする人もいるかと思うので、テキストにもしておきます。

moodle の小テストでは穴埋め部分を{:SAC:=正答1~=正答2}という形で表記します。大文字小文字は区別したいので、SA ではなく SAC にしてください。まず、指定された PDF ファイルをそのまま Notion に書き出してください。なお、穴埋め部分はコードブロック内で 「(a)」 のような形で記載されています。この部分をページ後半の正答を使って、上記の moodle の小テスト表記に変更してください。

実行

私の試験はこのような形になっています。採点を簡単にするために、穴埋め形式になっています。

試験問題の一部

早速、このスキルを使って moodle の小テストを作成してもらいました。

小テストの作成 (初回)

ここに表示されているように {:SAC:=解答} で書いてとしたのですが、moodle のドキュメントから気を利かせて {:SA:=解答} とされてしまいました。そんなわけで、修正してもらうように依頼しました。

SA から SAC への書き換え

一度途中で止まってしまって心配しましたが、自分で失敗に気づき勝手にやり直してくれました。すごいですね。ちなみに先ほどの PDF の部分は以下のようになりました。ちゃんと解答欄から拾ってきた正答が入っています。あとは目で見て、別解を追加すればいい感じです。あとは moodle のエディタに貼り付けていきます。

from datetime import date, timedelta
from repeatdate.repeat_date import RepeatDate
import pytest

@pytest.fixture
def repeat_dates():
    return (
        # 2025年2月3日から1日ごとに5回繰り返す
        RepeatDate(date(2025, 2, 3), 5, days=1),
        # 2025年1月10日から隔日ごとに3回繰り返す
        RepeatDate(date(2025, 1, 10), 3, days=2),
        # 2025年2月21日から1週間ごとに4回繰り返す
        RepeatDate(date(2025, 2, 21), 4, weeks=1),
    )

def test_repeat_date(repeat_dates):
    # 開始日付(start_date)の文字列が正しいこと
    assert [str(x.start_date) for x in repeat_dates] == [
        '{:SAC:=2025-02-03}', '{:SAC:=2025-01-10}', '{:SAC:=2025-02-21}',
    ]
    # 繰り返し回数(repeat)が正しいこと
    assert [x.repeat for x in repeat_dates] == [{:SAC:=5}, {:SAC:=3}, {:SAC:=4}]
    # timedeltaオブジェクト(delta)が正しいこと
    assert [[x.delta](http://x.delta) for x in repeat_dates] == [
        {:SAC:=timedelta(days=1)}, {:SAC:=timedelta(days=2)}, {:SAC:=timedelta(weeks=1)~=timedelta(days=7)},
    ]
    # 繰り返し回数が 1 未満の場合は ValueError が発生すること
    with pytest.raises(ValueError):
        RepeatDate(date(2025, 2, 3), 0)

おわりに

これなら小テストを作成するのも面倒でなくなりますね。

hkob.notion.site