Moodleモジュールを「コースページに表示せずに利用可能にする」と編集権限のない教師にも表示されない
Moodle 4 のモジュール共通設定>利用には3つの選択肢
- コースページに表示する
- コースページで秘匿する (=教師, 編集権限のない教師には表示される)
- コースページに表示せずに利用可能にする
「コースページに表示せずに利用可能にする」は, デフォルトでは,
- URLを直接指定すれば学生含め全員に利用可能
- 学生には表示されない
- 教師には表示される(もちろん)
- 「編集権限のない教師」には表示されない (ので存在を知ることはできないが利用は可能)
編集権限のない教師は
- この「表示されせずに利用可能」にされたモジュール は,フォーラムやフィードバックにモジュールのURLを書いたり, AutoLinkを使ったりして学生に示して利用させることが可能
- 「秘匿」されたモジュールをコースページ上で見ることも,内容も見ることも可能
ので, 「コースページに表示せずに利用可能にする」の振る舞いは直観的でないと言えそう.ロールの再定義で何とかするのも難しい?
Moodle 4.1 LTSの課題フィードバックPDF注釈のための unoconv Document Converter の設定(含む日本語サポート)
オープンソースのLMSであるMoodleには, 学生がファイルを提出する課題 Assignment 活動がある. PDF注釈Annotate PDFによるフィードバックでは, そのファイルが一律にPDFに変換されて評定ページで教師に提示され, 教師はPDF注釈を加えて学生に返すことができる.
この過程にはいくつかの外部プログラム, ライブラリが介在しており, (特に日本語やHEICフォーマットをサポートする場合は)設定が複雑なのでこの記事で解説.
今まで, Moodle.org のフォーラムに記事を投稿してきた.
- (unoconv, 日本語) 課題の評定画面の課題ファイルの表示について https://moodle.org/mod/forum/discuss.php?d=338260 *「課題」ツールのPDF注釈機能について https://moodle.org/mod/forum/discuss.php?d=364983
この記事は hig3.hatenadiary.com の,最近のバージョンに対する更新.主に Moodle と Ubuntu の改善により手順が簡単になっている.
バージョン
- Ubuntu Server 22.04.3 Server LTS 要root
- Moodle 4.1.6 LTS 要admin
- unoconv 0.8.2
- python 3.10.12
- LibreOffice 7.6.4.1
流れ
PDF注釈は次のように進む.
- 学生が課題に提出したファイルがPDFならそのまま,PDF以外なら unoconv がPDFに変換する
- PDFは評定ページで ghostscript や pdftopnm によって表示される
- 評定ページで教師がPDFに書き込む操作をすると, tfpdf がPDF注釈が加える*1
この順で, 設定(手順)と確認(test)を示す.
PDFを表示する設定(PDF注釈を使用する設定)
Ghostscript のインストール
sudo apt install ghostscript
Moodle>Site Administration>Server>System paths>Path to ghostscript に /usr/bin/gs
と設定.
test0
Moodle の課題でPDF注釈によるフィードバックを有効化できる
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
学生が課題にPDFをアップロードし,教師が評定を開くと,PDF注釈のページが表示される.この段階で日本語も表示される.
poppler-utils のインストール(optional)
PDFのWebページ上の表示(のみ,注釈とは無関係)が高速化される.
sudo apt install poppler-utils
Moodle>Site Administration>Server>System paths>Path to pdftoppm に /usr/bin/pdftoppm
と設定*2.
提出ファイルのPDFへの変換を可能にする設定
unoconv のインストール
Universal Office Converter (unoconv) - MoodleDocsの手順の通り行う.
test
unoconv --version echo hello > afo.txt unoconv -f pdf afo.txt
Python 3.12でdeprecate…のような警告がでるが,放置してかまわないようだ.
Document Converter の有効化
Moodle>Site Administration>Plugin>Document converfters>Manage document converter で Unoconv を有効化, Google Drive など他のConverterより上位に置く.
test1
Moodle>Site Administration/Plugins/Unoconv で, Test unoconv path, Download the converted pdf test file でPDFファイルがダウンロードできるはず.
test2
PDF注釈を有効化した課題に afo.txt をアップロードすると,PDFに変換されたものが評定ページで表示される
提出ファイルのPDFへの変換を日本語対応にする設定
この段階で日本語テキストファイルを提出すると, PDFでは日本語部分が豆腐になる. そこで, unoconv に日本語フォントを与える.
Noto-CJK フォントの導入
sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
unoconv を service にしている場合は service を再起動する
sudo systemctl restart unoconv
test1
echo 日本語 > foo.txt unoconv -f pdf foo.txt
test2
課題にアップロードした日本語テキストファイルも変換される
変換されたPDFへの注釈を可能にする
PDF注釈
この状態でできるはず.
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
PDF注釈で, ツール群がPDF表示の上に現れ, テキストツールで英語を書き込み, Download feedback PDFで, その内容が書かれたPDFファイルがダウンロードできる.
日本語によるPDF注釈を可能にする設定
この段階では, 注釈でつけた日本語のノートはPDF注釈後に豆腐になる. これを防ぐには, Moodle, tfpdf に日本語フォントを与える必要がある.
sudo vi $(MOODLE)/config.php
で tfpdf の持っているフォントを指定する.
$CFG->directorypermissions = 0777; $CFG->pdfexportfont='kozminproregular'; //$CFG->pdfexportfont='kozminpromedium'; // On Debian?
HEIC 形式のファイルもPDFに変換する設定
HEICはiOSデバイスが使う高圧縮な画像フォーマット. この段階では, 拡張子.heicのHEIC形式ファイルを課題に提出すると, PDF注釈ページではPDFに変換されず, Some of the files can only be accessed through download.という注記が表示される.
そこで,HEICからjpegへの変換をサポートする ImageMagick または libheif で前処理する導入する
Imagemagick のインストール
sudo apt install imagemagick
type -a convert
libheif のインストール
sudo apt install libheif-examples
type -a heif-convert
test
scp somewhere:iPhone/photo.heic . convert photo.heic photo.jpeg
converter.php の書き換え
- $(MOODLE)/files/converter/unoconv/classes/converter.phpで定義される converter クラスのメソッド protected static function fetch_supported_formats() が返す拡張子の配列に, 要素 'heic' を追加する.
388c405 < self::$formats = array_unique($formats); --- > self::$formats = array_unique(array_merge($formats,['heic']));
- convertクラスのメソッド public function start_document_conversion(\core_files\conversion $conversion) で, 作業ディレクトリへの提出ファイルのコピーが終わった後, 拡張子が 'heic'である場合のみ, /usr/bin/convert でJPEG形式に変換する前処理を追加し, その後,JPEGをunoconvがPDFに変換するようにする
128c128,145 < } --- > } else { // hig > if( \core_text::strtolower($fromformat) == 'heic'){ > $jpgfilename=$uniqdir . '/' . $file->get_id() . '.jpg'; > $cmd=escapeshellcmd("/usr/bin/convert"). ' '. >// $cmd=escapeshellcmd("/usr/bin/heif-convert"). ' '. > escapeshellarg($filename) . ' '. > escapeshellarg($jpgfilename); > > $output = null; > $currentdir = getcwd(); > chdir($uniqdir); > > $result = exec($cmd, $output, $returncode); > $filename=$jpgfilename; > > chdir($currentdir); > touch($filename); > } > } // hig
このファイル converter.php は,Moodle 4.0 から変わっていなかった.
test
課題に拡張子 .heic のHEIC形式ファイルを提出すると, PDFに変換され,評定ページで表示される.
この方法でよい理由
クラスメソッドpublic static function supports($from, $to)
で, unoconv が拡張子$fromから$toへの変換をサポートしているかを判定している. このメソッドは結局, unoconv --show
で出力される, 対応拡張子リストを参照している.
これにはHEICは含まれないので, Moodleは変換しようとしない. また, 実際 unoconv
は HEIC形式ファイルを扱えない.
Imagemagick (convert) は HEIC形式を JPEG形式などに変換できるので, unoconv の前に convert で前処理することにした.
さらにやってもいいHEIC対応
Moodle > Site administration > Server > File types でHEICを登録すると, 提出ファイル一覧などで, 画像ファイルのアイコンが表示される.
Apache2のmod_authnz_ldapからmod_auth_openidcに移行する可能性
Apache2のmod_authnz_ldapで, .htaccess で AuthBasicProvider ldap
を指定して組織のLDAPサーバを引いてディレクトリごとに認可していた.
環境の変化により, LDAPが使えなくなるが, Google WorkspaceのOpenID Connectは使えるので, 3rd party module mod_auth_openidc を使ってそちらに移行することを検討.
以下の記事が詳しく, とても有用だった. qiita.com
複数のDirectoryの ~/.htaccess に別々のRequire claim email:user1@example.com email:user1@example.com
を書こうという話なのだが, 設定ファイルauth_openidc.conf
で設定される OIDCCookiePath は, 相対URLとして上位(一部分)でなければいけないという(文書化されていない)要求があるようだ. デフォルトの/
ならそうなる. 上の記事では, LocationとOIDCCookiePathを同じにしている. Locationが1個なら, それも可能な設定.
HEIC対応のImageMagickをCentOS7.9にインストール
普通にyumでインストールするにはCentOS7.9 は古すぎる. 対応するrpmを置いているrepositoryを探した.
- remi から ImageMagick6 ImageMagick6-heic (plugin)
- remi から libheif (ImageMagick6-heicのdependency, heif は heicと類縁の画像形式)
- rpmfusion から 足りない libde265 と x265-libs (libheifのdependency, codec)
を, なんとか dependency を満たして導入できた.
インストールできたのは 6.9.12-63 で, iPhoneで撮ってPreview.appで加工したHEICをJPEGやPNGにできている.
CentOS7で, 他にHEICを扱える画像処理ソフトウェアとして, vips-heic, ImageMagick7-heic もリストされていたが, 結局は libheif が必要で, どちらかが導入容易ということはなさそうだった.
利用目的はこれ. hig3.hatenadiary.com
Moodleの課題のPDF注釈フィードバックで日本語,JPEG,HEICを扱う with unoconv Document Converter
オープンソースのLMSであるMoodleには, 学生がファイルを提出する課題 Assignment 活動がある. PDF注釈Annotate PDFによるフィードバックでは, そのファイルが一律にPDFに変換されて評定ページで教師に提示され, 教師はPDF注釈を加えて学生に返すことができる.
この過程にはいくつかの外部プログラム, ライブラリが介在しており, (特に日本語フォントを要する場合は)設定が複雑. 今まで, Moodle.org のフォーラムに記事を投稿してきた.
- (unoconv, 日本語) 課題の評定画面の課題ファイルの表示について https://moodle.org/mod/forum/discuss.php?d=338260 *「課題」ツールのPDF注釈機能について https://moodle.org/mod/forum/discuss.php?d=364983
PDF注釈は次のように進む.
- 学生が課題に提出したファイルを unoconv がPDFに変換する
- PDFはページで pdftopnm によって表示される
- 評定ページで教師がPDFに書き込む操作をすると, tfpdf が注釈が加える
この順で, Universal Office Converter (unoconv) - MoodleDocsを参考に, 設定(手順)と確認(test)を示す.
バージョン
提出ファイルのPDFへの変換を可能にする設定
unoconv のインストール
su apt install apt install libreoffice chmod 777 /run/user/1000
Moodle>Site Administration>Plugins>Document converters>Unoconv>Path to unoconv document converterに /usr/bin/unoconv
と設定.
Document Converter の有効化
Moodle>Site Administration>Plugin>Document converfters>Manage document converter で Unoconv を有効化, Google Drive など他のConverterより上位に置く.
test
unoconv --version echo hello > afo.txt unoconv -f pdf afo.txt
afo.pdfが生成できるはず((
apt install unoconvだけだと, dependency で
libreoffice-core-noguiがインストールされるが, それだけだと, RuntimeException になる.
libreofficeをインストールすると
libreoffice-core-nogui`はアンインストールされる)).
Apache HTTP Server が unoconv を使えるようにする設定
Directory permission
su
mkdir /var/www/.config
chmod 777 /var/www/.config
*1.
test
Moodle>Site Administration/Plugins/Unoconv で, Test unoconv path, Download the converted pdf test file でPDFファイルがダウンロードできるはず.
Moodle でPDFの表示を可能にする設定
Ghostscript のインストールが必要十分.
poppler のインストール
su apt install poppler-utils
Moodle>Site Administration>Server>System paths>Path to pdftoppm に /usr/bin/pdftoppm
と設定*2.
Moodle の課題でPDF注釈を有効化
そのためには, 事前にシステムパスに ghostscript を指定する必要がある.
Ghostscript のインストール
su apt install ghostscript
Moodle>Site Administration>Server>System paths>Path to ghostscript に /usr/bin/gs
と設定.
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
PDF注釈にチェックした課題で, 学生が英語テキストファイルを提出すると, 教師は評定ページで, PDFに変換されたものが見られるはず.
test3
PDF注釈で, ツール群がPDF表示の上に現れ, テキストツールで英語を書き込み, Download feedback PDFで, その内容が書かれたPDFファイルがダウンロードできる.
変換を日本語対応にする設定
この段階で日本語テキストファイルを提出すると, PDFでは日本語部分が豆腐になる. そこで, unoconv に日本語フォントを与える.
Noto-CJK フォントの導入
su apt install fonts-noto-cjk
unoconv を service にしている場合は service の再起動
su
systemctl restart unoconv
test1
echo 日本語 > foo.txt unoconv -f pdf foo.txt
test2
日本語テキストファイルも変換されるはず
変換されたPDFへの注釈を可能にする
注釈は, Moodleについてくる tFPDF により行われる. PHPファイルとしては($MOODLE)/mod/assign/feedback/editpdf/fpdi/Tfpdf あたり.
日本語による注釈を可能にする設定
この段階では, 注釈でつけた日本語のノートはPDF変換後に豆腐になる. これを防ぐには, Moodle, tfpdf に日本語フォントを与える必要がある.
su vi $(MOODLE)/config.php
で tfpdf の持っているフォントを指定する.
$CFG->directorypermissions = 0777; $CFG->pdfexportfont='kozminpromedium'; //$CFG->pdfexportfont='kozminproregular'; // On Ubuntu Server 22.04.3 LTS
拡張子jpegのファイルもunoconvで変換する設定
この段階で, 拡張子 jpg のJPEG形式ファイルはPDFに変換されるが, 拡張子が jpeg だと変換されない.
unoconv の書き換え
su vi /usr/bin/unoconv
末尾に次を追加
fmts.add('graphics', 'jpg', 'jpg', 'Joint Photographic Experts Group', 'draw_jpg_Export') ### 3 fmts.add('graphics', 'jpg', 'jpeg', 'Joint Photographic Experts Group', 'draw_jpg_Export') ### 3 追加 fmts.add('presentation', 'jpg', 'jpg', 'Joint Photographic Experts Group', 'impress_jpg_Export') ### 19 fmts.add('presentation', 'jpg', 'jpeg', 'Joint Photographic Experts Group', 'impress_jpg_Export') ### 19 追加
test1
unoconv --show
test2
拡張子 jpeg のファイルを課題に提出するとPDFに変換され, 評定ページに表示される.
この方法でよい理由
$(MOODLE)/files/converter/unoconv/classes/converter.phpで定義される converter クラスのメソッドpublic static function supports($from, $to)
で, unoconv が拡張子$fromから$toへの変換をサポートしているかを判定している. このメソッドは結局, unoconv --show
で出力される, 対応拡張子リストを参照している.
unoconvは
unoconv -f pdf afo.jpeg
を正しく扱うが, 対応拡張子リストには [.jpeg]が表示されないので, それを追加している.
HEIC 形式のファイルを前処理で JPEG に変換する設定
HEICはiOSデバイスが使う高圧縮な画像フォーマット. この段階では, 拡張子.heicのHEIC形式ファイルを課題に提出すると, PDF注釈ページではPDFに変換されず, Some of the files can only be accessed through download.という注記が表示される.
Imagemagick のインストール
su
apt install imagemagick
type -a convert
converter.php の書き換え
- convert クラスのメソッド protected static function fetch_supported_formats() が返す拡張子の配列に, 要素 'heic' を追加する.
388c405 < self::$formats = array_unique($formats); --- > self::$formats = array_unique(array_merge($formats,['heic']));
- convertクラスのメソッド public function start_document_conversion(\core_files\conversion $conversion) で, 作業ディレクトリへの提出ファイルのコピーが終わった後, 拡張子が 'heic'である場合のみ, /usr/bin/convert でJPEG形式に変換する処理を追加し, 以下, 変換されたJPEG形式ファイルをunoconvで変換する.
128c128,145 < } --- > } else { // hig > if( \core_text::strtolower($fromformat) == 'heic'){ > $jpgfilename=$uniqdir . '/' . $file->get_id() . '.jpg'; > $cmd=escapeshellcmd("/usr/bin/convert"). ' '. > escapeshellarg($filename) . ' '. > escapeshellarg($jpgfilename); > > $output = null; > $currentdir = getcwd(); > chdir($uniqdir); > > $result = exec($cmd, $output, $returncode); > $filename=$jpgfilename; > > chdir($currentdir); > touch($filename); > } > } // hig
test
課題に拡張子 .heic のHEIC形式ファイルを提出すると, PDFに変換され表示される.
この方法でよい理由
heic はunoconv --show
で表示されないので, Moodleは変換しようとしない. また, 実際 unoconv
は HEIC形式ファイルを扱えない.
Imagemagick (convert) は HEIC形式を JPEG形式などに変換できるので, この問題に対処する方法として,
- unoconv のwrapperを書いて, convert を前処理として呼び出す
- $(MOODLE)/files/converter/unoconv/classes/converter.php を書き替えて unoconv の前に convert を呼び出すようにする.
の2つが考えられる. ここでは後者を採用した.
他のありうる方法
libheif-examples に含まれる heif-convert も heic を扱えるという.
さらにやってもいいこと
Moodle > Site administration > Server > File types で, JPEGやHEICを登録すると, 提出ファイル一覧などで, 画像ファイルのアイコンが表示される.
Disk full に近くなったときMoodleに起きること, してはいけない対処
UNIX/Linuxがdisk full になったときの振る舞いは root としてよく遭遇してきた.
今回は, CentOS6上のMoodle 3.11で, /var/lib/moodledata や MySQL が置かれた disk が full に近くなったとき, どのような振る舞いが見られるか観察する機会があった.
ページのAJAX UIを操作するだけでも, 「データベースに書けない」という警告のモーダルが出る, GETやページ遷移しようとすると, データベースと接続できないというPHPの(Moodleの?)エラーメッセージに飛ばされる*1.
この場合の想定される原因
課題に提出された多数の大きい画像ファイルで, 消去してもさしつかえないもの
考えられた対処と採用した対処と結果
- 不採用 /var/lib/moodledata 内のファイルを手動で消去する
- 可読なファイル名でないので不要な提出物やリソースかわからない
- 手動で消去するとデータベースの記録と不整合になるだろう
- 不採用 不要なコースをバックアップして消去する
- バックアップファイルは(いったん?) /var/lib/moodledata 内に作られるから, 一時的であれディスク使用率をさらに高めるだろう, または完了しないおそれがある
- 不採用 課題はそのままで提出ファイルをWebインターフェースから消去する
- 教師に提出物の編集を許す設定なら, 1個ずつ手動で消去することはできるが, ファイルの個数が多すぎる
- 採用 多数の不要な提出ファイルと紐付いた活動(課題)を消去し, ゴミ箱からも消去する
- 課題を消去すれば, 紐付いた提出ファイルも cron で近々消去されるはず.
- 結果 1つの課題は問題なく消去できた. 別の課題では, かえってディスク消費量が増して「データベースと接続できない」というエラーメッセージしか出なくなった. ゴミ箱に移す過程でも一時ファイルが作られるものと思われる
いつもどおりの教訓
ディスクに空きがあるうちに, コースや提出ファイルをバックアップや消去する作業をする. Moodle自身が管理者に警告を出してくれると助かるのが.
*1:ファイルのアップロードも試行してみればよかった
Problems in upgrading from Moodle 3.10.3 to 3.11.3+
- ひとつのコースが, invalidcoursemoduleid で使えなくなった. fix が進行中らしいので次の release を待つ. ちょうど開講終了したばかりのコースだが, 復習には必要. なお, 問題のコースから全インポート, や, 3.10 のときのバックアップをリストア, して作ったコースでは問題は生じない.
- assignment に提出され unoconv で変換されたPDFが grading tool で表示されない… convert じゃなくて表示の話だろうと思って, cache, theme あたりをあたったが違っていた(?). 3.11 で導入された poppler-util の pdftopnm によるPDF to PNG変換を有効化したら直った. このシステムパスを管理者が手で書かない限りは, 従来機能していた gs に fallback するはずなのだが.
- あらたに poppler-utils をインストールした(Debian).
- なんか, すべての活動の日付と完了条件をはっきりしろって言われてる圧が強い. オンライン授業下で全授業Moodleでやる学生さんにはそういうのは大事でしょう.