テキストを打ち込むたびに世界が生まれるRPG — Cloudflare Dynamic Workers × スマホLLM構想

ゲーム制作技術
この記事の結論:スマホ内ローカルLLMがプレイヤーの自由入力をコードに変換し、Cloudflare Dynamic Workersがそれをサーバーで即実行する――この2つを組み合わせると、RPGの「世界」はデータベースの中ではなく、生成され続けるコードの中に宿る。事前定義された選択肢を超えて、プレイヤーが世界の法則そのものを書き換えるゲームが、技術的にはもう作れる。

「ドラゴンの翼をもぎ取って盾にする」とタイプした。

0.3秒後、サーバー上に「翼の盾」の防御計算ロジックが生成され、他のプレイヤーがそれを拾えるようになっていた。

――これは今のゲームでは不可能だ。「翼の盾」というアイテムは、事前にデータとして定義されていなかったから。素材もドロップテーブルも、合成レシピも、何ひとつ用意されていない。だから存在できない。ゲームの世界は、開発者が事前に想定したものしか置けない箱庭なのだ。

だが、この前提はもう崩せる。インディー開発者として、今日はその構想を書く。

従来のRPGの限界 — 全部「用意されたもの」しか存在できない

RPGの構造はシンプルだ。アイテムテーブル、NPCテーブル、クエストテーブル、フラグ管理。プレイヤーの行動は、事前に定義された選択肢のどれかに写像される。「剣を振る」「話しかける」「逃げる」。どれだけ選択肢を増やしても、それはあらかじめ書かれたif-elseの分岐でしかない。

テキストアドベンチャーも同じだ。プレイヤーが自由に文章を打ち込めるように見えて、返ってくるレスポンスは開発者が書いたテキストのどれか。あるいは近年ならLLMがもっともらしい文章を生成する。だがそれは「フレーバーテキスト」に過ぎない。ゲーム内の物理法則やアイテムの効果を書き換えはしない。

本質:現行のRPGにおいて「世界」とはデータベースのスナップショットだ。プレイヤーはその中を歩き回ることはできても、新しいレコードを定義する権限は持っていない。

2つの技術が揃った

この根本制約を壊す鍵が、ここ数年で同時に揃った。

1つ目はスマホ内ローカルLLMだ。Apple Intelligenceの3Bオンデバイスモデル、Google Gemini Nano、Microsoft Phi-3 mini。通信を一切挟まずにスマホのNPU上で動き、自然言語からJSONやJavaScriptコードを吐き出せる。推論コストはゼロ、レイテンシは実質ネットワーク遅延ぶんだけ短くなる。

2つ目はCloudflare Dynamic Workers(Workers for Platforms / Dynamic Dispatch)だ。これは普通のWorkersと違い、実行時に文字列として受け取ったコードをV8 Isolateサンドボックス上で即座に起動できる。ユーザー単位に隔離された実行環境を、ミリ秒で立ち上げて破棄できる。コード起点のアーキテクチャに特化している。

✓ 面白いこと:スマホで生成されたコードを、サーバーで安全に実行するという流れが、両端で揃った。この組み合わせはまだ誰もゲームに本気で持ち込んでいない。

仕組みを図解する

フローはシンプルだ。

プレイヤー入力 → スマホLLMがゲームAPIに沿ったJSコード生成 → Dynamic Workersへ送信 → V8サンドボックスで実行 → ゲーム状態が更新

「ドラゴンの翼をもぎ取って盾にする」と打ち込んだとき、スマホLLMが生成するのはテキストではなくコードだ。

// スマホLLMが生成するコード
export default function(gameState) {
  const wing = gameState.lastBattleDrops.find(i => i.type === 'dragon_wing');
  if (!wing) return { error: 'no_wing_available' };

  const shield = {
    id: crypto.randomUUID(),
    name: '翼の盾',
    type: 'shield',
    defense: wing.size * 12,
    special: 'fire_resist_20',
    createdBy: gameState.playerId,
    createdFrom: wing.id
  };
  return { action: 'create_item', item: shield };
}
// → Dynamic WorkersでV8実行 → ゲームDBに登録 → 他プレイヤーが拾える

重要なのは、このコードが「実行可能なオブジェクト」としてサーバーに残ることだ。アイテムは名前と数値ではない。ロジックそのものがアイテムになる。

ワクワクする3つのシナリオ

シナリオA: アイテムが「世界に残る」

プレイヤーが作った「翼の盾」のコードは、Workers上に登録される。別のプレイヤーがそれを拾うと、同じコードが走って同じ挙動をする。さらに別のプレイヤーが「翼の盾を改造して雷の盾にする」と打ち込めば、LLMは既存コードを参照して差分コードを生成。

アイテムは固定値ではない。プレイヤーの手を経るたびに進化するコードだ。職人の系譜のように、アイテムに作成者の履歴がコミットログとして刻まれる。

シナリオB: プレイヤーの選択がNPCになる

「商人を脅して店を乗っ取る」と打ち込んだプレイヤーがいるとする。スマホLLMはその選択を反映したNPCの行動AIコードを生成する。そのNPCは以後、「脅された記憶」を持った行動パターンで動く。他プレイヤーがその商人に会うと、なぜか警戒している。なぜか裏ルートの品物しか置いていない。

「他プレイヤーの選択が、自分の世界の因果になる」。これはMMOの体験を根本から変える。

シナリオC: ルールを書き換える

「この洞窟では魔法が使えない」とプレイヤーがロールプレイ的に宣言する。LLMはその制約コードを生成してWorkersに登録する。そのプレイヤーが洞窟にいる間、実際に魔法判定が弾かれる。

本質:プレイヤーが「世界の物理法則」を書いている。これはフレーバーではなく、実行されるルールだ。

なぜスマホLLMじゃないといけないのか

観点 サーバーLLM スマホLLM
レイテンシ 全プレイヤーで競合 各端末で独立
コスト 入力量に比例して爆発 ゼロ(端末負担)
プライバシー 全履歴をクラウドへ 端末内で完結
個人化 ユーザー分離が困難 過去の選択を全部コンテキスト化可

特に最後が効く。スマホLLMは「そのプレイヤーだけのゲーム知識」をコンテキストとして抱え込める。ファインチューニングは不要。そのプレイヤーの物語を、そのプレイヤーの端末だけが知っている

立ちはだかる壁(正直に)

⚠ 課題:「何でもできる」は「何でも壊せる」と表裏一体。技術的にも設計的にも、壁は4つある。

1. コード検証問題。悪意あるプレイヤーが無限ループや巨大メモリ割り当てを仕込んだらどうする。――ただしV8 IsolateのCPU時間制限・メモリ上限・APIホワイトリスト化で実用上は潰せる。Cloudflare Workersは既にこれを本番運用している。

2. ゲームバランス崩壊。「攻撃力9999の剣」をLLMに作らせたらどうする。――生成コードをバリデーション層に通し、数値上限や経済系パラメータを正規化する。LLMの出力は「意図の翻訳」、バランス管理は従来通りサーバー側のガードで。

3. スマホLLMの性能限界。3Bクラスのコード生成精度はまだ不安定な場面がある。――だが用途を「ゲームAPIに合わせた狭いDSL」に絞れば、小型モデルでも十分な精度が出る。生成対象をフルのJSではなく制限されたサブセットにすればいい。

4. リプレイ性・公平性。同じ入力で違う結果が出ると対戦ゲームで破綻する。――シード固定+決定論的実行、あるいはPvPモードでは生成コード使用を制限する設計で回避できる。

いずれも「解決策のある壁」だ。不可能ではない。

筆者の本音

正直に書く。これはまだ実装していない。構想だ。

でも、なぜこれを書いたか。インディー開発者として、ゲームデザイナーの仕事が根底から変わる予感があるからだ。これまでゲームデザイナーは「遊び場の設計者」だった。マップを敷き、ルールを敷き、プレイヤーはその上を歩く。

だがこの構想が成立するなら、デザイナーは「遊び場」を作らない。世界が自己拡張していくためのAPIと制約と美学を作る。プレイヤーが何を書き込んでも世界として成立する、その「器」を設計する仕事になる。

これは面白い。怖いくらいに面白い。だからこの構想を先に言語化しておきたかった。作るのは自分かもしれないし、これを読んだ誰かかもしれない。どちらでもいい、世に出てほしい。

まとめ

ポイント:スマホ内ローカルLLM × Cloudflare Dynamic Workersで、「プレイヤーの自由入力がコードとして世界に残る」RPGが技術的に可能になった。アイテム・NPC・物理法則すらプレイヤーが書き足せる。ゲームデザイナーの役割は「遊び場の設計」から「自己拡張する世界の器の設計」へ移る。

テキストアドベンチャーの真の進化形は、レスポンスがテキストである限り訪れない。レスポンスがコードになったとき、ゲームの世界は初めて本当の意味で「生き始める」。

このビジョンに共鳴するインディー開発者がいたら、話しましょう。一緒に器を作ろう。

参考ソース

コメント

タイトルとURLをコピーしました