カテゴリー: Moodle

Moodle

  • WebClassとMoodleのLTI連携

    前提

    法政大学WebClass
    Moodle 4.5.15

    やりたいこと

    Moodleの「小テスト」をWebClassからシームレスに使用したい

    準備

    学習支援システム運用委員会へのネゴシエーション
    日本データパシフィックとのコミュニケーション

    ツールとプラットフォームの接続

    Moodle(LTIツール)

    管理者ロール
    https://docs.moodle.org/405/en/Publish_as_LTI_tool

    • 登録方法としてLTI有効
    • LTIツールとして公開有効
    • フレーム内に開くを許可
    • LTIツールとして公開する→プラットフォームを登録する
      手動登録用のパラメータが表示される

    WebClass(LTIプラットフォーム)

    教材→教材を作成するから「LTI設定画面を開く」をクリック
    任意のツール名を設定 (moodle)
    LTIツール新規登録でLTI1.3を選択
    公開鍵の取得方法 公開鍵セットURLを設定
    公開鍵セットURL (JWKS URL)
    ログインURL (ログイン開始URL)
    リダイレクトURL (ツールURL=起動URL)
    ディープリンクURL (ディープリンクURL)
    カスタムパラメータ (空にする)
    詳細をクリックするとデプロイメントID、クライアントIDなどが表示される

    Moodle(LTIツール)

    管理者ロール
    プラットフォームの登録を編集するをクリックし、WebClass側のパラメータを転記する
    プラットフォームIDはWebClass側の「プラットフォームURL」
    戻るとステータスが「アクティブ」になっている。
    デプロイメントを追加し、WebClass側のデプロイメントIDを追加する。

    LTIツールの公開

    Moodle

    教師ロール
    https://docs.moodle.org/3x/ja/LTI%E3%83%84%E3%83%BC%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E5%85%AC%E9%96%8B#%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%BE%E3%81%9F%E3%81%AF%E6%B4%BB%E5%8B%95%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%85%B1%E6%9C%89%E3%81%99%E3%82%8B
    コースのトップで「参加者」から「登録済みユーザ」のプルダウンで「登録方法」ページへ移動し、登録方法を追加するで「LTIツールとして公開する」を選択。
    コース全体、あるいは特定の小テストなどを連携することが可能。メールアドレス可視性の設定を「秘匿」にしておく。
    コースのトップで「さらに」から「LTIツールとしての公開」へ移動し、登録したLTIツールが追加されているか確認。ここで起動URLがツールURLと異なっていないか確認。

    WebClass(LTIプラットフォーム)

    教材→教材を作成するから「LTIツール」を選択する。
    ラベル、タイトルを入力。「利用可能ツール」として先程登録したMoodleが選択できるようになっている。ディープリンクを有効にしている場合には「コンテンツを取得する」をクリックすれば良い。MoodleでLTI公開しているコンテンツと評定表を追加するかどうか選択できるようになっている。

  • Moodleサイト移行

    ホスト名の変更を行う手順メモ

    1. メンテナンスモードにする
      sudo php moodle/admin/cli/maintenance.php --enable
    2. バックアップ
      • データベース
      • HTML
      • moodledata
    3. レガシーメンテナンスモードにする
      sudo php moodle/admin/cli/maintenance.php --disable
      sudo php moodle/admin/cli/maintenance.php --enableold
    4. サイト移行ツール(admin/tool/replace)へのアクセス
    5. メンテナンスモードを解除

    移行中「動作環境」「サーバチェック」で max_input_vars が足りないとワーニングが表示された。修正するために php.ini を編集したものの有効にならなかった。fpm を使用している場合には /etc/php-fpm/ 以下を設定すること。

  • MoodleのSCORM reportを解析向けにカスタマイズ

    仮名化しているIDをさらに処理しやすい形にすること、時刻を計算機で扱いやすい形にすること、各オブジェクトの経過時間を表示することなどを実現したい

    構想から1年半、ようやくできた。今どきではあるがSCORMで教材を提供している場合、それなりのトラッキング情報が得られる。しかしながら、MoodleのSCORMモジュールのレポート機能は解析を目的としたデータを出力することを目的とはしていないため、データクレンジングが必要となる。このカスタマイズで多くを学ぶことができ本当に楽しい。 (さらに…)

  • Moodleのログを解析向けに出力するカスタマイズ:mod_quiz編

    mod_quizにこだわって分析したい場合のカスタマイズをまとめておく。端的にはこの記事の続編である。今回からはUNIX VMを準備するのはやめ、Ubuntu on Windows10で開発環境を構築している。XAMPとかVMWare Playerをインストールする必要がなくなり素晴らしい。対象は、mod/quiz/review.php, mod/quiz/report/{attemptsreport_table,attemptsreport}.phpである。
    前提として、もしPHPスクリプトでどのようなクエリを発行しているのか知りたければ、各スクリプト冒頭のrequire群の後に以下を追加すればよい(だいたい後悔するのがオチである)。相変わらずたいしたことはやっていない。

    [code]$DB->set_debug(true);[/code]

    (さらに…)

  • MySQLアップグレード後dumpができていなかった

    mysqldump を実行すると、

    [code]
    mysqldump: Couldn’t execute ‘SHOW VARIABLES LIKE ‘gtid\_mode”: Table ‘performance_schema.session_variables’ doesn’t exist (1146)
    [/code]

    となってしまう。毎日取っているはずのバックアップが意味のない状態に…。データ構造のアップグレードを行うべし。

    [code]
    sudo mysql_upgrade -u root -p
    [/code]

    これで大丈夫と思い再起動すると、

    [code]
    mysqldump: Error: Binlogging on server not active
    [/code]

    と奈落の底へ。バイナリロギングを有効にするため、my.cnfを

    [code]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    sync_binlog = 1
    [/code]

    とし、/var/log/mysql を掘ってパーミッションを適切にしましょう!

  • Moodleのオンラインユーザ数を可視化

    学認連携Moodleの繁忙期を前に、オンラインユーザ数を可視化することを思いついた。もちろんMoodle内部にそのような仕掛けはあるが、可視化ページの「Logged in Users」をMoodleのオンラインユーザ数と勘違いされている場合があったため、rraに記録し可視化するのが有用であると考えた。

    オンラインユーザ数を取得するスクリプトの作成

    [code]
    #blocks/online_users/block_online_users.phpを参考にした
    #/bin/sh
    pass=’your password’
    db=’your database’
    output=`/usr/bin/mysql -s -umdluser -p$pass $db -e "SELECT count(u.id) FROM mdl_user u WHERE u.lastaccess > unix_timestamp(now()) – 300 AND u.lastaccess <= now() AND u.deleted = 0"`
    echo $output
    [/code]

    これを実行し単独の数値が出力されるか確認する。確認できたら、データインプットメソッドへの登録、データテンプレートの作成、データソースの登録、グラフテンプレートの登録と進めれば良い。おやじさんのページがひじょうに参考になりました。

    結果は以下の通り。まだまだ改善の余地はあるが何とか間に合いました。

    security-learning のオンラインユーザ数
    security-learning のオンラインユーザ数

  • 「倫倫姫アップデート2015: 学認連携Moodleの利用拡大と運用の改善」が大学ICT推進協議会2015年度年次大会優秀論文賞を受賞しました

    情報倫理eラーニング教材の開発と運用における改善をまとめたものが評価されました。ありがとうございます。開発と運用にご尽力いただいている皆様、利用機関の皆様にこの場をお借りして深く感謝いたします。今後も継続的な改善を進めて行く所存です。

    1 題 目
    倫倫姫アップデート2015: 学認連携Moodleの利用拡大と運用の改善

    2 著 者
    上田浩(京都大学/国立情報学研究所),中村素典(国立情報学研究所)

    3 選考理由
    著者らは,情報倫理教育のためのコンテンツである「倫倫姫」を学認連携Moodle上で継続的に運用してきている。本論文では,コンテンツのアップデートと運用する際に問題となった点の改善点について報告している。コンテンツについては,教育の実効性を高めるため,Moodleの利用制限 (Conditional Activities) 機能を用いて総合テストのみ受講することを不可能とするよう改良した。また,教材構造を改良し,関責任者が受講記録を確認するときのシステム負荷の低減を実現した。教育の実効性と運用の効率性を高めるための有益な情報を提供しており,高く評価できる。

  • ibdata1肥大化解消

    学認連携Moodleのibdata1は11GBになっている。よく言われることだが、InnoDBはOSがどのていどのファイルを扱えるか認識できない。肥大化が困るのは、ファイルシステムを食い潰すことであり、最適化したとしても縮小することはない。一度ダンプからリストアするしかない。また、ファイルごとに.idbを作成する「innodb_file_per_table」が効果があるとされており、my.cnfに

    [code]
    innodb_data_file_path = ibdata1:1G
    innodb_file_per_table
    [/code]

    を記述するという2009年の記事が見られるが、MySQLマニュアルを見ると、MySQL 5.6からこれがデフォルトになるそうだ。つまり、自動的にテーブルごとの.ibdを作成してくれるということである。先日のシステムメンテナンスで学認連携MoodleはMySQL 5.7にバージョンアップした。学認連携Moodleのデータディレクトリを見てみると、

    [code]
    -rw-r—– 1 mysql mysql 8720 3月 8 04:19 mdl_workshop_aggregations.frm
    -rw-r—– 1 mysql mysql 147456 3月 8 04:20 mdl_workshop_aggregations.ibd
    -rw-r—– 1 mysql mysql 9260 3月 8 04:19 mdl_workshop_assessments.frm
    -rw-r—– 1 mysql mysql 147456 3月 8 04:20 mdl_workshop_assessments.ibd
    -rw-r—– 1 mysql mysql 9222 3月 8 04:19 mdl_workshop_assessments_old.frm
    -rw-r—– 1 mysql mysql 163840 3月 8 04:20 mdl_workshop_assessments_old.ibd
    [/code]

    のように、ダンプをリストアする作業を行っていないのもかかわらず、夜中のmysqlcheck時に自動的にこのようになっているようだ。つまりmy.cnfは一切変更する必要はない。

    「innodb_data_file_path = ibdata1:1G」について、このサイズを越えたらどうなるのか見当がつかないので、明示的な固定サイズは止めることにした。しかしながら今のままの肥大を続けるのは良くないので、データベースのダンプをリストアする作業は必要である。この結果、ibdata1は11Gから79Mとなり、消費メモリが劇的に減少した。

    security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。
    security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。

    作業手順は次の通り。この記事の流れが非常に参考になった。
    (さらに…)

  • SCORM受験削除の効果

    学認連携Moodleのメンテナンスの真っ最中である。今回のメンテナンスの目的の一つは、肥大したSCORM関係のデータを削除すること。MoodleはSCORM関連のデータをシステム全体のデータベースとして持っている。たとえば、

    [code]
    | mdl_scorm | 25 |
    | mdl_scorm_aicc_session | 0 |
    | mdl_scorm_scoes | 516 |
    | mdl_scorm_scoes_data | 4043 |
    | mdl_scorm_scoes_track | 8530377 |
    [/code]

    mdl_scorm_scores_track にSCORMのトラッキングデータがあるものと思われる(参照:mysqlでテーブルのレコード数を確認する方法)。これを「全てのSCORM受験を削除」する。3/1 21:26に削除を開始した。

    security-learningのロードアベレージ。開始から4時間以上高負荷状態が続いていることが分かる。
    security-learningのロードアベレージ。開始から4時間以上高負荷状態が続いていることが分かる。

    削除開始からしばらくした時の状態。増えているが一時的なトランザクションのためであろうと推察する。

    [code]
    | mdl_scorm | 25 |
    | mdl_scorm_aicc_session | 0 |
    | mdl_scorm_scoes | 516 |
    | mdl_scorm_scoes_data | 4040 |
    | mdl_scorm_scoes_track | 8855805 |
    [/code]

    削除後

    [code]
    | mdl_scorm | 25 |
    | mdl_scorm_aicc_session | 0 |
    | mdl_scorm_scoes | 454 |
    | mdl_scorm_scoes_data | 3345 |
    | mdl_scorm_scoes_track | 171273 |
    [/code]

    およそ1/50に削減できたことになる。なお、4コアサーバで同様の操作を行ったときは最後のクエリ投入まで16分で完了した(実行時間は不明)が、security-learning(2コア)ではクエリの投入だけで47分、実際の実行に4時間以上かかっていると推定され、データベースはスケールアップが効果的ということを実感した。

  • Moodleのメンテナンスモード

    予告することができるのを今さらながら初めて知った。cronなどで1日前(つまり1440分前)から予告しておいてメンテナンスモードにすることもできる。該当のMoodle Docsはこちら。
    [code]
    if ($options[‘help’]) {
    $help =
    "Maintenance mode settings.
    Current status displayed if not option specified.

    Options:
    –enable Enable CLI maintenance mode
    –enablelater=MINUTES Number of minutes before entering CLI maintenance mode
    –enableold Enable legacy half-maintenance mode
    –disable Disable maintenance mode
    -h, –help Print out this help

    Example:
    \$ sudo -u www-data /usr/bin/php admin/cli/maintenance.php
    "; //TODO: localize – to be translated later when everything is finished

    echo $help;
    die;
    }
    [/code]