資格学習アプリ「マナビポータル」を個人で作っている話
「資格の勉強って、スキマ時間にサクッと一問一答できると続けやすいよね」——そんな自分の体験を出発点に、マナビポータルという学習プラットフォームを作っています。この記事では、どんな考え方で設計しているか、そして実際に手を動かして気づいたことを書き残しておきます。
なぜ作ろうと思ったのか
市販の問題集やアプリはたくさんありますが、「自分が欲しい粒度」で問題に取り組めるものは意外と少ない、というのが出発点でした。
- 1問ずつ、解説までその場で読める
- 間違えた問題だけをあとから復習できる
- ジャンルをまたいで少しずつ問題を増やしていける
このあたりを満たすものを、自分の手元で育てていけたら——という気持ちです。広告だらけだったり、余計な機能が多かったりするものではなく、「解く」ことに集中できる静かなアプリにしたい、というのが裏のテーマでした。
技術スタック
今回はこんな構成にしています。
- フロントエンド: Next.js(App Router)
- バックエンド: Supabase(PostgreSQL + Auth + Storage)
- 問題の生成補助: AI(下書きを作ってもらい、人間が確認)
- 認証: Supabase Auth(メール / Google OAuth)
問題データは SQL マイグレーションで管理していて、新しいジャンルを追加するたびに少しずつ積み増していけるようにしています。Supabase を選んだ理由は「個人開発のバックエンドに Supabase を選んだ理由」に詳しく書きました。
AIで問題を「下書き」する運用
問題を増やすのは地道な作業です。ここはAIに下書きを作ってもらい、最終的な正誤と解説は必ず人間(自分)が確認するという運用にしています。AIが作った問題をそのまま出すと、たまに事実が怪しいものが混ざるからです。「作るのはAI、責任を持つのは自分」という線引きをはっきりさせたことで、量を保ちつつ品質も担保できています。
つまずいたポイント
一番悩んだのは「問題データの設計」でした。最初は問題文と答えだけを持たせていたのですが、運用していくうちに解説テキスト・難易度・出題範囲・出典といったメタ情報が欲しくなり、何度かスキーマを見直すことになりました。この試行錯誤は「一問一答アプリの問題データを、どう設計したか」に独立した記事としてまとめています。最初から完璧を目指さず、運用しながら育てるという割り切りが、個人開発では大事だなと改めて感じています。
これから
まだ開発中(WIP)ですが、情報系の資格を中心に、日本で人気のある試験へ少しずつ広げていく予定です。直近では、間違えた問題だけを集中的に復習できるモードを強化したいと考えています。使ってみての気づきや改善点は、またこのブログに書いていきます。