2026/06 - 2026/08

路地裏あやかし合戦

TypeScriptBunReactSQLiteDrizzleTailwindStripeRailway

47都道府県の「ポップな妖怪」を毎日繰り出して合戦し、X のいいね=育成・卵リプ=方向付けとして観客の介入を取り込む。旧称「近畿あやかし合戦」を 2026-07-10 に改名、2026-07-22 に全国化を決定し 2026-07-30 に新エンジン v3 で本番切替。

Xアカウント: https://x.com/ayakashi_kassen

観戦 Web UI: https://ayakashi-kassen.net

概要

  • 卵 → 孵化 の流れで X に登場。卵リプで誕生 LLM を方向付け、いいねが妖怪ステの開眼として効く(log 圧縮の連続値配分)
  • 最大 3vs3 のターン制オートバトルを都度解決。合戦は選抜投稿方式に切り替え、日次ダイジェストで結果を集約
  • 47都道府県を1アカウント・1世界で運用。近畿・関東の地方ブロック並列運用は v3 移行時に廃止
  • 誕生を巻物口上 + 音声つき mp4 で送出、朝の妖怪占い(uranai)・週2のウワサ番付・cheer(応援)・auto-reply(会話モード)など投稿種別を拡張

v3 エンジン(2026-07-30 本番切替)

  • 投影テーブルを全廃してドメインイベント + in-memory fold に再設計
  • tick 廃止 → ゲーム内 datetime + Clock 注入で決定論を保ったまま実時計と一致
  • 旧エンジン(v2)実装は同日一括削除

ゲームの拡張(2026-08〜)

  • 気質(trait)プールを5→14種に拡張、担当(tanto)プールも拡充
  • 卵リプの採用判定に著者内正規化を追加(テーマ指定 > 明示的な要望 > 最新、の優先順位で1人の重複採用を裁く)
  • 日次ダイジェストの額縁コピーは LLM 呼び出しをやめ、静的プールと直近実績からの組み合わせに変更
  • auto-reply(会話モード)にメンションタイムラインの取り込みを追加

個別チャット(2026-08〜)

  • 妖怪との1:1個別チャットを実装、本番稼働中。X ログインで開始
  • プランはおためし・一見・常連・馴染み・旦那衆の5段階。日次の送信枠に加え、サイト内通貨「文」(1文=¥1)で枠超過分を追加送信できる(絶対上限あり)。課金は Stripe
  • 会話の記憶容量(メモリ上限)はプラン別に段階を変える
  • 妖怪への操作・脱獄的な入力を検知する「とら丸ゲート」でモデレーション
  • キャラ設定の追加指示はストーリー仕立てのビート進行で注入し、完結する構成にした
  • 妖怪の返答にタップで選べる選択肢を追加、妖怪が「描いた絵」を並べるギャラリーも実装
  • 退会・データ消去(erase)の導線も用意

ユーザー自身が妖怪をつくれる機能も追加(チャット専用・バトル不参加、1体300文、機能フラグで既定オフ)。

匿名入口と課金導線(2026-08〜)

  • X広告からの流入がログイン必須の壁で離脱していた課題を受け、ログインなしで少量チャットできる匿名入口を追加
  • 匿名アカウント+無料枠+IPの上限で原価を有界化し、Turnstile でボット対策
  • 無料枠を超えて使いたい人は、決済の前にメールのワンタイムコード(OTP)で登録してから課金する動線
  • ログイン方法(X/メール)を選べるようにし、既存の X アカウントへのメール紐付けにも対応
  • 公開の料金ページ /pricing を新設

Xのシャドウバン経緯

別アカウントからの検索でヒットしない「シャドウバン」が発生。ハッシュタグ除去や投稿時刻の分散を試みたが改善せず、アカウント若さのペナルティと判断して Pending にしたところ、予定通り1ヶ月ほどで復帰した。

規模感

  • 期間: 2026/06/07 〜 継続運用中
  • コミット: 1,490+ / TypeScript・TSX: 850 ファイル・約 20 万行
  • 1人開発(世界設計・実装・キャラ絵生成・音声生成・X 連携・運用すべて)