Laravelで利用者の能力に適切な難易度の問題を出題するシステムをWeb上で構築
本記事では、私が大学の研究で行った利用者の能力に適切な微分方程式の問題を出題するシステムをWeb上で構築したことについて紹介します。
どういう経緯や仕組みでこのシステムを作ったのかこの記事にまとめました。
システムの全体像
このシステムを分けると大きく3つの役割がそれぞれ連携/組み合わせているシステムです。
- Web上での出題システム:PHP/Laravel
- データの保管:MySQL
- 微分方程式の演習問題の生成:Python
全体像としては下記の図です。
↓研究を行った背景やシステムを実際に利用ったデータやアンケートから調査を行った結果をまとめたスライドです。
システムの仕様
- 2階微分方程式の計算問題
- 斉次微分方程式は一般解についての4択問題,非斉次微分方程式は斉次系の一般解で4択,特殊解で4択の計16択問題
- 受験者の能力に近い難易度の演習問題の出題
- 折れ線グラフで自分の能力を確認できる
- 過去に解いた問題を確認できる
どういう経緯や理由でシステムを作成したか
システムを実現するための準備
まず、この記事のシステム全体像にも書いたように3つのシステムを連携/組み合わせているシステムです。
それぞれについて、どういう理由で選んで何の役割をさせているのかを説明します。
Web上での出題システム(PHP/Laravel) と データの保管(MySQL)
選定経緯
私がHPやシステムを作る時によく使っていた言語がPHPで一番得意な言語だったこともありPHPで作ろうと考えていました。
大学の研究ということもあり期日もあったので元となるシステムを探し、Laravelで構築されている問題出題システムのオープンソースを見つけたのでそちらを元に研究用に変更しながら作成しました。
↓元となったオープンソース
役割
- ログイン機能
- 利用者の能力に適切な問題を出題
- 回答後答え合わせができる
- 折れ線グラフで自分の能力が確認できる
- 過去に解いた問題を確認できる
微分方程式の演習問題の生成(Python)
選定経緯
最初は、出題システムの方で自動で問題を作成し保存できるシステムを実現する方向で頑張っていました。
しかし、微分方程式の問題を生成するにあたって大きく下記の3つの理由から別でつくることを考えました。
- 微分方程式を計算させる関数がなく実現が難しい
- 生成や保存するのに時間がかかってしまう
- 出題問題を変更したい場合にシステムに組み込んでいると難しい
調査したところPythonであればSymPyという代数計算ができるライブラリが存在し実現が容易で今後拡張も可能と考え出題元のデータを生成するシステムをPythonで行うことを決めました。
微分方程式には一般解と特殊解があり複雑でだいぶ助けられました。
余談ですが、微分方程式の計算が合っているか確認する際にWolfram Alphaというサイトが便利でした。
役割
- 微分方程式の問題をデータベースに合わせてcsvで生成
- 表示はMathMLの形式を採用
- 事前研究で判明している微分方程式の分類(一般解や特殊解など)の難易度を生成した問題に付与
システムの詳細
①ログイン機能
アカウントの登録をここで行います。
②ホーム画面
受講者の能力推移がグラフで確認することができます。
③問題の出題画面
回答方法は、微分方程式の斉次系だと一般解1つ、非斉次系だと一般解と特殊解で2つ選択する方式です。
「Submit answersボタン」を押すと問題の正誤が確認できる結果画面に推移します。
④結果画面
自分の選択解答と正解の選択解答が確認できます。
⑤過去に回答した問題の確認画面
「Viewボタン」を押すことでその時の結果画面を確認することができます。
作成したシステム
当初Git管理の知識がなく現在もメンテナンスしていないので優しい目で見てください🙇♂️
Discussion