推しアイデア
・台パンで神経衰弱 ・GitHubの開発体験をRPG風に
―
・台パンで神経衰弱 ・GitHubの開発体験をRPG風に
台パンで神経衰弱がしたかった。
・ARkit ・Claude Agent SDK
台パンRPG は、AI による TDD 開発を RPG の戦闘体験にするツールです。リポジトリのオープン Issue が「敵」になり、AI エージェント(ForgeAgent)がテスト駆動で実装して PR をマージすると敵が撃破されます。
仕組みを一言でいうと
iOS アプリは「AR のガワ」にすぎません。中身の RPG 本体は Cloudflare に置いた Web アプリで、それが Cloudflare Tunnel 越しに手元のローカル開発マシンで動く Runner へつながり、Runner が Claude と GitHub を動かしています。
「公開された Web/アプリ」と「手元の PC で動くサーバ」をつなぐのが Cloudflare Tunnel の役割。
TableBangConcentration。役割は2つ。
?backend=<トンネルURL> を付け、Web にバックエンドの接続先を渡します。つまり「世界・戦闘・賢者の家(ステータス/枠の設定)」などの UI はすべて Web 側で、ネイティブは AR 報酬ゲームと WebView の器に徹しています。
github-issue-rpg.pages.dev に配信される、React / Zustand / Phaser 製の Web アプリ。ネイティブの WebView はこの公開サイトを HTTPS で読み込みます。RPG の画面・状態管理・サーバとの WebSocket 通信はここが担います。
xxxx.trycloudflare.com のような一時的な公開 URL。手元の PC で動く Backend を、外部(公開 Web やスマホ)から到達できるように中継します。これが無いと、公開された Web から手元の Runner へ届きません。
Fixes #n で Issue が自動クローズ)。query()(loadout から model / mcpServers / agents を注入)と、必要テストの構造化生成を担います。AR 報酬ゲームだけがネイティブ、それ以外は Web——この2つは WKWebView の JS ブリッジでやり取りします。
window.webkit.messageHandlers.bridge.postMessage(...) で reward.start(台パンゲームの開始+カード一覧)を渡す。window.__claimRewards([...]) を呼んで、獲得した効果 ID を Web へ返す。cmd.connect(repoURL) を WebSocket で送る(Cloudflare Tunnel 経由でローカルへ)。world.state(敵=Issue)を Web へ返し、世界に敵が並ぶ。cmd.forge(issueNumber) を送る。query() で起動(loadout の model / mcpServers / agents を実注入)。「まずテストを書いて失敗(RED)→ 最小実装で成功(GREEN)」の TDD で実装する。npm test が通ったら push → PR 作成 → squash マージ(本文の Fixes #n で Issue が閉じる)。battle.defeated を返し、敵が撃破される。reward.start { cards: [{ effectId, label }] } をブリッジでネイティブへ渡す。__claimRewards([effectId, …]) で確定した効果 ID を Web へ返す。cmd.reward.claim { effectIds } を送り、Runner が applyEffects で loadout の枠を増減する。player.status を返し、賢者の家(ステータス画面)に枠が反映される。?backend= クエリで Web に渡すだけ。Web はそれを WebSocket の接続先として使います。まとめると、データの通り道は 📱/Web → Cloudflare Tunnel → ローカル Backend/Runner → Claude・GitHub という一本道で、Tunnel が「公開」と「手元」の橋渡しをしています。