
https://github.com/watasuke102/TAGether
TAGether - Share your self-made exam with classmates
テスト対策問題のような問題を作成し、クラスの人と共有できるようなサービスです。
発端
- 高専1年の秋、クラスみんな英単語小テスト対策に追われていた
- ここで活躍したのがWordHolic(英単語アプリ)、自分はこのアプリ用にcsvを作成して、Googleドライブで配布していた
- csv生成を楽にするためにPythonスクリプトを書いたりしていた
- 英語と日本語を交互に入力すれば、対応しているcsvの形式にフォーマットしてくれるやつ
- 最初はCで書こうとして、日本語を上手く扱えなかったので挫折した記憶がある
- 後でちょっと後悔していた
-
@Watasuke102: あっ
-
C++でちょっと厳しいCLIソフトがあったからPythonで書いてたんだけど、Rustで書いてみればよかったな
- csv生成を楽にするためにPythonスクリプトを書いたりしていた
- ただし、csv生成は人力でやっていたため、問題が発生
- 誤字、登録されていない単語があるなど
- 都度修正はしていたが、修正前のバージョンをアプリにインポートしていた人は自分で修正することを余儀なくされていた
- じゃあ、問題を作成してクラス内に共有できるサービスがあればみんな幸せになるのでは!?
構成
フロント:React + Nextjs
バックエンド:APIはPHP(後にExpress)問題保存にMariaDB
- 「使ってみたかったから」ですべての技術選定を終わらせた
- フロント:VueかReact
- VueはTypeScriptと相性が悪いらしい 型無し言語なんて書いてられるか!!
- なんかルーティングめんどいからNext.js使うか
- API:PHP
- DB:MySQLかPostgreSQL
- MySQLのほうがシンプルで、ユーザー数も多いらしいということで採用
- MySQLを使ってたつもりだったけど、気がついたらMariaDBになっていた
- Docker Composeの導入によって、正真正銘のMySQLになったっぽい
- その他:クラス外の人間によるアクセスを弾くためにIDaaSも導入するつもりだったけど、実装が死ぬほど面倒だったからやめた
- なんやかんやでログイン機能を実装したくなり、@react-oauth/google と iron-session を用いて実装した
- フロント:VueかReact
時系列
- 2020/12/12 アイデアが生まれる
- クラスメイトだけフォローしてる鍵垢を持っていて、そこでツイートした

- クラスメイトだけフォローしてる鍵垢を持っていて、そこでツイートした
- 2020/12/19 最初のコミット
- 2021/01/06 初めて React から MySQL のデータを表示できた
- うれしすぎてウキウキでツイートした(後述)
- 2021/01/11 最初のバージョン v1.0.0リリース
- 2021/01/16 クラス内で公開
- 2022/08/06 v2.0.0公開
- 解答履歴に自分が解答した内容を保存するようにした
- 以前は間違えた問題だけ保存していたが、これによってどの問題にどう解答したのか見返すことが出来るようになった
- 解答履歴に自分が解答した内容を保存するようにした
- 2024/01/16 v3.0.0公開
- App routerの移行、ログイン機能の実装など
思い出話
- こんなノリで技術選定をしたので当然知識はまったくなく、動く状態まで持っていくのが大変だった
- 最初はReactから直接MySQLに接続しようとしてた フロントエンドからDBにアクセスできるわけないだろ!
- そんな具合で四苦八苦しつつ、ReactからAPI経由でMySQLのデータを持ってきて表示できた時は感動した
- 正直あきらめかけてたので、この進捗が出た時の嬉しさは心に残っている
- 発端がこれなので、最初は一問一答しか考えていなかったけど、今では選択問題や並び替え問題まで実装して、かなり大規模になってきた
- PHPはしばらく書きたくない
- DBにバージョンを記録するカラムを用意しておくと幸せになれるかも知れない(ベストプラクティスなのかはわからない)
- いうほど嬉しくないのでは?
- 2021年度のU-22プロコンに応募した
- 2022年、セキュリティ・キャンプ中のLT会で発表したり、技育展で紹介したりした