studyWorkMaker

リポジトリ

こちら

概要


基本情報処理技術者試験を勉強していたとき、単語帳にひたすらに書いてはめくってクイズ&即答え見て
勉強という、古風勉強スタイルを取っている私は、100均で単語帳を買うときに不便なことがいくつかあることに気付いた。
  • 単語帳60枚あたり100円で買うことになる
  • 単語帳買うまでモチベ上がらない
  • 単語帳買ったら買ったでやる気がなくなる
  • 途中で指が吊りそうになる
  • 字が小さすぎて読めなくなる、情報量が詰め込めない
  • 用が済んだら邪魔になる
という点。
何が言いたいかというと、物理的な単語帳は何かと不便なことが多く、
不便故にモチベが上がらない。
そこで、いくつかの不便な点を解消すべく「単語帳アプリ的なものでも作ろうかな」というモチベが発生する
一度発生したモチベがどこまで続くのか。どこで辞めたくなるかは見所である。
結果として1ヶ月ぐらいで飽き始めている。

実装状況


本リポジトリには以下の実装が含まれております。
  • studyWorkMaker CUI版(言語:Perl)
  • studyWorkMaker WEB版(言語:Perl/PHP/Javascript/mariaDB)
  • studyWorkMaker WEB版(言語:Java/Spring tool/thymeleaf/MySQL/Javascript)

要求知識

各言語やツールの知識が必要です。ビルドには各言語・ツールのチュートリアルなどを参考にしてください。
私とこのページは面倒くさいのでやりません。
逆に言えば、そこのページのチュートリアルが完了すれば言ってることはだいたい理解できます。
使用する分には、WEB版はブラウザを、CUI版はPerl実行環境と問題解答データがあれば十分です。



本体解説

CUI版

CUI版を使う場合、ローカルでの実行になるため、Perlを実行する環境を用意してください。
そして、リポジトリのcuiフォルダにあるmain.plを、以下のように実行してください。

コマンド:「perl main.pl ****.txt」

「****.txt」には問題解答データが記載されているファイルを用意します。

アプリ内では2つの状態に分かれます。
最初からいきなり出題が始まり、4択の問題選択肢が出ます。
0,1,2,3から正解の数字を入力し、「Enter」で確定すると、
解答表示画面に進みます。正解なら正解、不正解なら不正解と正しい解答を表示し、
正解数と不正解数をカウントします。
次の問題に進むかどうか聞かれていますので、「y」を入力し、「Enter」で確定すると、
次の問題に進みます。あとは同じことを繰り返します。
進むかどうか聞かれている状態で、「y」以外を入力するか、何も入力せずに「Enter」で確定すると、
アプリを終了します。
出題する問題や、選択肢に出現する解答候補は、最初に指定した問題解答データを元に出題します。
ファイルを変えて、だいたい設定問題回答数の2倍くらい勉強したら1周していると思って良いと思います。
反射神経で答えられるくらいになりましょう。

WEB版(Apache2サーバ用)

(未完成だけど、一応解説) WEB版の場合で、Apache2サーバを使用する場合は、studyWorkMaker/webを使います。
Apache2サーバの他に、MySQL(自分の実行環境はmariaDB)、PHP環境、CGI環境が必要になります。
インストールは調べると色々分かるのですが、結構面倒くさいです。
自分もメモは大して残してないのですが、Permission設定だけは気をつけてください。
利用者には実行権限が必要です。書き込み権限は不要です。

セットアップが終わったら、別の端末等でサーバと同じネットワークに入ってください。
http://(サーバのIPアドレス)/index.htmlでメインページに飛びます。
index.htmlには、「問題解答データをアップロードするフォームと、
それらデータを使用して、クイズをしていくページに飛ぶフォームがあります。

問題解答データをアップロードするフォームでは、ファイル選択で、ファイルを選択し、
その中にある問題解答データを展開し、SQLに登録します。
SQLには、ただのInsert文への文字列結合しか入ってないので、
SQLインジェクション・不正アクセスなどの攻撃に無力です。サーバ公開は行わないでください。
この部分の処理はCGI(Perl)で書いてます。

クイズをしていくページでは、最初にランダムに選択された問題と、正解が1つ混じった4択ボタンが出現します。
正解のボタンを押下すると、正解数が、正解以外のボタンを押下すると不正解数が1増加し、結果画面に映ります。
結果画面では、次の問題へのリンクがあるので、このリンクをクリックすると、そのページを再読込して、
問題を再抽選するようにしています。
…これをただ延々と繰り返すだけです。
この部分は問題出題処理とボタンの選別はPHPで、押下後の処理はJavaScriptで書いてます。

事前にSQLに問題解答データを登録しないと、0択の中から問題を生成することになり、動きません。改善ポイント1
また、アップロードした問題解答データがすべて反映されます。解答がダブったりすると判別つきません。
(同じ単語でも別問題判定なら不正解と見なしています)改善ポイント2
問題解答データが多すぎると、めちゃくちゃな解答選択肢になり、簡単になります。改善ポイント3
URLで正解数と不正解数を示しています。URLを変えればいくらでも不正をはたらけます改善ポイント4
問題の再抽選時、前回の問題と同じ問題が出ることが多々あります。改善ポイント5
自分の環境ではラズパイでサーバ構築したので、ユザネはpi、パスはデフォルトのubuntuになっています。ソースに書かないでください。改善ポイント6

と、こんな感じに結構ガバガバなので、改善点をあらいだして、改善していきたいですね(遠い目)
Issueに書いても良いんだけど…ね…?「ね?」じゃないんだよ。改善あくしろよ。
個人的には言語も絞りたいですが、正直もう作り直すの面倒くさいのと、たくさん言語やってる方が経験値積めるので、
こいつが所有する言語格はたぶん増えます。
つまり、用意する環境も増えます。

WEB版(Springローカルサーバ用)

WEB版の場合で、Springでビルドする場合は、studyWorkMaker/stsを使います。
Spring Tool Suite(自分は3.9.10)を起動して、Workspaceを適当に新規作成します。
importで、studyWorkMaker/sts/フォルダを選びます。
あとはだいたい自動と雰囲気で設定されます。
事前にMySQL(Windowsサーバのみ確認済み)が必要です。
ググってインストールしてください。インストーラを順当に入れるだけで十分です。

MySQLにdatabase名「test_t」とtable名「qa_list_row」を登録しておいてください。
使いますし、自分では生成しません(確か)。

使い方はWEB版(Apache2版)と同じです。アクセス先が「http://localhost:8080/」なので、そこだけ注意です。
さりげなくMySQLのユザネとパスを書いちゃってますが、本番環境では見えないところにおいてください。
こっちはこっちで色々ガバですが、SQLインジェクションに関しては、Java特有のアクセスの仕方で書いているので、
ある程度意図的な動作は防げてるんじゃないかなぁ…?と思っています。
Springばんざい。

まぁ私はJava屋じゃないので…

問題解答データ

問題と解答には一定のフォーマットのテキストデータを用います。
テキストデータはメモ帳などで保存して、用意してください。
文字コードは「UTF-8」「BOMなし」でお願いします。

テキストデータは以下のルールに則って作成してください。
以下に参考用の問題解答データファイルのリポジトリがあるので、お試しください。
(内容の信憑については、主の主観で書いてるので、
「覚えにくい!」とか「間違ってる!」とかはご修正ください。
ただ、完全に間違ってるものは、お問い合わせ頂けるとちょっとありがたいです。)
リポジトリはコチラ

コラム

「studyWorkMaker」を翻訳すると、「勉強職人」らしい。(translated for Google 翻訳)
分け方は「study workmaker」と崩すと、「study=勉強」「workmaker=職人(Craftsman)」となる模様。
我ながら、なんか意外にいいネーミングセンスしているな、と感じたので追記。
2020.09.03