2026/08 - 現在

Kotoyokai(旧 Yokai no Sensei)

BunTypeScriptReactSQLiteDrizzlesqlite-vecCapacitorStripeRailway

https://kotoyokai.com

2026-09-17 に Yokai no Sensei から Kotoyokai に改名。旧ドメインは新ドメインへリダイレクト。

TikTok: https://www.tiktok.com/@yokai_no_sensei
YouTube: https://www.youtube.com/@yokai_no_sensei

概要

  • 妖怪・侍・忍者など 14 体のキャラクターと日本語で会話しながら学ぶチャットサービス。米国など日本国外の英語話者が主要ターゲット
  • キャラクターごとに初期日本語レベルが異なり、初歩的な日本語しか使えず少しずつ成長するキャラと、最初から流暢に話すキャラがいる
  • 返答は漢字にルビ付き、音声で読み上げ。本文中の単語を押すと解説が出て、個人の単語帳に保存できる(イラスト付き)
  • フレーズ検索: 旅行者向けの場面別フレーズ約 300 件をベクトル検索。ログイン不要でキャラの声で読み上げ
  • 英語漫画コーナー、キャラ別のチャット背景と衣装、常時動く待機ループ動画
  • iOS / Android アプリ(Capacitor)を実装済み。ストア提出準備中
  • ログインは Google / Apple / メール OTP

設計上のポイント

  • Bun.serve の HTML import によるフルスタック構成(バンドラ設定なし)。SQLite + Drizzle、マイグレーションは起動時に自動適用
  • LLM は OpenAI / Google / Anthropic を SDK を使わず fetch で直接呼ぶプロバイダアダプター。チャット本体はユーザーが精度 3 段階から選び、単語解説は別モデルに固定
  • 返答は japanese / english / voice / words / moderation の 1 つの JSON 構造を強制。ルビ「漢字[よみがな]」記法を <ruby> にパースして表示
  • 音声合成は Fish Audio / DashScope を切り替えられるアダプター。漢字の誤読対策に OpenJTalk の小さな読みサービスを別プロセスで置き、LLM の読みと食い違う語だけ音素タグで指定する。落ちても本文をそのまま送るフォールバックで動く
  • フレーズ検索は sqlite-vec と OpenAI の埋め込み。チャットの発言は検索クエリに使わない
  • 課金は毎日リセットされる無料予算と、繰越ありのストックの 2 系統ポイント制。消費 pt はモデル別に実測原価比例。Stripe のパック・30 日パスを実装済み(自動更新サブスクは廃止)
  • 安全機構: 追加の LLM 呼び出しなしで返答生成と同じ JSON で sexual / self-harm / プロンプトインジェクションを判定し、定型文に差し替え。抑止ターンは以後の履歴から除外。AI 開示・自殺念慮プロトコルの公開ページ、California SB 243 対応
  • 外部 API のコストをモデル別の価格カタログで記録し、管理画面で集計。未知のモデルは起動時に fail
  • 管理者向けに日別のチャット要約(本文を読まずに使われ方を把握する)

SNS 運用

  • TikTok と YouTube ショートに、2 キャラ掛け合いの 15 秒スキットを毎日投稿。構成は「英語フック → 日本語フレーズ実演 → 英語で解説 → 日本語で復唱 → 音声 CTA」
  • 動画はキャラの参照画像を渡す reference-to-video の生成モデルで音声込みに生成し、カラオケ字幕を付ける。予約投稿と数値取得は Playwright のスクリプトで自動化
  • 題材・キャスト・冒頭型を 1 動画 1 行の実験台帳で管理し、再生数・継続率のスナップショットで採用判断
  • TikTok は視聴者が日本に偏り英語圏の検証に使えないと判定し、2026-09 から YouTube を主軸に切替。英語の検索語をタイトルに入れた本が検索流入で伸びた
  • キャラの絵柄ドリフト(老化・人間化・体格変化)との戦いが制作の主な手戻り要因

規模感

  • 期間: 2026/08/14 〜 継続運用中
  • コミット: 372 / TypeScript・TSX: 367 ファイル・約 7.2 万行(うちテスト 148 ファイル)/ docs 52 ファイル
  • 1 人開発(企画・実装・法務文書・キャラ設定・画像/動画生成・SNS 運用)