オンライン対局の一手にかかる時間:相手を待つ秒数の分布
遊びを見つける執筆にClaudeを使用しています。

招待リンクで友達とオセロを始め、自分が石を置いた直後に画面が動かなくなる場面を考えてみます。相手は悩んでいるのか、席を外したのか、通信が遅れているのか、外からは区別がつきません。「今日の対局は待たされた」と感じても、それが全体の傾向なのか、たまたま長かった数手の印象なのかは、数えなければ分かりません。 この記事で確かめるのは、自分が置いてから相手の手が盤に出るまでの秒数が、どんな形に散らばるかです。平均の一個の数字ではなく、分布(どの秒数帯に何手あるか)で見ます。平均は、長く待った一手に大きく引っ張られるためです。 アソバースのオンライン対戦は「潮目のオセロ」と「灯りのチェス」の2作品で、どちらも部屋を作って友達を1人招待する形です。この記事で扱うのは、その対局を自分の目で観察して記録するための手順です。結果の数字は載せません。数えるのは読者の皆さんです。
「待ち時間」を先に定義する
数え始める前に、何を待ち時間と呼ぶかを一つに決めます。この記事では次のように定義します。
自分が石や駒を置いた瞬間から、相手の手が盤に現れた瞬間までの秒数
この定義には限界が二つあります。
- 相手の考慮時間と通信の遅れは分けられません。 画面から見えるのは合計だけです。分布の形から「どちらが効いていそうか」を推測することはできますが、断定はできません。
- 自分の考慮時間は含めません。 相手の手が出てから自分が置くまでは別の量です。混ぜると、待ち時間の分布が自分の癖で濁ります。
潮目のオセロには、置ける場所がない手番が自動でパスされる仕組みがあります。パスが絡んだ手は、通常の一手と性質が違います。記録しないか、メモ欄に「パス」と書いて集計から外すかのどちらかに決めておきます。
記録の準備と手順
記録の単位と回数
記録の単位は「一手ごとの待ち秒数」を整数秒で取ります。1秒未満の差は、次に述べる計測者の反応のずれに埋もれるため、読み取りの対象にしません。
次の三点を決めてから始めます。
- 1局だけでなく、同じ作品で複数局を記録します。分布の形を見るには、最低でも合計30手程度は欲しいところです。
- 局番、自分の手数(何手目か)、待ち秒数、メモ(パス、再読み込み、相手の離席など)を1手ごとに残します。
- 相手が誰かも記録します。相手が変わると分布が変わる可能性があるためです。
計測ツール
盤を開いた画面とは別のウィンドウに、次の単独HTMLを開いておくと、ボタン二回で一手を記録できます。ファイルに保存してブラウザで開けば動きます。外部通信はありません。
<!doctype html><meta charset="utf-8"><title>待ち時間ログ</title>
<button id="b" style="font-size:2em;padding:.6em">置いた</button>
<button id="u">直前を取り消す</button>
<pre id="o"></pre>
<script>
let t0=null, log=[];
const b=document.getElementById('b'), o=document.getElementById('o');
b.onclick=()=>{
const now=performance.now();
if(t0===null){ t0=now; b.textContent='相手の手が出た'; return; }
log.push(Math.round((now-t0)/1000));
t0=null; b.textContent='置いた'; show();
};
document.getElementById('u').onclick=()=>{ log.pop(); show(); };
function show(){
const s=[...log].sort((x,y)=>x-y), n=s.length;
if(!n){ o.textContent=''; return; }
const q=p=>s[Math.floor(p*(n-1)+0.5)];
const mean=(s.reduce((a,c)=>a+c,0)/n).toFixed(1);
const h={};
s.forEach(v=>{const k=Math.floor(v/5)*5; h[k]=(h[k]||0)+1;});
o.textContent='n='+n+' 中央値='+q(.5)+' 25%='+q(.25)+
' 75%='+q(.75)+' 最大='+s[n-1]+' 平均='+mean+'\n'+
Object.keys(h).map(Number).sort((x,y)=>x-y)
.map(k=>k+'-'+(k+4)+'秒 '+'#'.repeat(h[k])).join('\n');
o.textContent+='\n\n記録順: '+log.join(', ');
}
</script>使い方は単純です。自分が置いた瞬間に「置いた」を押し、相手の手が盤に出た瞬間に同じボタンを押します。ボタンの表示が切り替わるので、今どちらの状態かは見れば分かります。押し間違えたときは「直前を取り消す」で直前の記録を消します。ただし開始側の押し間違いは、取り消しではなくページの再読み込みでやり直す方が確実です。
画面下の「記録順」は、手数順に並んだ秒数です。後で局ごとの推移を見るときのために、局が終わるたびに紙やメモに写しておきます。ツールの記録は、ページを閉じれば消えます。
集計:分布をどう見るか
ツールは5秒幅の階級ごとに「#」で棒を描きます。これで分布の形が見えます。数字の読み方は次の順に進めます。
- 中央値と平均を並べます。 中央値は、小さい順に並べたときの真ん中の値です。平均が中央値より明らかに大きければ、長く待った少数の手が平均を押し上げています。
- 四分位(25%と75%)の幅を見ます。 真ん中の半分の手が収まる範囲です。幅が狭ければ相手のテンポは安定していて、広ければばらつきが大きいと言えます。
- 最大値の手を特定します。 その手の局面、メモ、前後の様子を確認します。離席や再読み込みなら、通常の分布とは別に扱います。
次に、手数順の推移を見ます。序盤・中盤・終盤で待ち秒数が変わるかどうかは、局面の性質と関係している可能性があります。たとえば次のような仮説を立てられます。
- オセロでは終盤に合法手が減るので、考える候補が少なくなり、待ち秒数が短くなるのではないか。
- チェスでは序盤に決まった形で進める相手なら短く、中盤の複雑な局面で長くなるのではないか。
これらは確かめるための仮説で、結果を保証するものではありません。自分の記録が逆の形なら、それがその相手との実態です。
比較の基準として、ひとり対局の相手も計ってみる方法があります。灯りのチェスのCPUは、思考時間が約450msに制限されています。同じ手順で数手ぶん計ると、「人間の相手を待つ秒数」と「制限つきのCPUを待つ秒数」を、同じ尺度で並べて見られます。ただし、画面上で手が現れるまでに演出などの時間が加わるかどうかは、この記事の範囲では分かりません。作品を開いて確かめてください。
結果の読み方:形から何を考えるか
分布の形ごとに、次に確かめることを決めておきます。
- 山が一つで裾が短い、考えられること:相手のテンポが安定している、次に確かめること:局面の種類で山の位置が動くか
- 山が一つで右に長い裾、考えられること:多くは短いが、時々大きく待つ、次に確かめること:裾の手が特定の局面に集中していないか
- 山が二つ、考えられること:即答する手と、じっくり考える手がある、次に確かめること:二つの山を分ける局面の条件(手数、取り合い、パスなど)
- 特定の手数だけ突出、考えられること:局面が難しい、または中断があった、次に確かめること:メモの記録、前後の手
- 局によって山の位置が違う、考えられること:相手や時間帯、端末の違いが効いている、次に確かめること:局ごとの中央値を並べて比べる
「山が二つ」の場合は特に、二つに分けて別々に中央値を出すと、実態に近い数字が得られます。全体の平均は、どちらの山にも当てはまらない値になりがちです。
判断の目安として、各階級に数手しかない状態では形の判断を保留します。形の差が「もう1局増えただけで変わりそう」なときは、まだ読めないということです。
起こりやすい誤り
- 自分の反応の遅れを数えてしまう。 ボタンを押すまでに1秒前後ずれることがあります。1〜2秒の差を意味ありげに読まず、5秒幅の階級で見るのはこのためです。
- 盤から目を離す。 相手の手に気づくのが遅れれば、待ち時間が実際より長く記録されます。計測ウィンドウと盤を並べ、視線を移すだけで済む配置にします。
- 相手がひとりだけの記録で一般化する。 分かるのは、その相手との対局の傾向です。「オンライン対局は遅い」とは言えません。
- 再読み込みや切断を混ぜる。 再読み込みで同じ部屋へ復帰できる仕組みがありますが、復帰までの時間は通常の一手とは別物です。メモ欄に書いて別集計にします。
- タブが裏に回る。 計測ページを隠した状態では、ブラウザがページの動作を抑えることがあります。ボタンを押した時刻を読むだけの使い方なら影響は小さいはずですが、不安なら紙とストップウォッチでも構いません。
- 局数が少ないまま結論を出す。 1局の中央値と、5局の中央値は別物です。
次の行動
次にオンライン対局を遊ぶとき、計測ページを横に開き、まず1局ぶんの待ち秒数を記録してみてください。2〜3局たまったら、中央値と四分位、最大値の手を並べて、上の表に当てはめます。なお、部屋は24時間、部屋と対戦履歴は作成から7日後に削除対象です。記録は自分の手元に残してください。対戦履歴に一手ごとの時間が含まれるかどうかは、現在の案内で確認します。

