テニス乱数表・ダブルス組み合わせ表 自動作成ツール

人数とコート面数を入れるだけ。休憩を均等にしたまま全ラウンド分の乱数表を作る

ダブルス専用。人数とコート面数を入れるだけで、休憩が偏らない組み合わせ表を全ラウンド分まとめて作る。

メンバー

コートとラウンド

毎ラウンド 4 が出場休憩 4/ 全8

組み方

ミックスを使うにはメンバー欄でグループ分けをオンにする。

できるだけ多くの人と組めるようにする。まだ組んでいない味方ペアを優先。

固定ペア(任意)

この2人を必ず味方同士にする。

PR

🎾 テニス関連グッズ

関連ツール

8人でダブルス1面、8ラウンド。誰がどれだけ休んだか言える?

テニスの練習会で一番もめるのは、実は技術の話じゃなくて「今日あの人ばっかり打ってなかった?」という感覚のズレだと思う。コート横のホワイトボードでその場その場で組んでいくと、幹事は目の前の1ラウンドを成立させるのに精一杯で、8ラウンド通したときに誰が何回休んだかまでは追えない。追えないまま解散して、帰り道に「今日あんまり打てなかったな」と思われる。

テニスの世界では、この「ラウンドごとに誰と組み、誰と当たり、誰が休むか」を並べた表を乱数表と呼ぶ。数学の乱数表とは別物で、ダブルスの進行表を指す業界語。「テニス 乱数表 1面 6人」のように人数とコート面数をセットで探す人が多いのは、この表が構成ごとに全然違う形になるから。

このツールは、参加人数とコート面数を入れるだけで、全ラウンド分のダブルス乱数表を一度に作るもの。休憩回数を完全に揃えることを最優先の制約として固定したうえで、まだ組んでいない味方ペア・まだ当たっていない相手を優先して埋めていく。4〜30人、1〜4面、1〜20ラウンドまで対応している。

「あれもこれも」をやめてダブルス専用にした

盛り込みすぎて誰の道具でもなくなっていた

このツールには前の版がある。シングルスとダブルスの混在コート、A・Bグループの「別々」と「混合」、グループが割り切れないときの優先度切り替え、固定ペア。思いつく限りの状況に対応しようとした結果、コート横でスマホを取り出した幹事が最初に見るのが「シングルス面数」の入力欄という画面になっていた。ほとんどの人には一生使わない項目だ。

決定打は検索キーワードだった。90日分の流入を調べたら、シングルス目的で来た人は表示回数33回・クリック0という数字で、ほぼ存在しなかった。一方で「テニス 乱数表 6人」「テニス 乱数表 1面 6人」「テニス 乱数表 5人」のような、人数とコート面数を具体的に指定した検索が全体の主力を占めていた。5〜8人で1面。これが圧倒的多数派だった。

つまり作るべきだったのは「あらゆる構成に対応できる汎用ツール」ではなく、「6人1面のときに一番いい表が一発で出る道具」だった。だからシングルスを丸ごと落とした。設定項目が半分以下になり、人数を入れてボタンを押すだけで表が出るところまで手順が減った。

休憩の均等は「選ばせるもの」ではなかった

前の版では「グループを厳守する」か「休憩をそろえる」かをユーザーに選ばせていた。作り直すにあたって本当にそれが必要なのかを実際に測ってみたら、グループ分けを使わない限り、休憩を完全に均等にしてもペアの重複はほとんど増えないと分かった。8ラウンドの生成を各20回試した平均で、6人1面の重複が1組から2組に増える程度。12人2面ではむしろ均等にしたほうが良い結果だった。

タダで手に入るものを選択肢にしていたわけだ。だから休憩の均等は選ばせるのをやめて、常に守る制約に格上げした。選択肢が1つ減って、しかも結果は良くなった。

テニスの乱数表とは何か — シャッフルとの決定的な違い

乱数表 とは:ランダムに配るだけでは公平にならない

乱数表という名前から「ランダムに割り振った表」と思われがちだけど、実際に必要なのは正反対の性質だ。トランプを切るように毎ラウンド無作為に4人選ぶと、確率的に必ず偏る。10人で1面、8ラウンドをサイコロだけで回すと、3回休む人と1回も休まない人が同時に現れる。全員の期待値は同じでも、たった8回の試行では期待値に収束しない。

だから乱数表がやっているのは乱数を振ることではなく、乱数を振った結果を評価して選び直すことにある。見るべき軸は3つ。

  • 味方ペアの重複 — 同じ人とばかり組んでいないか
  • 対戦相手の重複 — 同じ相手とばかり当たっていないか
  • 休憩回数の偏り — 誰かが余計に休まされていないか

紙の乱数表が「1面6人」「2面10人」のように構成ごとに存在するのは、この3つを同時に満たす配置が人数とコート面数の組み合わせごとに全く違うから。6人の表を7人で流用することはできない。

5人1面が特別扱いされる理由

ダブルスの組み合わせを数える。5人からペアを作る方法は 5×4÷2 で10通り。1ラウンドのダブルス1面には味方ペアが2組できるから、10通りを消化するのにちょうど5ラウンドかかる。

5人のペア総数     = 5 × 4 ÷ 2 = 10通り
1ラウンドの消化数 = 2組(味方ペアが2つ)
10 ÷ 2 = 5ラウンドで全ペアを1回ずつ消化できる

割り切れる。しかも5人中4人が出場するので毎ラウンド1人だけ休み、5ラウンドで全員がちょうど1回ずつ休む。全員が他の4人と1回ずつ組み、2回ずつ対戦し、休憩も完全に均等という、どこにも無駄のない表が存在する。こういう「割り切れる」構成は組合せ論では分解可能デザインと呼ばれ、ソーシャルゴルファー問題として研究されている領域と地続きになっている。

逆に6人1面は割り切れない。ペアは15通りあるのに1ラウンドで2組しか消化できないので、7.5ラウンドという中途半端な数字が出てくる。6人の乱数表が5人ほど美しくないのはこのためで、ツールの責任ではなく人数の性質の話。

「前と同じ顔ぶれ」が消せない構成がある

6人1面で8ラウンド回すと、「毎回ほとんど同じメンバーじゃない?」と感じることがある。これはアルゴリズムの手抜きではなく、算数で決まっている。

連続する2つのラウンドには、合わせて4人×2=8人分の出場枠がある。ところが参加者は6人しかいない。8人分の枠に6人しかいないなら、差の2人は必ず前のラウンドから続けて出ることになる。

前ラウンドから残る最少人数 = 2 × (4 × コート面数) − 人数
6人1面 → 2 × 4 − 6 = 2人
8人1面 → 2 × 4 − 8 = 0人(理論上は全員入れ替われる)

8人いれば理屈のうえでは毎ラウンド全員入れ替えられる。6人だとどうやっても2人残る。ツールはこの数字を該当する構成のときに画面に出すようにした。「もっと混ぜたい」と思ったときの答えがアルゴリズムではなく人数にあることを、その場で分かるようにしたかった。

休憩の偏りが壊すのは、その日の空気だけじゃない

参加費2,000円の練習会を2時間、8ラウンドでやるとする。1面6人なら1人あたりの出場は約5.3ラウンド。ここで休憩が2回偏った人が出ると、その人だけ出場が4ラウンドになる。1ラウンドあたりの単価が375円から500円に跳ね上がる計算になる。同じ金額を払っているのに3割高い。

数字にすると露骨だけれど、現場ではこれが「なんとなく損した気分」として蓄積する。そして厄介なことに、偏りを引きやすいのは遠慮して自分から前に出ない人、つまり初心者や新規参加者になりがちだ。幹事が悪気なく「じゃあ次はこの4人で」と回していくと、声の大きい常連が自然と多く入る。サークルの新規定着率が上がらない原因が、練習内容ではなく組み合わせの偏りにあるケースは珍しくない。

日本テニス協会が普及の課題として挙げる継続率の問題も、突き詰めれば「また来たい」と思えるかどうかで決まる。初回に来て2回しか打てずに帰った人は、たぶん次は来ない。

休憩回数の差が0か1に収まっているか。これは組み合わせ表の品質を測る指標として、ペアの重複より優先度が高い。同じ人と2回組むのは笑い話で済むけれど、自分だけ2回多く休まされたのは笑い話にならない。だからこのツールは休憩の均等を選択肢から外して、常に守る制約にした。

こんな場面で使う

週末のサークル練習会 — 参加者が確定した時点で人数を入れて生成。表をコピーしてLINEのグループに貼れば、コート横で「次どうする?」が発生しない。

社会人テニス教室の後半フリー練習 — レッスンが終わって自由に打つ時間。コーチが1面を人数分回すときに、公平さの根拠を数字で示せる。

男女混合のミックス練習会 — 男性グループと女性グループに分けて、各コートを2人ずつで組む。男女比が揃っていない日でも、何が崩れるかを提示したうえで選べる。

バドミントン・ピックルボール・卓球のダブルス — 4人でコートに入って交代しながら回す競技なら、種目が違っても同じ表がそのまま使える。ラウンド数を種目に合わせて調整するだけ。

使い方は3ステップ

  1. メンバーを入れる — 「番号で楽に」なら人数を打つだけでP1〜Pnができる。「名前を入れる」に切り替えると改行区切りの貼り付け欄が出るので、LINEのメンバーリストをそのまま貼れば人数は自動でカウントされる。
  2. コート面数とラウンド数を決める — 面数は1〜4、ラウンド数は既定8で1〜20まで。2時間の練習会ならおおむね8ラウンドが目安。
  3. 組み方を選んで生成 — ランダムかミックスかを選び、「味方ペア」「対戦相手」「4人だけ」のどの重複を避けたいかを選んでボタンを押す。表が全ラウンド分まとめて出る。

入力した内容はブラウザに保存されるので、毎週同じメンバーでやるなら次回は開くだけで前回の設定が入っている。

実際に作った表の中身を数字で見る

以下はすべて、公開している実装にその条件を入れて出力を確認した実測値。「網羅」は使い切った組み合わせの通り数、「最大重複」は同じ組み合わせが最も多く出た回数、「休憩差」は最も休んだ人と最も休まなかった人の差。

構成ラウンド設定網羅最大重複休憩差
5人1面5味方ペア10 / 10通り1回0
6人1面8味方ペア15 / 15通り2回1
7人1面8味方ペア16 / 21通り1回1
8人1面8味方ペア16 / 28通り1回0
8人1面8対戦相手28 / 28通り2回0
10人2面84人だけ45 / 45通り3回1
12人2面8味方ペア32 / 66通り1回1
20人4面8味方ペア64 / 190通り1回1
30人4面20味方ペア160 / 435通り1回1

ケース1:5人1面・5ラウンド(10/10・最大重複1・休憩差0) — 前述した理論上の完全な表に、実際に到達している。全員が他の4人と1回ずつ組み、休憩も1回ずつ。この構成なら乱数表として文句のつけようがない。

ケース2:6人1面・8ラウンド(15/15・最大重複2・休憩差1) — 15通りのペアを全部使い切っている。8ラウンドで消化するペアは16組なので、1組だけ2回目が出る。これが6人1面の理論的な下限で、これ以上は良くならない。

ケース3:8人1面・味方ペア(16/28・最大重複1) — 8ラウンドで作れる味方ペアは16組。それが28通りの中から重複ゼロで選ばれている。8人1面は休憩差も0になる。「毎ラウンド全員が入れ替わりうる」構成の強さがここに出る。

ケース4:8人1面・対戦相手(28/28・最大重複2) — 同じ8人1面でも「対戦相手」を選ぶと結果が変わる。1ラウンドで生まれる対戦の顔合わせは4通りあるので、8ラウンドで32通り。28通りしかない全組み合わせを使い切って、4組だけ2回目が回ってくる。全員が全員と1回は対戦した状態になる。

ケース5:10人2面・4人だけ(45/45・最大重複3) — ペアを決めないモード。10人の顔合わせは45通りで、これを全部消化している。8ラウンド×2面で48回の4人組ができ、そのなかの6ペアずつが数えられるので同席の総数は多く、最大3回まで重なる。

ケース6:20人4面・8ラウンド(64/190・最大重複1) — 大人数では組み合わせの母数が大きいので、重複を完全にゼロにできる。20人規模のサークルなら、8ラウンド程度では誰とも2回組まない表が普通に作れる。

ケース7:30人4面・20ラウンド(160/435・最大重複1) — 上限いっぱいの構成。20ラウンド回しても味方ペアの重複がゼロで、休憩差も1に収まる。生成にかかる時間は手元の計測で約0.1秒。

ケース8:A8人/B4人・2面・ミックス — 人数が偏った構成の比較。「休憩をそろえる」だと休憩差1のまま、16コート中4コートがミックスで組めない。「ミックスを守る」に切り替えると全16コートがミックスになる代わりに休憩差が4に開く。B側の4人が出ずっぱりになるということ。どちらが正しいかは会の性格次第なので、数字を出して選んでもらう形にした。

仕組み:3つの設計判断を実測で決めた

全体の流れはシンプルで、1ラウンドずつ「候補を大量に作って一番いいものを選ぶ」を繰り返す。

各ラウンドについて:
  1. 休憩回数の多い人から順に出場枠を埋める(休憩均等のハード制約)
  2. 固定ペアを同じコートに配置し、残りをランダムに割り振る
  3. できた配置を過去の履歴と照らしてペナルティを計算
  4. 1〜3を300回繰り返し、ペナルティ最小の配置を採用
  5. 履歴を更新して次のラウンドへ

面白いのはペナルティの中身で、ここを3回作り直している。

判断1:4人組の新規性は「4人組」で測ってはいけない

「ペアは現場で決めるからコートの4人だけ割り振ってほしい」というモードを作るとき、素直に考えると「この4人組が過去に出たか」を数えたくなる。これが罠だった。

20人4面なら4人の組み合わせは4,845通りある。8ラウンドで作る4人組はたかだか32個なので、完全一致はまず起きない。つまりペナルティが常にゼロになり、評価が機能せず実質ランダムに退化する。結果として「ある2人は8ラウンド中4回も同じコート、別の2人は一度も当たらない」という表ができる。

正解は、4人組の中にある6通りのペアそれぞれの同席回数を二乗和で叩くこと。3人が前回と同じなら6ペア中3ペアが重複するので、自動的に重く罰せられる。両方式を実装して比べた結果が以下。

構成測り方最大同席同席回数の差網羅
8人1面4人組の一致3.53回2.4725.2 / 28
8人1面6ペアの同席2.00回0.0024.0 / 28
20人4面4人組の一致4.20回3.20122.8 / 190
20人4面6ペアの同席2.87回1.87143.1 / 190

8人1面では同席回数の差が完全にゼロになった。粒度を1段下げるだけで結果が変わる。

判断2:「前と同じ顔ぶれを避ける」項は入れてはいけない

もっと入れ替わり感を出したくて、「直前のラウンドと重なっている人数」を直接ペナルティにする案を試した。狙いどおり直前との重なりは減った。ところが8ラウンド全体で見ると壊れていた。

構成方式前ラウンドからの持越し同席回数の差網羅
8人1面同席回数のみ0.86人0.0024.0 / 28
8人1面+持越しも叩く0.27人3.0021.7 / 28
9人1面同席回数のみ1.07人1.0033.0 / 36
9人1面+持越しも叩く0.00人2.0026.0 / 36

直前だけを見て散らすと、その反動で特定の2人ばかりが後半に固まる。局所最適が全体を壊す教科書どおりの現象だったので、この項は捨てた。目先の見た目より8ラウンド通した公平さを取る。

判断3:表は1本作って終わりにしない

1ラウンドずつ最良手を選ぶ貪欲法には弱点がある。序盤の選択が終盤の袋小路を作る。5人1面5ラウンドで試したところ、20回中数回は理論上の完全な表(10通り全消化)に届かず8通りで終わっていた。

対策は単純で、表を丸ごと何本か作って一番いいものを選ぶ。1本あたりが軽いので12本作っても大した負担にならない。休憩差、ミックスの成立、最大重複、網羅数の順に評価して勝者を採る。これを入れたら5人1面5ラウンドは20回中20回とも完全な表になり、7人1面や10人2面のばらつきも消えた。

ミックスと休憩均等が両立する条件を計算で出す

ミックスでA・Bの人数が違うと警告が出る根拠はこの式にある。休憩を完全に均等にすると、各人の出場ラウンド数は全体で割り算した値に固定される。一方ミックスは毎ラウンドちょうど2×コート数のAを必要とする。A側の総出場枠を両側から書くと等式ができる。

休憩を均等にしたときのA側の総出場枠
  = A人数 × (4 × コート数 × ラウンド数 ÷ 全人数)

ミックスが要求するA側の総出場枠
  = 2 × コート数 × ラウンド数

両者を等号で結んで整理すると
  A人数 × 4 ÷ 全人数 = 2
  → A人数 = 全人数 ÷ 2
  → A人数 = B人数

つまりA人数とB人数がぴったり等しいときだけ両立する。それ以外では数式上どちらかが必ず崩れる。実測でもA4/B4、A5/B5、A6/B6は成立率100%・休憩差0〜1で無風、A5/B3、A8/B4、A7/B3は例外なく劣化した。だから2択を出す条件は「A人数 ≠ B人数」の一行で済んでいて、人数が揃っている構成では選択肢そのものを画面に出していない。

エクセルのテンプレートや紙の乱数表と何が違うか

検索すると出てくるのは、大きく分けて2種類。「1面6人」のような特定構成の完成済みPDFと、自分で数式を組むエクセルテンプレート。

完成済みPDFの弱点は構成が固定されていること。6人の表を持っていても、当日1人増えたら使えない。エクセルは自由度がある代わりに、公平性の評価まで作り込むのは現実的でなく、多くは番号を機械的にずらしていく方式になっている。ずらし方式は同じペアが規則的に再登場するし、休憩の順番も固定されるので、参加者に順番が読まれる。

このツールは毎回違う表が出る。同じメンバーで毎週やっても「またこの並びか」にならない。そして組み合わせの品質を数字で表示するのが一番の違いだと思う。網羅した通り数・最大重複・休憩差の3つが表の下に出るので、幹事は「今日の表は休憩差0で組めている」と根拠を持って言える。感覚の話を数字の話に変えられる。

役割分担としては、順番決めやチーム分けそのものが目的なら公平な配置係のほうが向いている。練習会後の会計で負担割合を変えたいときは不平等割り勘マスターを使い分けてほしい。

豆知識:なぜ「乱数表」と呼ばれるようになったのか

この呼び名、よく考えると変だ。統計や暗号でいう乱数表は無作為な数字を並べた表のことで、公平性の調整なんて概念はない。テニスで使われている表はむしろ「無作為ではない、注意深く設計された表」なのに、正反対の名前が定着している。

由来ははっきりしないものの、コンピュータが手元になかった時代の名残という説が有力だ。当時の実務では、参加者に番号を振り、市販の乱数表や乱数さいころで並びを決めて紙に書き出す、という手順で組み合わせを作っていた。作り方の道具の名前が、成果物の名前になったわけだ。ガリ版で刷った表を持ち回るうちに呼び名だけが残り、中身のほうは各サークルで「同じペアが続かないように」と手直しされて洗練されていった。

同じ表がバドミントンやピックルボールでも使われているのも面白い。4人でコートに入り、交代で休みながら回すという構造が共通していれば、競技のルールが違っても最適な表は同じ形になる。実際、卓球のダブルス練習会で使われている進行表とテニスの乱数表は、番号の並びとしてはまったく区別がつかない。組合せ論の問題として抽象化されてしまえば、そこにボールの大きさは出てこない。

近年はこの種の問題がラウンドロビン方式の一般化として扱われ、ゴルフのコンペ組分けや会議のグループ分けでも同じ数学が使われている。ソーシャルゴルファー問題という名前がゴルフ由来なのは、8人ずつ3組に分かれて何日ラウンドできるかという実際の悩みが出発点だったから。

使いこなすためのTips

ラウンド数は種目に合わせて変える — テニスの1ゲームは長いので2時間なら8ラウンド前後。ピックルボールやバドミントンは1試合が短いぶん、同じ時間でも12〜15ラウンド回ることがある。既定の8にこだわらず実態に合わせてほしい。

迷ったら「味方ペア」を選ぶ — 3つのモードのどれを選んでも休憩の均等は保たれる。交流目的の会なら味方ペア、実戦練習なら対戦相手、気楽な会なら4人だけ、という当たりをつけて選べば大きく外さない。

表の下の3つの数字を見る癖をつける — 休憩差が2以上になっていたら、人数とコート面数の相性が悪いサイン。コートを1面減らすか、ラウンド数を人数の倍数に近づけると改善することが多い。

名前は貼り付けで入れる — LINEの参加表明リストをコピーして貼るのが一番速い。名前が入った表はそのままグループに投げられるので、当日の連絡が1往復減る。

固定ペアは使いすぎない — 夫婦や親子を組ませたいときには便利だけれど、組むほど他の人の組み合わせの自由度が下がる。1面につき1組までを目安にすると全体の質を落とさずに済む。

よくある質問

「1面6人」「1面5人」「2面10人」みたいな定番の乱数表も作れる?

作れる。人数に6、コート面数に1を入れれば1面6人の乱数表になるし、人数10・2面なら2面10人になる。紙の乱数表と違うのは、生成するたびに違う表が出ること。同じ顔ぶれで毎週練習会をやってもパターンが変わるから「またこの表か」にならない。構成ごとの実際の出力品質は上の使用例の表にまとめてあるので、自分の人数の行を見てほしい。

「味方ペア」「対戦相手」「4人だけ」はどれを選べばいい?

いろんな人と組んで仲良くなってほしい交流目的の練習会なら「味方ペア」。同じ相手とばかり打つのを避けたい実戦練習なら「対戦相手」。コートに入る4人だけ決めて、ペアはその場のジャンケンで決めたい気楽な会なら「4人だけ」を選ぶ。どれを選んでも休憩回数は均等に保たれるので、公平性を心配して選ぶ必要はない。迷ったら「味方ペア」でいい。

ミックスでA・Bの人数が違うと警告が出るのはなぜ?

休憩を完全に均等にすることと、全コートをミックスで組むことが、数式上その構成では両立しないから。両立するのはA人数とB人数がぴったり等しいときだけで、導出は上の仕組みの項に書いてある。たとえばA8人・B4人の2面では、全コートをミックスにするとB側の4人が全ラウンド出ずっぱりになる。だから偏っている構成でだけ「休憩をそろえる」か「ミックスを守る」かを選んでもらっている。人数が揃っていれば警告も選択肢も出ない。

6人1面だと毎ラウンド同じ人が残る気がするけど直せる?

これはアルゴリズムではなく人数の問題なので直せない。連続する2ラウンドの出場枠は合計8人分あるのに参加者は6人しかいないので、差の2人は必ず前のラウンドから続けて出る。ツール側では該当する構成のときに何人残るかを画面に表示している。もっと入れ替えたいなら人数を増やすか、コート面数を減らして出場枠を絞る。8人1面なら理論上は毎ラウンド全員入れ替えられる。

入力したメンバーの名前が外部に送信されることはある?

一切ない。すべてブラウザ内のJavaScriptで処理していて、サーバーとの通信は発生しない。名前や設定は次回の入力を省くために同じブラウザのローカルストレージにだけ保存していて、これも外部には送られないし、ブラウザの閲覧データを消せば一緒に消える。共用のパソコンで使ったあとに名前を残したくない場合は、リセットボタンを押せばその場で消える。

シングルスの組み合わせも作れる?

作れない。以前はシングルスとダブルスの混在にも対応していたけれど、そのぶん設定項目が増えて、大多数を占めるダブルス目的の人にとって画面が複雑になっていた。ダブルス専用に絞ることで、人数を入れてボタンを押すだけで表が出るところまで手順を減らしている。順番決めや総当たりのグループ分けが目的なら公平な配置係のほうが近いことができる。

まとめ

ダブルスの乱数表を、休憩の均等を絶対条件にしたまま全ラウンド分まとめて作るツール。人数とコート面数を入れてボタンを押すだけで、まだ組んでいないペアを優先した表が出る。5人1面なら全員と1回ずつ組む完全な表に到達するし、20人4面でも重複ゼロで組める。表の下に網羅数・最大重複・休憩差が出るので、幹事は公平さを感覚ではなく数字で説明できる。

順番決めやチーム分けそのものが目的なら公平な配置係、練習会後の割り勘なら不平等割り勘マスターを使い分けてほしい。


不具合や要望があれば、お問い合わせページから気軽に教えてほしい。

M

Mahiro

Mahiro Appの開発者。サークルの練習会で「今日あんまり打てなかった」と言われたのが悔しくて、休憩回数の均等を選択肢ではなく絶対条件にした版に作り直した。

運営者情報を見る