本文へ移動

友達とこいこいをオンライン対戦

最終更新日:

友達とオンラインでこいこいを遊ぶには、Googleでログインして部屋を作り、招待リンクを友達に送ります。友達がリンクを開いてログインし、参加を申請すれば、すぐに対戦が始まります。無料で、スマホ・タブレット・パソコンのブラウザから遊べます。あなたの札は、相手にもサーバーにも見えません。

必要なもの

  • 2人ともGoogleアカウント。オンライン対戦にはログインが必要です(トップページの「Googleでログイン」)。コンピュータとの練習はログインなしで遊べます(CPUと練習)。対戦相手に表示されるのはプロフィールの名前とアバター、「#A34E」のような4文字のタグで、メールアドレスは表示されません。名前とアバターは、アカウントメニューの「プロフィールを編集」で変えられます。
  • ブラウザ。スマホ・タブレット・パソコンの最新のブラウザで遊べます。ダウンロードは不要ですが、アプリとして追加することもできます。
  • インターネット接続。対戦中は必要です。途中で切れても、3分以内に戻れば続けられます(接続が切れたとき・再読み込み)。

2人の言語をそろえる必要はありません。招待リンクには言語の指定が入っていないので、友達が以前に選んだ言語か、ブラウザの言語で、日本語または英語の画面が開きます。

4ステップで友達と対戦

  1. 部屋を作る

    ロビーの「部屋を作る」で「非公開」と回戦数を選び、必要ならパスワードを入れて「部屋を作成」を押します。

  2. リンクを送る

    「招待リンクをコピー」か、スマホなら「共有」を押して、メッセージアプリなどで送ります。6文字の部屋コードを伝えるだけでもかまいません。

  3. 友達が参加する

    友達はリンクを開いてGoogleでログインし、パスワードがあれば入力して「参加を申請」を押します。

  4. 対戦開始

    あなたの端末が自動で入室を許可し、2人の端末が暗号化された接続を作って、第1回戦の札が配られます。

あなた(ホスト)

非公開の部屋 · 6回戦 · 8点以上×2 · ヒントあり

ABC234

https://hanafuda.lemme.dev/#join=ABC234招待リンクをコピー共有

対戦相手の参加を待っています…

招待リンク

友達

部屋ABC234に参加

ホストHana #A34E6回戦 · パスワード付き8点以上の回は点数が2倍になります。アシスト表示あり:合う札が光ります。
部屋のパスワード
参加を申請
あなた(ホスト)が相手を待つ画面と、友達がリンクを開いたときの画面です。待つ画面には、部屋コード、招待リンク、部屋の設定が表示されます。部屋コード「ABC234」とホストの名前は例です。

部屋を作る

ログインすると、トップページがロビーになります。「部屋を作る」の欄では、次の項目を選べます。2つの部屋の設定は、前回選んだものがこの端末に保存されます。

新しい部屋で選べる項目
項目内容最初の設定
公開設定公開:相手を待つ間、ロビーの一覧に表示されます。非公開:一覧には出ず、招待リンクか部屋コードでだけ入れます。公開
パスワード任意です。参加する人は入力が必要です。なし
回戦数6回戦か12回戦を選べます。6回戦
8点以上で2倍8点以上の回は点数が2倍になります(下の「部屋の設定」を参照)。オン
アシスト表示合う札を光らせて示します。オン

「部屋を作成」を押すと、「ABC234」のような6文字の部屋コードが決まり、相手を待つ画面になります。部屋は1人1つまでで、新しく作ると前の部屋は閉じられます。部屋を開いたままロビーに戻ると「作成した部屋ABC234がまだ開いています」と表示され、「部屋に戻る」か「部屋を閉じる」を選べます。その部屋で対戦中のときは「作成した部屋ABC234で対戦中です」と表示され、代わりに「対戦に戻る」か「投了して閉じる」を選べます。新しい部屋を作れるのは、その対戦が終わってからです。離れている間に終わった対戦は「部屋ABC234の対戦は、あなたが離れている間に終わりました」と表示され、「結果を見る」を押すと、その対戦を開いて端末が結果を確認します。部屋での前回の対戦相手が、対戦が終わったときに離れていて、まだ結果を確認していない場合は、ロビーや待機画面から部屋を閉じる前と、新しい部屋を作る前に確認が表示されます。対戦がどう終わったかは、その相手のために部屋に残っているためです。

招待リンクを送る

待機画面には部屋コードが大きく表示され、その下にhttps://hanafuda.lemme.dev/#join=ABC234の形の招待リンクがあります。「招待リンクをコピー」でクリップボードにコピーでき、共有に対応したスマホやタブレットでは「共有」から共有メニューを開けます。部屋コードを押すと、コードだけをコピーできます。

部屋コードを口頭で伝えてもかまいません。友達はロビーの「コードで参加」に入力します。部屋コードは英大文字と2〜9の数字でできていて、見間違えやすいI・O・0・1は使いません。小文字や全角で入力しても、スペースが入っても、招待リンクをそのまま貼り付けても受け付けます。

友達が参加する

リンクを開くとトップページが表示され、ボタンの上に「部屋 ABC234 に参加するには、ログインしてください」と出ます。ログインすると参加ページに移り、ホストの名前、回戦数、パスワードの有無、2つの部屋の設定が表示されるので、友達は条件を確かめてから参加できます。パスワードを入力して「参加を申請」を押せば完了です。

申請はあなたの端末が自動で承認するので、ホストは何もしなくてかまいません。例外は、以前あなたとの対戦を途中で抜けたプレイヤーで、そのときだけ「入室させる」か「12時間入室禁止」かを選ぶよう求められます(対戦のあと)。部屋に入れるのは2人だけなので、友達が入ったあとはほかの人は参加できません。

対戦開始

両方の画面に「安全な接続を確立しています」と表示され、2人の端末だけが持つ鍵を取り決めます。続いて、どちらの端末も結果を操作できないコイントスで最初の親(おや)を決め、2人の端末が協力して札を切り、裏向きのまま配ります(全7段階)。あとはコンピュータとの対戦と同じです。ルールも卓の画面も同じで、部屋の設定も2人に共通です。

公開の部屋とランキング

公開の部屋は、ホストが相手を待っている間、ロビーの「公開中の部屋」に表示されます。一覧には、ホストの名前とタグ、回戦数、2つの設定(「8点以上×2」か「8点で倍なし」、「ヒントあり」か「ヒントなし」)、部屋コード、パスワードがあれば「パスワード付き」が並び、「参加」を押すと参加ページが開きます。

知らない人と対戦したいときは、公開の部屋を作って待つか、一覧から部屋を選んで参加します。相手が入室すると部屋は一覧から消え、相手が退出するとまた表示されます。

ロビーには「ランキング」もあり、上位10人が勝敗と総得点とともに並び、1位には金の王冠が付きます。順位は勝ち数の多い順で、同じなら負け数の少ない順、さらに総得点(各対戦の終了時に持ち点25点を上回った分の合計)の高い順です。集計するのはオンライン対戦だけで、練習は含みません。また、2人の端末が同じ結果に署名した対戦だけが反映されます。2つが一致することをサーバーが確かめ、それぞれの戦績に1回だけ加えます。どちらかが確認しなかった対戦は、どちらにも記録されません(ランキングの下にもその旨を表示しています)。

部屋の設定

ホストは部屋を作るときに、2つの設定を選びます。設定は作成した時点で固定され、友達にも参加する前に表示されます。さらに暗号化された接続にも組み込まれるので、2人の端末で点数の計算も表示されるヒントも必ず同じになります。

8点以上で2倍(最初はオン)
オンにすると、8点以上の回は点数が2倍になり、そこにこいこいの倍率もかかります。オフにすると点数による2倍はなく、倍率はこいこいの分だけです。
アシスト表示(最初はオン)
オンにすると、場札を取れる手札が光り、札を選ぶと合う場札が示されます。取り札の上には、その手で増える点数や近づく役、阻止できる相手の役といったヒントも出ます。オフにすると合う札は表示されず、実際の卓と同じように自分で探します。

そのほかのルールはどの部屋でも共通です。持ち点は各25点で、回の負けた方が勝った方に点数を支払います(持ち点の方式)。こいこいは2人の宣言を合わせて1つの倍率になり(こいこいの倍率)、菊に盃(きくにさかずき)はタネ札としてだけ数えます(菊に盃の扱い)。

公正な対戦のしくみ

ネット越しに花札を遊ぶには、誰かが札を切らなければなりません。このゲームでは一方に任せず、2人の端末が一緒に札を切り、相手の手を一手ずつ確かめ合います。サーバーは、手紙を運ぶだけで中を開けられない郵便局のような役割です。

あなたの端末

  • 自分の札だけを開ける
  • 一手ごとに暗号化して署名
  • 相手の手をすべて検証

サーバー(中継と保管)

  • 鍵のかかった札と暗号化された手を中継
  • 部屋・参加者・結果を記録
  • 札も手の内容も読めない

友達の端末

  • 自分の札だけを開ける
  • 一手ごとに暗号化して署名
  • あなたの手をすべて検証

手は打った側が署名し、相手の端末が確かめて署名し返します

サーバーはすべてを中継して記録を残しますが、鍵を持っているのは2人の端末だけです。

札の切り方と配り方

各回の始めに、2人の端末が順番に札を切り、それぞれ自分だけの秘密の鍵で全部の札に鍵をかけます。「メンタルポーカー」と呼ばれる方法です。札を読めるのは、その札の2人分の鍵がそろったときだけです。自分の手札の鍵は自分の端末に届くので、手札を見られるのは自分だけで、出した札はそのとき初めて相手にも開かれます。どちらのプレイヤーも配り方を操作できず、サーバーは鍵を一つも持っていません。

札を切ったり鍵をかけたりする手順には、一つ一つゼロ知識証明が付いています。新しい札の順番も鍵も明かさずに、その手順が正しく行われたこと(同じ札を並べ替えて鍵をかけ直しただけであること)を示す証明です。相手の端末はこの証明を確かめてから手順を受け付けるので、細工された山札はその場で拒否され、そこから札を知られることはありません。細工をした側も特定されます。回が終わると、両方の端末が鍵を公開し、お互いの手順をもう一度検証します。回の途中で対戦が終わった場合も、勝った側の端末がその回の鍵を公開し、相手の端末はそれを検証してから結果を確認します。

一手ごとの確認

手は自分の端末で暗号化し、この対戦のためだけに作った鍵で署名して、ひとつ前の手とつなげてから送ります。友達の端末は同じルールエンジンでその手を再現し、ルールどおりなら署名し返します。手が確定するのはそのときです。一度相手の端末に送った手は取り消せません。拒否された手はそのまま送り直され、同じ手が2度拒否されたときや、不正がはっきりしたときは、対戦は「異議あり」で止まり、どちらにも記録されません。どの手にも2人の署名が付くので、あとから打った手を否定したり書き換えたりすることもできません。

技術的には、鍵の取り決めに耐量子の鍵交換X-Wing(ML-KEM-768とX25519の組み合わせ)、手の暗号化にXChaCha20-Poly1305、署名にEd25519を使い、パスワード付きの部屋ではscryptで強化したパスワードも鍵に組み込みます。手への応答、接続情報、対戦の終わりとその結果など、2人の端末がやり取りするほかのものも、同じように暗号化して署名します。途中で第三者が割り込んでいないことを確かめたいときは、卓の鍵のアイコンを押し、5つの絵文字でできたセキュリティコードを、別の手段で友達と見比べてください。両方の画面で同じなら問題ありません。

サーバーに見えるもの

オンライン対戦中にサーバーから見えるもの・見えないもの
サーバーに見えるものサーバーには見えないもの
Googleのログイン情報、プロフィールの名前・アバター・タグあなたと友達の札
部屋の情報(部屋コード、設定、ホストとゲスト)山札の順番
パスワードの有無(パスワードそのものではなく、scryptで作った照合用の値だけを保存)手の内容
接続しているかどうかと、その時刻対戦の鍵
暗号化・署名された手(ブラウザ同士が直接つながっていない間に中継し、30日の有効期限を付けて保管)セキュリティコード
対戦の終わり方と、2人の端末が署名した結果

直接接続。どの対戦でも2人のブラウザが直接つながり(WebRTC)、同じ暗号化・署名済みの手がサーバーを通らずにやり取りされます。そのため、お互いのIPアドレスが相手に見えます。自分のIPアドレスを隠すには、「設定」で「自分のIPアドレスを隠す」をオンにします。オンにすると、あなたの側は中継サーバーだけを経由してつながり、中継サーバーがない場合はゲームのサーバー経由になります。直接の接続ができるまでの間と、接続が切れている間は、暗号化・署名されたままサーバー経由で届き、直接の接続は自動でつなぎ直されます。手がどの経路で届いているかは、卓の鍵のアイコンの横にある稲妻のアイコンでわかります。

このしくみにもできないことがあります。相手に手を打たせること(そのために手番の時計があります)と、相手に結果を確認させることです。ランキングには、両方のプレイヤーの端末が同じ結果を確認した対戦だけが反映され、2人がそろって確認しなかった対戦は、どちらにも記録されません。

相手が動かないとき

オンライン対戦では、手番の持ち時間を計っています。手番の本人には最初の45秒間は何も表示されず、相手の画面でアバターの周りに控えめな輪が少しずつ満ちていくだけです。山札からめくった札の取り方が1通りしかないときは、5秒たつと自動で取られるので、そこで対戦が止まることはありません。

  1. 0秒
    考える時間相手の画面に静かな輪が出るだけ
  2. 45秒
    「離席中?」とカウントダウン2人とも見えます
  3. 75秒
    勝ちを申告待っている側が申告できます
手番の人が考えている間、相手の画面ではその人のアバターの周りに控えめな輪が満ちていきます。45秒たつと輪が琥珀色に変わり、席に「離席中?申告まで0:30」と表示され、本人の画面にもカウントダウンが出ます。75秒を過ぎると、待っている側が勝ちを申告できます。自動で勝ちになることはありません。

75秒たつと、「勝ちを申告」と「もう少し待つ」のパネルが出ます。申告は確認のあとで確定します。「もう少し待つ」を選ぶとパネルは1分間隠れますが、その間もツールバーの「勝ちを申告」から申告できます。申告すると、2人の画面で同時に対戦が終わります。勝ちが記録されるのは、離席していた側の端末が申告を確認したときです。その端末が確認するのは、申告されたときにその場にいて、対戦が止まった時点の手番を自分の記録でそれだけ長く待たせていたと確かめられた場合だけです(申告した側が同じだけ長く待たせていた場合は確認しません)。確認されなければどちらにも記録されず、その人の結果画面に理由が表示されます。

友達の端末があなたの手をまだ確認していない間も、時計は友達の側で進みます(「Hanaがあなたの手を確認するのを待っています」)。時間は待ち始めた時点から、サーバーの時計で計ります。このときに申告しても対戦は終わりますが、相手の端末は届いた手にはすべて応答するため、応答を待たせていたという記録を持っていません。そのため、この申告はどちらにも記録されません。接続が切れて戻ってきたプレイヤーには、申告されるまで少なくとも30秒の猶予があります。

接続が切れたとき・再読み込み

相手の接続が切れると、戻るまでの残り時間が「Hanaの接続が切れました・戻るまであと2:41」のように表示されます。猶予は3分間で、サーバーの時計で計ります。時間内に戻れば、対戦はそのまま続きます。過ぎたあとは、残った側が「勝ちを申告」を押すか、もう少し待つかを選べます。自動で勝ちになることはありません。勝ちが記録されるのは、戻ってきた相手の端末が申告を確認したときなので、相手が戻らなければ、どちらにも記録されません。

ページを再読み込みしても、タブやアプリを閉じても、端末を再起動しても大丈夫です。対戦の鍵は暗号化して最長7日間この端末に保存され、同じブラウザで次にゲームを開くと部屋に戻り、続きから遊べます。ただし鍵はほかの場所には保存されないので、あるブラウザで始めた対戦を別のブラウザや別の端末で続けることはできません(iPhoneやiPadでは、Safariとホーム画面のアプリも別扱いです)。そこでは投了しか選べず、投了するとどちらにも記録されません。同じ部屋を2つ目のタブで開くと「ここでプレイ」が表示され、押すと対戦がそのタブに移ります。ログアウトすると、保存した対戦はこの端末から消えます。

対戦のあと

対戦が終わると、2人とも結果が表示されます。ホストが「部屋を開けておく」を押すと、同じ部屋コードのまま相手を待つ画面に戻るので、友達がもう一度招待リンクを開けば次の対戦を始められます。「部屋を閉じる」を押すと部屋はなくなります。ただし、対戦が終わったときに友達が離れていて、まだ結果を確認していない場合は、ロビーから部屋を閉じるか別のプレイヤーを入室させるまで、対戦がどう終わったかを友達のために残したまま、部屋を対戦相手なしで開いておきます。途中でやめたいときは、ツールバーの「投了」(旗のアイコン)を押します。2人の端末が確認すると、友達の勝ちとして記録されます。対戦中に部屋を出たりログアウトしたりした場合も、確認のあとで投了になります。ログアウトすると保存した対戦も端末から消えます。その前に数秒だけ結果の確認を待ちますが、それまでに確認されなかった投了はどちらにも記録されません。

結果の下には、記録の状況が表示されます。「両者が結果を確認しました」、「Hanaの確認を待っています(確認されると記録されます)」、または理由とともに「記録されません」です。部屋を出たあとも、次にゲームを開いたときも、あなたの端末は最長7日間、この手続きを続けます。

途中で対戦を抜けた相手(切断して戻らなかった、投了した、離席して勝ちを申告された、異議を唱えて対戦を止めた、あなたの端末が確認しなかった勝ちを申告した)は、あなたのブラウザの中だけにある一覧に記録されます。その人があとであなたの部屋に参加を申請すると、何があったかが表示され、「入室させる」か「12時間入室禁止」かを選べます。

うまくいかないとき

「ブラウザがログイン用のウィンドウをブロックしました」と出る
このサイトのポップアップを許可してから、もう一度「Googleでログイン」を押してください。アプリとして追加したこいこいでは、ログインはウィンドウではなくページの切り替えで行います。
リンクがLINEやSNSのアプリの中で開いた
アプリによっては、リンクをアプリの中の画面で開きます。そこでログインできないときは、アプリのメニューの「ブラウザで開く」などから、SafariやChromeで開き直してください。
「部屋ABC234はありません。ホストが閉じたのかもしれません」と出る
ホストが部屋を閉じたか、新しい部屋を作った(前の部屋は閉じられます)ためです。新しいリンクを送ってもらってください。
「この部屋は対戦中です」と出る
すでに誰かが対戦しています。空いたら「もう一度確認」を押してください。
「パスワードが違います」と出る
ホストが決めたとおりに、大文字と小文字の区別も含めて正確に入力してください。
「先に別のプレイヤーが参加しました」と出る
公開の部屋に、ほかのプレイヤーが先に入室しました。別の部屋を選ぶか、自分で部屋を作ってください。
「相手の確認を待っています…」が消えない
どの手も、相手の端末の署名を待って確定します。この表示が長く続くときは、友達の接続が遅いか、切れています。相手がオフラインなら3分間のカウントダウンが始まり、接続したまま応答がなければ、手番の時計が相手の側で進みます。
「オフラインです。接続が戻るとオンライン対戦を再開できます」と出る
あなたの接続が切れています。3分以内に接続が戻れば、確実に対戦を続けられます。

そのほかの質問はよくある質問に、保存される情報はプライバシーポリシーにまとめています。

参考文献

  1. こいこい|花札の歴史・遊びかた、任天堂、任天堂のルール(札を引いて親を決める、7点以上で2倍)
  2. こいこい、ウィキペディア日本語版、一般的な親の決め方
  3. Koi-Koi、Fuda Wiki、持ち点をやり取りする方式などのバリエーション(英語)