---
title: "友だちとオンラインで遊べるようにする"
description: "ゲーム向け。 AIエージェントに 「オンラインで対戦できるようにして」（または「友だちと遊べるようにして」）と頼みます。"
url: "/ja/docs/guides/play-online/"
lang: ja
index: "/ja/llms.txt"
---
# 友だちとオンラインで遊べるようにする

**ゲーム向け。** AIエージェントに **「オンラインで対戦できるようにして」**（または「友だちと遊べるようにして」）と頼みます。エージェントは全テンプレートに入っている`multiplayer`のSkill（`.claude/skills/multiplayer/`と`.agents/skills/multiplayer/`）に沿って、KUMODeckの[マルチプレイのルーム](/ja/docs/guides/multiplayer/index.md)の上に組み立てます。サーバーのコードを書く必要はありません。

## 最初に 1 回だけ質問します（料金つき）

オンラインの遊び方に「これが正解」はないので、エージェントは作る前に **1 回だけ**、ふつうの言葉で聞きます。番号で答えても、「おまかせ」と言うだけでもかまいません。

1. **誰と遊ぶ？** 友だち（6文字の番号を送って同じ部屋に入る）／知らない人とも（自動で組み合わせる）／両方
2. **ゲームの速さは？** 順番に動かす・会話が中心／のんびりリアルタイム（協力・パーティー）／速いアクション
3. **ずる（ありえない点数など）を止めたい？** 気にしない（仲間うちで遊ぶだけ）／止めたい（順位に残るスコアや賞品がある）
4. **おまかせ**：ゲームに合う中でいちばん安いやり方をエージェントが選びます

どのやり方も、まず料金を出します。4人で30分遊んだ1回あたり、前払いの残高から原価どおりです（数字は目安で、約束ではありません）。

| やり方 | 1回あたりの料金 | あきらめること |
|---|---|---|
| リンクかQRを送り、返事のリンクを送り返してもらう（友だち） | **完全に0セント**（KUMODeckを通りません） | やり取りが2回になります。回線によっては直接つながらず、遊べないことがあります（そのときは6文字の番号で） |
| 6文字の番号を1回伝える | 部屋に入る分：100万回で約50セント（目安）＋下のどれかのやり方の料金 | — |
| KUMODeckを通して届ける | 順番に動かす **約0.31セント**（$5で約1,600回）・のんびりリアルタイム **約0.39セント**（約1,280回）・速いアクション **約0.47セント**（約1,060回） | ほかの人に見えるものはありません。ゲームのルールの判定まではしません（下の表） |
| プレイヤーどうしを直接つなぐ | ゲーム中のやり取り **0セント**・部屋に入る分 **0.01セント未満**（目安・まだ計測していません） | 相手に住んでいる地域の目安が見えます。ずるは止められません。最大8人 |
| 直接つなぎ、必要なときだけKUMODeckを通す | 直接の料金＋通した分（送った量で計算・1 GBあたり$0.05）：順番に動かす0.01セント未満・のんびり約0.2セント・速いアクション約0.3セント（目安） | ずるは止められません。通したときは住んでいる地域は隠れます |
| 直接だけ（KUMODeckを通さない） | やり取り **0セント**・部屋に入る分 0.01セント未満 | 直接つながらない組み合わせの人どうしは、いっしょに遊べません |

答えからエージェントが選ぶ設定:

| 答え | エージェントが書く設定 |
|---|---|
| ずるを止めたい、または9人以上 | `"transport": "server"`（既定） |
| 友だちだけ＋おまかせ | リンクかQRで招待（部屋を使わない・SDKのリンクでつなぐ道具）。つながらないときは6文字の番号 |
| 友だちだけ | `"transport": "p2p"`、`"p2p": { "relay": "fallback" }`（まず直接、つながらないときだけ通す） |
| 知らない人とも、または両方 | `"transport": "p2p"`、`"p2p": { "relay": "always" }`（知らない人に住んでいる地域を見せない） |
| おまかせ | 合う中でいちばん安いもの：`"p2p": { "relay": "fallback" }`。順位に残るスコアや賞品があるゲームなら`server` |
| 通す料金を0にしたいと頼んだとき | `"p2p": { "relay": "never" }`（つながらない人が出ることがあります） |

## エージェントがすること

1. ルームをONにし、答えに合うモードを足します（たとえば1対1なら2人）。
   ```sh
   kumodeck features on multiplayer
   kumodeck config push                     # 開発用
   ```
   ```json
   { "multiplayer": { "modes": [{ "key": "duel", "minPlayers": 2, "maxPlayers": 2, "fillTimeoutSeconds": 20 }] } }
   ```
2. **オンラインで遊ぶ**ボタンを足します。知らない人とのクイックマッチか、6文字の部屋コードと招待リンクで友だちだけを呼ぶプライベートルームです（`kumo.rooms.quickMatch`、`kumo.rooms.create(mode, { private: true })`、`kumo.rooms.join(code)`）。
3. 手を`room.send`で送り、全員がそろえるべきもの（誰の番か・盤面・スコア）は共有状態（`room.setState`）に置きます。つなぎ直した人にも同じ試合が見えます。
4. つなぎ直しを生かします。SDKが自分でつなぎ直し、サーバーは切れた人の席を20秒残します（ページを読み込み直しても同じ）。
5. 開発用に出し（`kumodeck deploy --env development`）、試し方を伝えます。URLを2つのタブで開き、2つ目に`?player=2`を付けます。本番に出すのは頼んだときだけです。

## 期待してよいこと・よくないこと

| | |
|---|---|
| サーバーが守ること | 誰がどのルームにいるか、部屋コード、ホスト、全員に同じ順で届く共有状態、大きさと回数の上限、BANした人は入れない |
| ゲームの役目 | ルール（手・当たり・勝敗）。改造したクライアントは何でも送れます。ホストに決めさせ、ずるをする価値のあるもの（順位に残るスコア・報酬）は自分の[Functions](/ja/docs/guides/functions/index.md)とデータベースで確かめます |
| 上限 | 1ルーム最大64人、1人あたり毎秒30通、1通16 KB、共有状態64 KB |
| 向いている | ターン制・ボードゲーム・カードゲーム、クイズ、パーティーゲーム、協力プレイ、少人数のカジュアルなリアルタイムのゲーム |
| 向いていない | サーバーがゲームを動かす必要のある速い対戦（FPS、ロールバックのある格闘ゲーム、ラグの補正） |

ルームは全員が抜けると何も残しません。進み具合は[クラウドセーブ](/ja/docs/guides/saves/index.md)に、履歴のあるチャットは[リアルタイムの部屋](/ja/docs/guides/realtime/index.md)（`chat`のSkill）を使います。利用料は前払いの残高から原価どおりです（[料金](/ja/docs/pricing/index.md)に例があります）。
