チェスの「手の数」はなぜ宇宙の原子より多いと言われるのか
遊びを見つける執筆にClaudeを使用しています。

「チェスの手の数は、宇宙の原子の数より多い」という言い方をよく見かけます。最初に押さえておきたいのは、この「手の数」が盤面の種類ではなく、始めから終わりまでの対局の流れ(手順)の総数を指していることです。数字としては10の120乗がよく挙がります。観測できる宇宙の原子は10の80乗前後と言われるので、桁にして40桁違います。 10の120乗の出どころは、情報理論の創始者として知られるクロード・シャノンが1950年に発表した、チェスをコンピューターに指させる方法についての論文です。そこで示されたのは、細かく数え上げた結果ではなく、掛け算による見積もりでした。この記事では、その見積もりを分解し、比喩がどこまで正しいかを確かめます。さらに、読者が自分の手で確かめられる方法も示します。
この記事の目次
数えているのは「局面」ではなく「手順」
チェスの数を語るときは、次の二つを区別する必要があります。
- 局面の数:駒がどこに並んでいるかという、盤面の種類の数です。一般には10の44乗から47乗程度と見積もられています。
- 手順の数:最初の並びから終局までの、指し手の列の数です。10の120乗という数字はこちらです。
手順のほうが圧倒的に多いのは、同じ局面に別の順番でたどり着けるからです。たとえばナイトを動かしてからポーンを進めても、ポーンを進めてからナイトを動かしても、同じ並びになります。局面は一つでも、手順は二つ数えられます。手順の数はこうした経路の重なりをすべて別々に数えるので、局面の数よりずっと大きくなります。
10の44乗の局面でも、桁としてはすでに途方もない数です。ただ、宇宙の原子との比較に使われるのは、10の120乗という手順の数のほうです。
10の120乗はどう組み立てられるか
見積もりの考え方は単純です。一つの局面で指せる手の数(合法手の数)の平均を、対局の長さの分だけ掛け合わせます。
チェスでは、白と黒が一手ずつ指した組を「1手」、片方だけの一手を「半手」と数えます。シャノンの見積もりは、おおまかに次の前提に立っています。
- 一つの局面での合法手は平均で30前後です。
- 1手(白黒の2半手)で選択肢は約30×30=900通りで、これを約10の3乗とみなします。
- 一局を約40手(80半手)とみなします。
すると、10の3乗を40回掛けて10の120乗になります。論文の趣旨は、全部を調べ尽くすのは不可能だと示すことにありました。ですから、この数字は厳密な総数ではなく、桁を知るための目安として読むのが正確です。
前提を少し動かすと、結果はこう変わります。半手80回で計算した値です。
- 20通り、80半手後の手順数の目安:10の104乗ほど
- 30通り、80半手後の手順数の目安:10の118乗ほど
- 35通り、80半手後の手順数の目安:10の123.5乗ほど
- 40通り、80半手後の手順数の目安:10の128乗ほど
平均を20に下げても、10の104乗です。10の80乗を大きく超えます。長さを縮めても同じです。30通りの場合、10の80乗を超えるのに必要なのは約54半手で、1手で言えば27手ほどです。つまり、手順の数が宇宙の原子の数を上回るという結論は、前提を多少変えても揺らぎません。
原子との比較は何を伝え、何を伝えないか
観測可能な宇宙の原子の数は、10の78乗から82乗あたりと推定されており、10の80乗が目安としてよく使われます。この推定そのものに幅があるので、比較は「桁が違う」という感覚をつかむためのものです。
仮定を置いた計算をしてみます。1秒に10億局を数えられる機械を、宇宙の年齢(約138億年、約4×10の17乗秒)の間ずっと動かしたとします。数えられるのはせいぜい10の27乗局ほどで、10の120乗にはまだ93桁足りません。全手順を調べる方法は、原理的にも成り立たないことになります。
一方で、この比較から読み取ってはいけないこともあります。
- 「チェスには10の120乗通りの面白い対局がある」とは言えません。大半は意味のない手の連なりです。
- 「人間やコンピューターは10の120乗を調べている」わけでもありません。強い指し手は、有望でない枝を早く捨てることで成り立っています。
- 10の120乗は目安であり、正確な総数ではありません。
小さなゲームで「手順の爆発」を確かめる
仕組みを体感するには、小さなゲームで手順を全部数えるのが近道です。三目並べは、手順と局面の差が小さな規模で見えます。次のコードは単独で動く最小構成です。HTMLファイルとして保存し、ブラウザで開くだけです。
<script>
const lines=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
function winner(b){
for(const [a,c,d] of lines){
if(b[a]&&b[a]===b[c]&&b[a]===b[d]) return b[a];
}
return null;
}
let games=0;
const seen=new Set();
function walk(b,turn){
seen.add(b.join(''));
if(winner(b)||b.every(x=>x)){games++;return;}
for(let i=0;i<9;i++){
if(!b[i]){
b[i]=turn;
walk(b,turn==='X'?'O':'X');
b[i]=0;
}
}
}
walk(Array(9).fill(0),'X');
let out='手順(ゲーム)の数 '+games+' / 局面の数 '+seen.size;
for(const n of [20,30,35,40]){
out+='\n'+n+'通り×80半手 → 10の'+(80*Math.log10(n)).toFixed(1)+'乗';
}
document.body.innerHTML='<pre>'+out+'</pre>';
</script>三目並べについて一般に知られている値は、手順が255,168通り、到達できる局面が5,478です(空の盤面を含みます)。表示された数がこれと合うかを確かめてください。合っていれば、コードが正しく手順と局面を区別して数えられています。局面は数千なのに、手順は25万を超えています。この比率が、チェスでは10の44乗に対して10の120乗という開きに膨らみます。
下半分は、前の節の表を自分で再計算するための部分です。数字を書き換えて、平均や長さに対する結果の動きを見てください。
「灯りのチェス」で一手あたりの選択肢を数える
見積もりの核は「平均で何通りから選べるか」です。ここは自分の対局で調べられます。「灯りのチェス」には、駒の動き方ガイド、全棋譜の表示、同じ画面でのふたり対局があります。ガイドの表示の細かい仕様は、作品を開いて確かめてください。
問い
自分が実際に指す対局では、各手番で合法手が平均何通りあるでしょうか。それを使うと、手順の数の目安はどう変わるでしょうか。
準備
- 灯りのチェス(ひとり対局でもふたり対局でも構いません)
- 記録用の紙か表計算ソフト
手順
- 開始局面で、白の合法手を数えます。ポーン16通りとナイト4通りで、合計20通りになるはずです。この確認で、数え方の感覚をそろえます。
- 対局を進め、自分の手番ごとに「合法手の総数」を記録します。全部を毎回数えるのが大変なら、5手番ごとなど間隔を決めて数えてもかまいません。
- 同じ対局の最後に、全棋譜から半手の総数を読み取って記録します。
- 3局以上、できれば相手の強さや序盤の進め方を変えて繰り返します。
記録の単位
1行に「局の番号、半手の番号、合法手の数」を記録します。最後に、局ごとの総半手数も書き添えます。
結果の読み方
- 平均がどの値でも、「平均の合法手数 × 80回」の10の何乗かを前の表と見比べてください。20通りなら10の104乗、40通りなら10の128乗ほどです。
- 自分の局の長さで計算し直すと、実際の対局の短さや長さが桁にどう響くかが分かります。長さが半分になれば、指数も半分です。
起こりやすい誤り
- 序盤だけを数えると、合法手が少なめに出ます。中盤の数も入れてください。
- 見かけの動きと合法手を混同しがちです。王手を受けているときや、駒が王を守る位置で動けないときは、動ける手が減ります。
- ポーンの昇格は、選ぶ駒ごとに別の手です。昇格の選択肢をまとめて1通りと数えないようにしてください。
- 数えた手は、あくまで自分の対局に偏った標本です。結論は「自分の対局ではこうだった」にとどめてください。
設計から読み取れること
「灯りのチェス」の確認済みの仕様から言えることを整理します。
- 判定エンジンとしてchess.jsを同梱し、キャスリング、アンパッサン、選択式の昇格、標準の終局判定に対応しています。これらは合法手の数え方に関わる規則で、昇格を選ぶ手が選択肢として分かれる設計は、先ほど挙げた数え方の注意と重なります。
- CPUの思考時間は約450msに制限されています。10の120乗の手順を調べ尽くせない以上、短い時間で選ぶには、すべてを見ずに範囲を絞るしかないと読み取れます。どのように絞っているかは確認済みの範囲外なので、作品を開いて、強さを変えたときの応手の違いから確かめてください。
- 取った駒の表示と全棋譜の表示があるため、半手の総数や、駒が減るにつれて選択肢がどう変わるかを、自分の対局から読み取れます。
次の行動
まず上のコードを動かして、三目並べの手順と局面の差を確かめてください。次に「灯りのチェス」で3局指し、各手番の合法手の数を記録して、自分の平均から手順数の目安を計算し直してみてください。
参考資料
- Claude E. Shannon, "Programming a Computer for Playing Chess"(1950年の論文)
- chess.js 公式ドキュメント

