TAGether-logo
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生成は人力でやっていたため、問題が発生
    • 誤字、登録されていない単語があるなど
    • 都度修正はしていたが、修正前のバージョンをアプリにインポートしていた人は自分で修正することを余儀なくされていた
  • じゃあ、問題を作成してクラス内に共有できるサービスがあればみんな幸せになるのでは!?

構成

フロント:React + Nextjs
バックエンド:APIはPHP(後にExpress)問題保存にMariaDB

  • 「使ってみたかったから」ですべての技術選定を終わらせた
    • フロント:VueかReact
      • VueはTypeScriptと相性が悪いらしい 型無し言語なんて書いてられるか!!
      • なんかルーティングめんどいからNext.js使うか
    • API:PHP
      • ほんとに何も考えずにPHPを選んだらしい(技術選定メモに何も残っていない)
      • PHP書くのがつらすぎてJS(Express)に移行
        • なんでTSじゃないんですかね?
      • PHP時代のソースコードは旧APIリポジトリに置いている
        • Docker Composeによる運用のために、同じリポジトリに移動した
          • monorepoでPHPを動かしていた時代のソースコードはphpブランチに置いている
      • Next.js App Router に移行した際に Route Handler を用いるように変えた
    • DB:MySQLかPostgreSQL
      • MySQLのほうがシンプルで、ユーザー数も多いらしいということで採用
      • MySQLを使ってたつもりだったけど、気がついたらMariaDBになっていた
        • Docker Composeの導入によって、正真正銘のMySQLになったっぽい
    • その他:クラス外の人間によるアクセスを弾くためにIDaaSも導入するつもりだったけど、実装が死ぬほど面倒だったからやめた
      • なんやかんやでログイン機能を実装したくなり、@react-oauth/google と iron-session を用いて実装した

時系列

  • 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の移行、ログイン機能の実装など

思い出話

  • こんなノリで技術選定をしたので当然知識はまったくなく、動く状態まで持っていくのが大変だった
  • 発端がこれなので、最初は一問一答しか考えていなかったけど、今では選択問題や並び替え問題まで実装して、かなり大規模になってきた
  • PHPはしばらく書きたくない
  • DBにバージョンを記録するカラムを用意しておくと幸せになれるかも知れない(ベストプラクティスなのかはわからない)
    • いうほど嬉しくないのでは?
  • 2021年度のU-22プロコンに応募した
  • 2022年、セキュリティ・キャンプ中のLT会で発表したり、技育展で紹介したりした