0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MoodleでMarkdownを使って教材を作りたかったのでLessonMarkを作った

0
Posted at

はじめに

Moodleで技術系の教材を作っていると、

Markdownでそのまま書けたら楽なのに

と思うことがあります。

Markdownなら、見出し、箇条書き、コード、表、リンク、画像などを比較的簡単な記法で書くことができます。

特にプログラミング教材では、

for i in range(5):
    print(i)

のようなコードを頻繁に扱うため、Markdownとの相性はかなり良いと思います。

また、教材をMarkdownで持っておけば、

  • VS Codeなどのエディタで編集できる
  • Gitで差分を管理できる
  • GitHubなどで共有できる
  • AIに草稿を作らせやすい
  • Moodle以外でも再利用しやすい

といった利点があります。

一方、Moodle上で教材を作成する場合は、基本的にはHTMLを意識したエディタを使うことになります。

もちろん、それで困らない教材もあります。

しかし技術系の文章を継続して作っていると、

教材の原稿そのものをMarkdownで持ちたい

と思うようになりました。

そこで作ったのが LessonMark です。


.md をアップロードするだけでは足りない

最初に考えたのは、MarkdownファイルをMoodleへアップロードして表示するだけの仕組みでした。

例えば、

lesson01.md
        ↓
Moodle
        ↓
HTMLへ変換して表示

です。

これでも教材をMarkdownで管理することはできます。

しかし、実際に使うことを考えると、すぐに問題が出てきます。

例えば誤字を一文字直したいだけでも、

VS Codeで開く
↓
修正する
↓
保存する
↓
Moodleへ再アップロードする

という作業が必要になります。

これは教材を継続的に修正していくにはかなり面倒です。

そこでLessonMarkでは、

Markdownファイルを表示できる

ことよりも、

Moodleの中でMarkdown教材そのものを作成・編集できる

ことを重要な要件にしました。


Markdownをその場で編集して、その場で確認したい

LessonMarkの編集画面では、

┌──────────────────┬──────────────────┐
│ Markdown Editor  │ Preview          │
│                  │                  │
│ # Python入門     │ Python入門       │
│                  │                  │
│ ```python        │ [code block]     │
│ print("Hello")   │                  │
│ ```              │                  │
└──────────────────┴──────────────────┘

という形で、

左側でMarkdownを編集し、右側で学生が見る状態を確認する

ことができます。

画面が狭い場合には、EditとPreviewを切り替えて利用できます。

つまり、

書く
↓
確認する
↓
直す
↓
保存する

という教材制作の流れを、Moodleの中だけで完結できるようにしました。


保存する正本はHTMLではなくMarkdown

LessonMarkで特に重視したのがここです。

MarkdownをHTMLへ変換して保存するのではなく、

Markdown sourceそのものを教材の正本として保存する

ようにしています。

例えば、

# 条件分岐

Pythonでは `if` を使って条件分岐を記述します。

```python
if score >= 80:
    print("Good")
```

と書いた場合、このMarkdown sourceをそのまま保持します。

表示時には、

Markdown source
      ↓
Renderer
      ↓
安全化
      ↓
HTML
      ↓
学生画面

という処理を行います。

そのため、後から編集画面を開いても、元のMarkdown記法が失われません。

これは将来的に、

Git
diff
AI
VS Code

などと連携するためにも重要だと考えています。


Previewと学生画面で別の処理をしない

もう一つ重要にしたのが、

Previewと学生が実際に見る画面で同じレンダリング処理を使う

ことです。

Previewだけきれいに表示されても、保存した後の学生画面で違って見えたら困ります。

そこで、

Markdown
    ↓
共通Renderer
    ↓
安全化されたHTML
       ├─ Preview
       └─ Student view

という構成にしました。

つまり教師がPreviewで確認したものと、学生が見るものができるだけ一致するようにしています。


技術教材で使いたかった機能

最初のバージョンでは、一般的なMarkdown記法に加えて、教材で使いやすい表示を意識しました。

例えば、

  • 見出し
  • 箇条書き
  • 番号付きリスト
  • リンク
  • 画像
  • inline code
  • fenced code block
  • syntax highlighting
  • blockquote
  • NOTE
  • TIP
  • WARNING
  • 自動目次

などです。

例えば、

> [!NOTE]
> この部分は補足説明です。

のように書けば、教材上ではNOTEとして区別して表示できます。

単にMarkdownをHTMLへ変換するだけではなく、

教材として読みやすいMarkdown表示

を目指しています。


画像はMoodleのFile APIで管理する

教材では画像も必要になります。

LessonMarkでは、画像を独自のディレクトリへ保存するのではなく、MoodleのFile APIを利用しています。

これは、

  • Moodleの権限管理
  • course module context
  • backup / restore
  • course duplication

などと整合させるためです。

Markdown本文だけ移動できても、

本文はある
画像がない

では教材として困ります。

そのため最初のリリースから、本文と関連ファイルをMoodleのbackup / restoreで扱えることも完成条件にしました。


.md のimportとexport

既にMarkdown教材を持っている場合には、.md ファイルを取り込めます。

lesson.md
   ↓ import
LessonMark Editor
   ↓
修正
   ↓
Preview
   ↓
保存

逆に、LessonMarkで作った教材を .md としてexportすることもできます。

つまり教材をMoodleの中だけに閉じ込めないようにしています。

現時点ではimportは一度限りです。

元のMarkdownファイルやGit repositoryと継続的に同期する機能は、まだありません。


AIとの相性もかなり良い

このプラグインを考え始めた理由の一つに、AIの存在もあります。

生成AIに技術教材の草稿を作らせるとき、

Markdownで出力してください

と指定するのは非常に自然です。

例えば、

Pythonのfor文について、
説明
コード例
注意点
演習問題3問
の構成でMarkdown教材を作成してください。

と指示する。

すると、

AI
↓
Markdown
↓
LessonMark
↓
教師が編集
↓
Preview
↓
学生へ公開

という流れが作れます。

もちろんAIが生成した教材をそのまま公開するのではなく、人間が確認・修正する必要があります。

そのときMarkdownであれば、修正もしやすく、差分も確認しやすい。

今後、教材制作にAIを使う場面はさらに増えると思います。

そう考えると、

Markdownを教材の中間形式として扱えること

には以前より大きな意味があるように感じています。


最初からGit連携までは入れなかった

将来的には、

GitHub
   ↓
Markdown教材
   ↓
LessonMark
   ↓
Moodle

という形も考えています。

しかし最初からそこまで実装すると、かなり大きなプラグインになります。

そのためv0.1では、

MoodleだけでMarkdown教材を完成できる

ことを優先しました。

現在のLessonMarkは、

新規作成
編集
Preview
import
export
画像管理
学生表示
backup / restore

までを一つのResourceとして扱います。

Git同期、複数Markdownによる章構成、AI-assisted authoringなどは、今後の候補として分離しています。


Moodle Marketplaceへ申請した

LessonMark v0.1.0として一通り実装し、現在はMoodle Marketplaceへ公開申請を行っています。

Moodle Plugin Dashboardでは、

LessonMark
mod_lessonmark
Submitted for review

という状態です。

審査が通れば、Moodle Marketplaceからインストールできるようになります。

ソースコードはすでにGitHubで公開しています。

現在のリリースでは、

  • Markdown source保存
  • Edit / Preview
  • 学生向け表示
  • 画像
  • import / export
  • backup / restore
  • course duplication
  • security / accessibility checks
  • GitHub ActionsによるCI

まで実装しています。


まとめ

最初に欲しかったのは、かなり単純なものでした。

MoodleでMarkdownを使って教材を書きたい。

しかし考えてみると、

Markdownファイルを表示する

だけでは足りませんでした。

実際に教材制作へ使うには、

Moodleで新規作成できる
↓
その場で編集できる
↓
Previewできる
↓
Markdown sourceを失わない
↓
画像も扱える
↓
backup / restoreできる

ところまで必要でした。

そこでLessonMarkでは、

Markdownを単なる入力形式ではなく、教材の正本として扱う

ことにしました。

今後は、

複数Markdown
教材bundle
章構成
Git同期
差分管理
AI支援
翻訳支援

などへ発展させる余地があります。

ただ、まずは、

Moodleの中だけでMarkdown教材を作って、直して、確認して、公開できる

ところまでを最初の一区切りとしました。

Moodleで技術教材を作っていて、

Markdownで書けたら楽なのに

と思ったことがある人には、少し試してもらえるものになればと思っています。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?