1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サブスク疲れで、使った分だけ払うAI英語学習アプリを個人開発して公開した話(①設計思想と技術構成編)

1
Posted at

サブスク疲れで、使った分だけ払うAI英語学習アプリを個人開発して公開した話(①設計思想と技術構成編)

TL;DR

  • 「サブスクに疲れた」という自分の実感から、月額サブスクではなく前払い制・使った分だけ課金のAI英語学習アプリ nyangailab を個人開発し、実際に公開・運用しています
  • スタックは FastAPI + 素のHTML/CSS/JS(SPA) + SQLite + OpenAI + ブラウザのWeb Speech API。外部依存を極力増やさず、python run.py だけで動く構成
  • 単語1万2千語・フレーズ6千7百件以上(資格試験対策から、物理・文学(シェイクスピアの名言等)・軍事・アニメ・コレクター/オークション(鑑定など高額品)・妖怪・絶滅種まで幅広いニッチ語彙)を収録し、AI活用でコンテンツ制作コストを抑えることで低価格を実現しています
  • 決済導線(BASE経由のチャージキー方式)まで含めて実際に稼働中で、「作って終わり」ではなく個人開発として値付け・運用まで一通り経験しました

自己紹介・動機

普段はファームウェア領域のエンジニアをしています。今回、業務外でWebアプリ(しかもAI活用の個人開発サービス)を一から作り、値付け・決済・運用まで通してみたのは、自分の技術の幅を広げる意味もありました。

きっかけは単純で、英語学習アプリのサブスクに疲れたこと。「使うか分からないものに毎月お金を払い続ける」のが嫌で、解約するのも面倒。だったら「無料で制限つきで試せる → もっと使いたい人だけ前払いでチャージ → 使った分だけ消費」というモデルにすれば、この不満は構造的に解消できると考え、そのまま設計思想にしました。

何を作ったか

  • AI英会話: ハンズフリー(無音検出で自動ターン交代)、会話の自動記録・要約、返答例の提案
  • 単語 / フレーズ学習: 英→日・日→英の両方向出題、忘却曲線ベースの間隔反復(SRS)、フラッシュカード
  • リーディング / リスニング / ライティング: AIによる教材生成・内容理解問題・添削
  • ニッチ語彙: 資格試験対策の基礎語彙に加え、物理・文学(シェイクスピア等の名言)・軍事・アニメ・コレクター/オークション(鑑定など高額品)・妖怪・絶滅種のようなマニアックな分野まで収録(現在1万2千語・6千7百フレーズ以上)

技術的な工夫点

1. 追加依存ゼロ主義のマルチユーザー化

外部ライブラリを足さず、標準ライブラリだけでログイン機能を実装:

  • パスワードハッシュ: hashlib.pbkdf2_hmac(passlib/bcrypt不要=ネイティブビルド不要)
  • セッション: hmac署名Cookie(itsdangerous不要)
  • 「現在のユーザー」をcontextvarsで1リクエスト単位に保持し、既存の関数シグネチャを変えずにper-userのガード(利用上限・残高)を効かせる

「追加ビルドなしにどの環境でも動く」可搬性を保ったまま認証を足せました。

2. コンテンツは共有、進捗はper-user

単語・フレーズ本体(英文・例文・音声・詳細)は全ユーザーで共有しつつ、習得度・SRS・正答数といった進捗だけをuser別で持つ設計。一覧・出題は「コンテンツ×その人の進捗」をLEFT JOINしたサブクエリをFROMに使い、進捗が無い項目はCOALESCEで既定値扱いにすることで、既存のWHERE/ORDER句をほぼ無改造のままper-user化できました。

3. "使った分だけ" を支えるコストガード

OpenAIを叩く機能(英会話・教材生成・翻訳・音声)には、ユーザー別の日次/月次コスト上限と前払い残高のガードを実装。無料枠に達したら、残高がある人だけ継続利用できます。一方で単語・フレーズの学習はDB処理だけでAIを使わないため、いくら回しても無料。「課金が必要なのはAIが動くところだけ」という線引きを明確にしています。

4. AI原価を抑える事前生成

単語の詳細(発音記号・意味・例文・派生語・語源など)や音声は事前に一括生成してキャッシュし、ユーザー操作時は基本キャッシュヒットで無料にしています。全語のIPA発音記号・例文和訳もバックフィルしてカバレッジを上げました。AIをコンテンツ制作の効率化に使うことで、サービス自体の価格を抑える、という設計です。

5. コンテンツポリシーのサーバー側ゲート

一部のセンシティブな語彙も学べる設計にしていますが、既定は制限。解放は管理者が明示的に許可したユーザーのみで、クライアント側のフラグではなくサーバー側でユーザー権限を見て出し分けています。

公開・運用まで実際にやってみて

決済はBASEを経由したチャージキー方式(購入→キー発行→アプリ内で償還)で構築し、実際に本番で購入から残高反映までの一気通貫の動作を確認済みです。個人開発というと「作って終わり」になりがちですが、価格設計・法務対応(特定商取引法表記等)・決済導線・運用(フルフィルメント管理画面でのBASE注文の自動検知等)まで一通り経験できたのは大きな学びでした。

これから(②に続く予定)

この記事は①として全体設計を紹介しました。反応があれば、②として「BASE API連携による注文自動検知の実装」や「AI原価を抑える事前生成パイプラインの詳細」など、個別トピックを深掘りする記事も書く予定です。

試してみたい方へ

ログイン不要ですぐ単語・フレーズを閲覧でき、無料の範囲も広めに取っています。よければ覗いてみてください。

https://study.nyangailab.com/

質問・感想・技術的なツッコミ等、歓迎です。


スタック: Python 3.x / FastAPI / Uvicorn / SQLite(stdlib sqlite3) / 素のHTML・CSS・JS(SPA) / OpenAI SDK / ブラウザ Web Speech API(STT) + SpeechSynthesis(TTS)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?