自分向けの単語勉強アプリを作った

起こったこと

応用情報の勉強しているが、単語がさっぱり覚えられない

試験日直前に一括で覚えるとして、どうやって勉強するかといろいろ考えたとき、PCで文章を登録できてスマホで勉強できるアプリが欲しいと思った。

また、既存のアプリは四択のものが多く、その選択肢から答えを推測できてしまう。応用情報技術者試験の午後問題では単語を記述させることが多いため、推測させるのではなく、初めから記述で回答するアプリが欲しいと思った。

作ったもの

DBを用意し、問題コンテンツを作成できるCMSを作成し、そのDBから問題を出力するアプリを作った。

問題コンテンツを作成できるCMS

問題アプリ。

おおやけ向けに作っていないのでいくつかUI的に怪しいが動くのでいったんはこれでよし。

作るのに使用したもの

PaasはHeroku

Postgresが今現在(2022/9/24)で無料であるこということとGithubアクションで自動デプロイしたかったから、というのが理由。

なお、Herokuは2022/11/28に無料版はなくなるみたい。

blog.heroku.com

Nodejs,Express,TypeOrm

本当は作成を思い立った時からMVCフレームワークを使いたかったのだがNodejsにMVCがなかった。正確にはいくつかあったのだけど情報収集が大変そうに感じた。結局Expressを使うことにしたのだけど、Expressはわからないことを検索すればいくつか記事が出てきてくれるのでこれは正解だった。一方でコントローラーに処理を少し書いてしまっている現状がある。リファクタリングしたいけどテストコードは書いていない。絶対よくないよね、これ。

DB操作関連のものはORMを使おうと思った。SequelizeかTypeOrmかで迷ったが、TypeOrmのほうがTypescriptの型を書きやすいという情報があったのでこちらを選択した。ORMそのものが今回が初めてだった。

正直TypeOrmは大変で、ネット検索をかけても古いバージョンの記述が多く、解決するのに時間がかかることが多かった。

UIはBulma

Bulmaにしたのは経験があるから。マテリアルUIでもよかったかもしれない。よく調べずに導入してしまった。導入しておいて書くのも悪いんだけど<button class="button"></button>と要素名と同じクラス名を書くのはなんだかなぁと思った。

VSCodeとかWSL2とかDockerとか使ったらPCが重い

VSCodeでコードを書き、WSL2でLinux環境で作成し、Dockerを使ってPostgresを構築した。DockerComposeを使っているので立ち上げも閉じるのも簡単だった。ただ、メモリが6GBのPCにはこれらの環境はとても辛かった。GPU向けの1.5GBを通常のメモリ使用に変更するなどで頑張ったが、やはり仮想環境マシマシには耐えられないようだった。なお、メモリ交換をしたらハードウェアエラーを起こした。保証も切れた。最初からメモリ交換できるタイプのPCにするか、高スペックのものを用意しましょう。

作るまで何日かかったか

3週間。ただ、平日は当然仕事をしているので実質的には6日間。応用情報の勉強と家族サービスもあるので、実際の工数はもうちょっと少ない。

作ったものは公開するか

いくつか課題があるので少なくとも直近は公開しない。前述の通り、UIがひどいというのもそうだけど、コンテンツがしょぼい。UIもコンテンツもしょぼいサービスは不安感しかない。不安感しかないから誰も使えない。どっちかの強化を図ってからことにあたりたい。

また、DBから直でデータを読みに行っている仕組み上、DBがボトルネックになることは必然だしセキュリティ的にも好ましくない。フロントで完結するような仕組みを考えるか、KVSにするかもしれない。

まずは

応用情報技術者試験に受かりたいなぁ。受かったら自慢できるしこのアプリの有用性を証明できるんだけどねぇ。