英語を学びたい人の現状・目標・生活の制約を100問の問診で聞き取り、その人が実際に続けられる実在の教材と1週間の進め方を名指しで提案するWebアプリ(PWA)。提案して終わりではなく、いつでも相談でき、やったことを記録して「続いている」と分かるところまでを含む。
出発点は「単語を学びたい。だけど単語をやる時間が…家事が忙しい」という一言。これに対して「手が塞がっている時間が長いので耳から入れる形にしましょう。『キクタン』の音声だけを家事中に流し、机に向かえる週2回だけ本を開きます。1回5分・1日2回で1週間56語」と返せることを目標にしている。
AIに「おすすめの参考書は?」と聞くと、存在しない本のタイトルを自信を持って答える。人に渡すアプリでこれは致命的なので、AIに教材を選ばせない構造にした。
[問診] 全100問。コア24問だけで診断でき、詳細76問は任意
↓
[手持ちの評価] すでに持っている教材で足りるかを先に判定する
↓
[絞り込み] 実在教材だけのDBをタグで検索し、スコア順に並べる
← ルールベース。AIを使わない。決定的で、無料で、一瞬
↓
[AI] 選ばれた教材について「あなたにこれが合う理由」と週プランを執筆
← 教材名は一切生成させない
**教材名・出版社・価格・音声の入手方法は必ずDBの値を画面に出す。**AIが書くのは理由の文章だけ。AI(Gemini)が落ちても、教材の選定はルールだけで完結しているので診断結果は必ず出る。
もう一つの狙いは、提案の根拠を全部見せること。「AIが書いた理由」だけでは、なぜその教材なのかを確かめられない。そこでルールが付けた**点数の内訳(加点・減点)**と、候補から外した教材とその理由を一次情報として画面に出す。除外理由には利用者の回答のどれが根拠になったかを書く —— 「1日に使えるのは10分と答えたのに対し、この教材は1回に最低30分必要だからです」のように。これが読めれば、条件をどう変えれば選択肢が増えるかも分かる。
スマホでホーム画面に追加して、毎日開く前提のアプリ。
最初に問診に答えると、手持ちの教材の評価・買い足す教材・今週の進め方が出る。以降は「今日やること」を見て、終わったら記録を付ける。迷ったら相談画面でAIに聞く。教材を買い足したら手持ちに登録し、再診断すると提案が入れ替わる。
コア24問(5分ほど)を終えた時点で診断でき、詳細はあとから足せる。途中でやめても回答は残る。
以下はデモ版の画面。学習者は架空の「花子さん」(目標: 海外出張の会議についていける / 使える時間: 平日は家事の合間の30分、週末は机に向かって1時間)で、記録も相談履歴もすべて作り物。教材168件だけは実在のもので、絞り込みは本番と同じコードが動いている。
①診断結果の入口。まず「すでに持っている教材で足りるか」を先に見る。

新しく買う話をする前に、手持ちで埋まっている技能・埋まらない技能・使えない場面を並べる。「新しく買う必要はありません」と言えることがこのアプリの価値なので、ここを結果の一番上に置いている。
②選んだ教材と、機械が付けた判定の内訳。

上段の文章は本番ではAIが書く。ただしAIが書いてよいのは理由の文章だけで、教材名・出版社・価格・音声の入手方法はDBの値をそのまま出す。下段はルールが付けた加点・減点の内訳で、順位が決まった理由そのもの。
③候補から外した理由も、利用者の回答に紐づけて出す。

「予算を3,000円までと答えたのに対し、12,000円だからです」のように、どの回答が根拠かを書く。これが読めれば、条件をどう変えれば選択肢が増えるかも分かる。
④1週間の進め方。どの場面でやるかまで決める。

紙の単語帳は「通勤・移動中」、音声だけで進むものは「家事をしながら」に割り振られている。手が塞がる時間・目が使えない時間に、手や目が要る教材を置かない。週7日を埋めず、2日を予備日として空けてある(1日崩れた時点で全部やめてしまうため)。
⑤教材は実在するものだけ。全168件をタグで絞れる。

「手が塞がっていてもOK」「目を使わなくてOK」「無料だけ」「5分から」で絞り込む。AIに一件も生成させていない。
⑥スマホ(基準幅375px)で毎日開く前提の作り。

ホーム画面に追加してアプリのように使える。開いて最初に出るのは「今日やること」と続いている日数だけ。
上部の帯はデモ版だけのもの。本番のアプリには出ない。
公開URLをそのまま見せられないので、ログイン不要・架空データのデモ版を別フォルダ(eigo-coach-demo)に作ってある。本体は読むだけで、1行も書き換えていない。
pg や Supabase のパッケージ自体を package.json から外してある。フラグで止める作りにすると、入れ忘れたときに本物のDBへ繋がる側に倒れるためvoice_required(声出しが必須か)の判定は、勘ではなく対照を取って決めた。当初の判定では「話すための英文法」というタイトルの読む本や、「音読すると効果的」と推奨されているだけのリスニング教材まで誤って true になった(同じ理由の誤検知が25件)。最終的に4条件に絞り、声出しが必須のはずの10件が全てtrue・黙って進められるはずの12件が11件falseになることを実測して確定している