← 一覧に戻る
🎧
個人用PWA

英語学習コーチ

英語を学びたい人の**現状・目標・生活の制約**を100問の問診で聞き取り、その人が実際に続けられる**実在の教材**と**1週間の進め方**を名指しで提案するWebアプリ(PWA)。提案して終わりではなく、いつでも相談でき、やったことを記録して「続いている」と分かるところまでを含む。 出発点は「単語を学びたい。だけど単語をやる時間が…家事が忙しい」という一言。これに対して「手が塞がっている時間が長いので耳から入れる形にしましょう。『キクタン』の音声だけを家事中に流し、机に向かえる週2回だけ本を開きます。1回5分・1日2回で1週間56語」と返せることを目標にしている。

実際のアプリを開く ↗

💻 本体の公開URLは開くとログイン画面が出ます(特定のお一人にお渡しする前提で、アプリ内に新規登録の導線がありません)。そこで**ログイン不要・架空データのデモ版を別に用意しました**が、まだデプロイしていません(デプロイ待ち)。デモ版のフォルダは `C:\Users\utsus\Desktop\AIの作業場\eigo-coach-demo\apps\web`。手元で見るには、そこで `npm install` → `npm run build` → `npx.cmd next start -p 3414` を実行し http://localhost:3414 を開いてください(**デモ版はDBの接続情報もAIのAPIキーも持っていないので、.env.local は不要です**)。下の画面写真はすべてこのデモ版のものです。

保存場所: C:\Users\utsus\Desktop\AIの作業場\eigo-coach\apps\web

なぜ作ったか

AIに「おすすめの参考書は?」と聞くと、存在しない本のタイトルを自信を持って答える。人に渡すアプリでこれは致命的なので、AIに教材を選ばせない構造にした。

[問診]  全100問。コア24問だけで診断でき、詳細76問は任意
   ↓
[手持ちの評価]  すでに持っている教材で足りるかを先に判定する
   ↓
[絞り込み]  実在教材だけのDBをタグで検索し、スコア順に並べる
            ← ルールベース。AIを使わない。決定的で、無料で、一瞬
   ↓
[AI]  選ばれた教材について「あなたにこれが合う理由」と週プランを執筆
      ← 教材名は一切生成させない

**教材名・出版社・価格・音声の入手方法は必ずDBの値を画面に出す。**AIが書くのは理由の文章だけ。AI(Gemini)が落ちても、教材の選定はルールだけで完結しているので診断結果は必ず出る。

もう一つの狙いは、提案の根拠を全部見せること。「AIが書いた理由」だけでは、なぜその教材なのかを確かめられない。そこでルールが付けた**点数の内訳(加点・減点)**と、候補から外した教材とその理由を一次情報として画面に出す。除外理由には利用者の回答のどれが根拠になったかを書く —— 「1日に使えるのは10分と答えたのに対し、この教材は1回に最低30分必要だからです」のように。これが読めれば、条件をどう変えれば選択肢が増えるかも分かる。

どういう場面で使うか

スマホでホーム画面に追加して、毎日開く前提のアプリ。

最初に問診に答えると、手持ちの教材の評価・買い足す教材・今週の進め方が出る。以降は「今日やること」を見て、終わったら記録を付ける。迷ったら相談画面でAIに聞く。教材を買い足したら手持ちに登録し、再診断すると提案が入れ替わる。

コア24問(5分ほど)を終えた時点で診断でき、詳細はあとから足せる。途中でやめても回答は残る。

自動化されているポイント

  • 問診の回答から、生活の制約に物理的に合わない教材を機械的に候補から落とす。手が塞がる時間しか無い人には手が要る教材が、声を出せない人には音読・シャドーイングが必須の教材が出ない。「家事中に単語帳を開いてください」という実行不可能な提案が構造的に出ない
  • すでに持っている教材で足りるかを先に判定し、足りていれば「新しく買う必要はありません」と言う。手持ちは「新しく買う候補」から自動で外れる
  • 教材を選んだ理由・懸念点・外した理由を、AIではなくルールの計算過程からそのまま文章にして出す
  • AIが書いた週プランを、そのまま信じずに検証して直す。存在しない教材のタスクは捨て、手が塞がる場面(家事中・運転中)に手が要る教材が割り当てられていたら机の時間に移し、1日の合計が申告した時間を超えていたら丸める
  • 週プランは意図的に1〜2日空ける。7日を全部埋めると1日崩れた時点で全部やめてしまうため、空の日を「休み(予備日)」として表示する
  • AIが混雑(503)を返したら自動で引き直し、無料枠切れ(429)なら待っても直らないので即座に定型文へ切り替える。どちらでも診断は出る

使い方(画面の流れ)

以下はデモ版の画面。学習者は架空の「花子さん」(目標: 海外出張の会議についていける / 使える時間: 平日は家事の合間の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行も書き換えていない。

  • **DBに物理的に到達できない。**接続情報を1つも持たず、pg や Supabase のパッケージ自体を package.json から外してある。フラグで止める作りにすると、入れ忘れたときに本物のDBへ繋がる側に倒れるため
  • **AIのAPIキーを持たない。**本体はGeminiの無料枠に依存しているので、不特定多数が触るデモで生かすと渡す相手の枠を使い切ってしまう。デモの相談の返答は固定の文章で、その旨を返答の末尾に必ず書いている
  • 教材168件だけは実在のものをそのまま使う(書誌情報のみで個人情報を含まない)。ここを架空にすると、このアプリの見せ場が何も残らない
  • 検索避けを3層(metadata / robots.txt / X-Robots-Tag)入れてある

訴求ポイント

  • AIに事実を作らせない設計。教材の選定はルール、AIは文章だけ。存在しない本を薦める事故が構造的に起きない。同じ作りは「AIに任せたいが嘘は許されない」他の業務にもそのまま使える
  • 提案の根拠を全部開示する。選んだ理由・懸念点・外した理由まで出すので、利用者は結論を検証でき、条件を変えれば選択肢が増えることも分かる
  • 教材1点ごとに「手が塞がっていても使えるか」「目が離せなくても使えるか」「声を出さないと成立しないか」「1回に最低何分要るか」を持たせてある。ここが提案精度の中心で、生活の制約にそのまま当たる
  • voice_required(声出しが必須か)の判定は、勘ではなく対照を取って決めた。当初の判定では「話すための英文法」というタイトルの読む本や、「音読すると効果的」と推奨されているだけのリスニング教材まで誤って true になった(同じ理由の誤検知が25件)。最終的に4条件に絞り、声出しが必須のはずの10件が全てtrue・黙って進められるはずの12件が11件falseになることを実測して確定している
  • 既存18アプリと認証を完全に切り離した。18アプリは同一のSupabase Authを共有していてメールアドレスの許可リストが無く、標準の認証でアカウントを作ると営業スカウトAI・契約AIなどにもログインできてしまう。専用の認証(bcrypt + httpOnly Cookie + DB照合)を持たせ、既存アプリを1行も触らずに分離した
  • 月額0円で運用できる(Gemini無料枠 + Vercel Hobby + 既存Supabaseへの相乗り)

現時点でやっていないこと

  • デモ版のデプロイがまだ。ログイン不要・架空データのデモ版は作ってあるが(上記)、公開はこれから。それまでは手元で起動しないと中の画面を見られない
  • 効果の保証はしない。教材の推薦は学習支援であり、スコアの向上を約束するものではない旨を画面に明記している
  • 代表はアプリにログインできない設計だが、サーバー(Supabase)の管理画面からは中身が見られる状態が技術的に残る。相談内容が物理的に見えなくなるわけではない
README原文を見る →