TAGether
https://scrapbox.io/files/65a64cec408b54002305da22.png
TAGether - Share your self-made exam with classmates
テスト対策問題のような問題を作成し、クラスの人と共有できるようなサービスです。
発端
高専1年の秋、クラスみんな英単語小テスト対策に追われていた
ここで活躍したのがWordHolic(英単語アプリ)、自分はこのアプリ用にcsvを作成して、Googleドライブで配布していた
csv生成を楽にするためにPythonスクリプトを書いたりしていた
英語と日本語を交互に入力すれば、対応しているcsvの形式にフォーマットしてくれるやつ
最初はCで書こうとして、日本語を上手く扱えなかったので挫折した記憶がある
後でちょっと後悔していた
C++でちょっと厳しいCLIソフトがあったからPythonで書いてたんだけど、Rustで書いてみればよかったな
ただし、csv生成は人力でやっていたため、問題が発生
誤字、登録されていない単語があるなど
都度修正はしていたが、修正前のバージョンをアプリにインポートしていた人は自分で修正することを余儀なくされていた
じゃあ、問題を作成してクラス内に共有できるサービスがあればみんな幸せになるのでは!?
構成
フロント:React + Nextjs
バックエンド:APIはPHP(後にExpress)問題保存にMariaDB
「使ってみたかったから」ですべての技術選定を終わらせた
フロント:VueかReact
VueはTypeScriptと相性が悪いらしい 型無し言語なんて書いてられるか!!
なんかルーティングめんどいからNext.js使うか
API:PHP
ほんとに何も考えずにPHPを選んだらしい(技術選定メモに何も残っていない)
PHP書くのがつらすぎてJS(Express)に移行
なんでTSじゃないんですかね?
Docker Composeによる運用のために、同じリポジトリに移動した
DB:MySQLかPostgreSQL
MySQLのほうがシンプルで、ユーザー数も多いらしいということで採用
MySQLを使ってたつもりだったけど、気がついたらMariaDBになっていた
Docker Composeの導入によって、正真正銘のMySQLになったっぽい
その他:クラス外の人間によるアクセスを弾くためにIDaaSも導入するつもりだったけど、実装が死ぬほど面倒だったからやめた
時系列
2020/12/12 アイデアが生まれる
クラスメイトだけフォローしてる鍵垢を持っていて、そこでツイートした
https://scrapbox.io/files/62eef9716aa1d0001d38158e.png
うれしすぎてウキウキでツイートした(後述)
2021/01/16 クラス内で公開
2022/08/06 v2.0.0公開
解答履歴に自分が解答した内容を保存するようにした
以前は間違えた問題だけ保存していたが、これによってどの問題にどう解答したのか見返すことが出来るようになった
2024/01/16 v3.0.0公開
App routerの移行、ログイン機能の実装など
思い出話
こんなノリで技術選定をしたので当然知識はまったくなく、動く状態まで持っていくのが大変だった
最初はReactから直接MySQLに接続しようとしてた フロントエンドからDBにアクセスできるわけないだろ!
正直あきらめかけてたので、この進捗が出た時の嬉しさは心に残っている
発端がこれなので、最初は一問一答しか考えていなかったけど、今では選択問題や並び替え問題まで実装して、かなり大規模になってきた
PHPはしばらく書きたくない
DBにバージョンを記録するカラムを用意しておくと幸せになれるかも知れない(ベストプラクティスなのかはわからない)
いうほど嬉しくないのでは?
2022年、セキュリティ・キャンプ中のLT会で発表したり、技育展で紹介したりした