はじめに
hkob の雑記録の第383回目(通算780日目)は、moodle の小テストを簡単に作成する Notion AI のエージェント Skill を作成してみます。
きっかけは Haruki さんのポスト
これまでよく使うものはコマンドを作成してきましたが、それほどの頻度でないものはテキストベタがきでした。Haruki さんが以下のようなポストを書いていたので、私も少し Skill ベースに移行していこうかと思います。
NotionAIで「3層構造」意識してない人はホントに損してるから絶対に見て。
— Haruki | NotionCampusLeader (@Haruki_dev) 2026年1月17日
・スラッシュコマンドが大量
・エージェントのペルソナページが長文
・ペルソナページに別のページが階層設置されてる
これらに当てはまる人は画像の様な「3層構造」意識。
詳しいやり方をリプに書いたので保存必須かも。 pic.twitter.com/zs016Zvw5b
PDF から moodle の小テストを作成
学生に過去問を配布してもなかなか勉強してくれないため、これまで過去問を moodle の小テストにして、授業中に解いてもらうことをやっていました。昨年度まではこれを手書きでやっていたのですが、穴埋め部分を解答欄から拾ってきて記述するのが面倒でした。
しかし、今の我々には Notion のパーソナルエージェントがいます。せっかくなので、これを Skill にしてしまいましょう。こんな感じにしてみました。

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

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

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

一度途中で止まってしまって心配しましたが、自分で失敗に気づき勝手にやり直してくれました。すごいですね。ちなみに先ほどの 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)
おわりに
これなら小テストを作成するのも面倒でなくなりますね。