
将棋のような完全情報のゲームでは、実力がほぼそのまま勝敗になる。素人がまぐれでプロに勝つ、ということはめったに起きない。ところが麻雀は違う。配牌もツモも運任せで、相手の手牌は見えない。だから一局や一半荘なら、素人がプロを食うことがある。
では、AIに麻雀を打たせたらどうなるのか。実力差はどこまで結果に出るのか。そしてAIも人間と同じように、ちゃんと振り込んでしまうのか。それとも危ない場面をすべて避け切ってしまうのか。確かめられる場所が欲しくて、AI同士に東風戦を打たせるアリーナを自作した。
最初に走らせた1局が、いきなり答えの半分を教えてくれた。
オーラス、最下位、16,000点差

東風戦の最終局だ。手前のAI-Aは15,800点で最下位。首位のAI-Bは31,800点。その差は、ちょうど16,000点ある。
麻雀では同点で並んだ場合、起家(最初の親)に近い席が上位になる。AI-Aはその起家なので、16,000点を取り返して並べばそれだけで1位になれる。逆に言えば、16,000点に1点でも足りなければ届かない。倍満クラスの手が必要ということで、そう簡単に出るものではない。
AI-Aは立直をかけた。
決着

立直、一発、タンヤオ、三色同順、そしてドラが4翻。合計9翻40符の倍満16,000点。必要だった点数と、ぴったり同じである。しかも振り込んだのは、3番手につけていたAI-Cだった。

AI-Aは31,800点。首位AI-Bとまったくの同点である。1点の余りもなく必要な点数だけを積み、起家の優先で1位に滑り込んだ。最下位から、たった1局で。振り込んだAI-Cは21,400点から5,400点まで落ちて最下位に沈んだ。
細部を見るともっとひどい。ドラ4翻のうち3翻は裏ドラだ。立直が成功したときだけめくれる、完全にランダムなおまけである。もし裏ドラが乗っていなければこの手は6翻の跳満12,000点で、AI-Aの最終点は27,800点。1位ではなく3位で終わっていた。1位と3位を分けたのは、伏せてあった牌を1枚めくった結果だった。
実は、この4人は同じAIである
ここで白状すると、AI-AからAI-Dの4体は、同じクラスを同じ設定で4つ作っただけの、まったく同一のプログラムだ。強さの違いは存在しない。違うのは名札と、座った席だけである。
つまり、いま見たドラマは実力とは何の関係もない。配牌とツモがそう転んだだけだ。
何を作ったのか
アリーナは、4人打ち・東風戦(東1局〜東4局)の立直麻雀をAIだけで打ち切れるようにしたものだ。ポン・チー・カンの鳴きあり、立直・一発・ドラ・裏ドラ・フリテン・海底あり、流局のテンパイ料や親の連荘も入っている。
麻雀の実装でいちばん事故りやすいのは和了判定と符・翻・点数の計算なので、そこは自作せず実績のあるライブラリに任せた。自分で書いたのは進行とAIの意思決定まわりで、点棒の合計が常に100,000点になることはテストで担保している。盤面はコードでHTMLとして描画し、各手番をそのまま画像として残せるようにした。この記事の図は全部、実際に走らせた対局から自動で切り出したものだ。

AIへの渡し方はシンプルで、各手番ごとに「いまの手牌」と「切れる牌などの合法な選択肢」を見せ、そこから行動をひとつ選ばせる。返ってきた手は必ず合法手リストで検証し、リストに無い手や壊れた応答が来たら安全な手に落とす。だからAIがルール違反で盤面を壊すことはない。
30局回しても、幻は消えなかった
1局では何も言えない。そう思って、同じ4体で30東風戦を戦わせた。
| プレイヤー | 平均着順 | 1位率 | 4位率 | 着順分布(1/2/3/4) | 平均最終点 | 和了率 | 放銃率 |
|---|---|---|---|---|---|---|---|
| AI-B | 2.13 | 37% | 10% | 11/7/9/3 | 27,377 | 24% | 15% |
| AI-C | 2.43 | 23% | 20% | 7/9/8/6 | 26,533 | 28% | 18% |
| AI-A | 2.53 | 23% | 30% | 7/9/5/9 | 25,150 | 23% | 18% |
| AI-D | 2.90 | 17% | 40% | 5/5/8/12 | 20,940 | 17% | 18% |
この表を見せられたら、たぶん誰でも「AI-Bは強く、AI-Dは弱い」と読む。平均着順は2.13対2.90。1位率は37%対17%、4位率は10%対40%。平均最終点にすると6,437点の差がある。
繰り返すが、4体は同一のコードである。
では、何局回せば実力が見えるのか
この「幻」がどれくらいの大きさで出るものなのか、測ってみた。実力差ゼロの4体で30局を1セットとして、乱数の種を変えて12セット回し、「平均着順が最も良い人と最も悪い人の差」を集計する。1セットの局数も100局、300局、1,000局と増やしていった。
| 1セットの局数 | 平均着順の最大差(12セット平均) | 上位10%相当 | 最悪のセット |
|---|---|---|---|
| 30局 | 0.49 | 0.63 | 0.83 |
| 100局 | 0.27 | 0.35 | 0.52 |
| 300局 | 0.16 | 0.22 | 0.31 |
| 1,000局 | 0.10 | 0.11 | 0.18 |
30局では、実力差ゼロでも平均着順に平均0.49、悪いときは0.83の差が出る。さきほどの0.77はこの範囲にすっぽり収まっていた。ただの偶然だったわけだ。
局数を増やすと差はきれいに縮み、1,000局で0.10まで落ちた。試行回数の平方根に反比例する、教科書どおりの振る舞いである。念のため4,000局を通しで回してみると、4体の平均着順は2.470〜2.530に収まり、最大差は0.060まで縮んだ。この実験では席を固定していて、AI-Aは常に東1局の親を務めているのだが、それでも2.490に収束したので、親番が有利という系統的な偏りも無視できる範囲だった。
読み方を裏返すと、こうなる。平均着順で0.2くらいの差を「実力差だ」と言いたければ300局、0.1なら1,000局は回さないと話にならない。 1東風戦あたりモデルを150〜250回呼ぶことを思えば、これは軽い数字ではない。麻雀で「こっちのAIのほうが強い」と示すのは、そもそも相当に高くつく。
AIが下手なのではなく、牌が見えていなかった
ここで実装の話をひとつ。実際のClaudeを座らせる準備をしていて、こちらの落とし穴に落ちた。
盤面を描画するために、牌を「表示用の面情報」に変換する関数を用意していた。数牌なら数字と、萬子・筒子・索子を表すスーツ。ところがモデルに渡すプロンプトを組むとき、この面情報から数字だけを取り出していた。つまりモデルには、4萬も4筒も4索も、区別のつかない 4 として届いていた。手牌も、相手の捨て牌も、全部そうだった。
これでは何も判断できない。麻雀のAIを作っているつもりで、実際には牌の見えない相手に「さあ切る牌を選べ」と言っていたわけだ。
同じ場所を点検したら、他にも見つかった。自分がポンやチーした牌をモデルに渡していなかった(鳴いた後の自分の手が見えない)。そして鳴くかどうかを判断させる場面では、手牌そのものを渡していなかった。「他家が4筒を切りました。ポンしますか」だけを聞いていた。手牌を見せずに鳴きを決めさせていたのである。
LLMがおかしな出力をしたとき、まずモデルの能力を疑いたくなる。だが実際に多いのは、こちらが必要な情報を渡していないケースだ。プロンプトを人間が読める形で1回ダンプして眺めれば、たぶん5分で気づけた。
直したあとのプロンプトはこうなった。
あなたの手中の牌(11枚): 2p 2p 2p 9p 1s 1s 3s 5s 9s E W
あなたの副露: チー[4p 5p 6p](門前が崩れているため立直・門前清自摸和は不可)
他家:
AI-A(南)立直 点16000 副露:なし 河末:[9m 9p 1s 9s 2m 1m]
AI-C(南) 点33000 副露:ポン[hatsu hatsu hatsu] 河末:[南 1s hatsu chun 9p 北]
本物のClaudeは、降りた
ここまでの打ち手はルールベースのAIで、シャンテン数が最小になるように牌を選ぶだけの素朴なものだ。この設計には決定的な欠落がある。降りない。 相手が立直をかけても、自分の手を進め続ける。
それは数字にも出ていて、800東風戦(4,499局)を回すと局の90.3%で誰かが和了した。役満も全局の0.18%出ていて、実際の麻雀の相場(おおむね0.03〜0.05%)の4倍以上だ。全員が最後まで手を作り続けるのだから、大きい手も出やすくなる。冒頭の倍満も、この性質に助けられている。
では本物のモデルはどう打つのか。牌がちゃんと見えるようになったプロンプトで、立直をかけている相手がいて自分の手はまだ2向聴、という局面を実際のClaude 3体(Haiku、Sonnet、Opus)に1回ずつ渡してみた。返ってきた打牌理由がこれである。
Opus: 2向聴で安手、立直者への現物9sを切ってベタオリ開始。2mも現物として温存
Sonnet: リーチ者とポン仲間の両方の現物で安全、形も崩れない浮き牌
Haiku: 立直者Aの出牌済み安全牌で放銃リスク最小化
3体とも「立直者の現物(その相手が自分で切った牌だから当たらない)」を根拠に、降りることを選んだ。ルールベースAIがそもそも持っていない発想である。
面白いのは理由づけの深さの差だ。HaikuとSonnetは「この牌は安全だ」で止まっているのに対し、Opusだけは「2向聴で安手」——自分の手の価値を先に見積もってから、降りると決めている。攻めと守りを天秤にかけた形跡がある。実力差はこういうところに出るのだろう。もっとも、これは1局面に1回ずつ聞いただけの話なので、印象の域を出ない。

結局、誰かが必ず払う
そもそも知りたかったのはここだった。麻雀が運のゲームだというなら、AIはちゃんと振り込んでしまうのか。それとも上手く立ち回って、危ない場面をすべて回避し続けられるのか。もし後者ができるなら、麻雀は運のゲームではなく、回避技術のゲームということになる。
3,000東風戦(16,794局)で、局がどう終わったかを数えてみた。
| 決着のかたち | 局数 | 割合 |
|---|---|---|
| ロン(誰かが振り込んだ) | 11,365 | 67.7% |
| ツモ | 3,803 | 22.6% |
| 流局 | 1,626 | 9.7% |
局の3分の2は、誰かが振り込んで終わっている。 誰も払わずに済む決着(ツモか流局)は3割ちょっとしかない。
プレイヤー個人で見るとこうなる。東風戦1回を放銃ゼロで駆け抜けられたのは36.3%。残りの6割強はどこかで必ず振り込んでいる。そして4人全員が無傷で終わった東風戦は、3,000回のうち11回だけだった。0.37%である。
つまり、一度も振り込まずに回避し続ける、という展開にはならない。 知りたかったことは、これで検証できた。
面白いのは、その理由が技術の不足ではなく構造にあることだ。全員が徹底して降りれば、たしかに誰も振り込まない。ただしその局は流局で終わり、誰の点も増えない。それでは勝てないので、誰かが押す。押した誰かが和了するには、他の誰かの牌を捕まえるか自分でツモるしかない。勝とうとする限り、回避に徹し続けるという選択は取れないのである。麻雀が運のゲームだというのは、つまりそういうことなのだと思う。
なお、ここまでの打ち手は降りないAIなので、この放銃率は上限側の数字だ。実モデルのように降りる判断が入れば下がるはずで、実際そこにこそ実力差が出ると見ている。同一ロジック4体の放銃率は15〜18%とほぼ揃っているのに、和了率は17〜28%と11ポイントも開いていた。振り込みにくさは打ち方でほぼ決まるが、あがれるかどうかは配牌とツモに左右される、ということだろう。モデルの実力差がまず現れるのは和了率や着順ではなく放銃率のはずだ。 ただしこれは同一ロジックでの観察と数手の打牌から立てた仮説にすぎず、試行回数が少ないので暫定である。
一連の結果は、将棋との違いをそのまま映してもいる。完全情報の将棋では実力差が積み上がってほぼ確実に結果へ反映される。一方の麻雀は、不完全情報に運が乗るぶん、短期の成績が運の分散に埋もれる。しかもその「運」は、誰かが必ず払うという構造から生まれている。
まとめと、次にやること
今回作れたのは「AIに麻雀を打たせて、結果を数字と画像で残せる場所」までだ。そこで手に入ったのは、モデルの優劣ではなく2つの物差しだった。
ひとつは、運がどれだけ結果を動かすかという幅。同じ実力の4体でも、1局なら最下位が1位に化けるし、30局でも平均着順が0.77開く。実力差を語るには300局、細かく見るなら1,000局が要る。
もうひとつは、放銃は避けられないという確認。局の3分の2は誰かが振り込んで終わり、4人全員が無傷の東風戦は0.37%しか起きない。麻雀は誰かが払わないと終わらないゲームで、だからこそ運が結果を支配する。AIに打たせても、そこは変わらなかった。
弱いモデルにとっては悪い話ではない。短い勝負なら上位モデルを食う目は十分にある。
そして次にやることは、はっきりした。試行回数を重ねることだ。席ごとに別のモデルを座らせて300局。今回わかったコストの現実からすると、claude CLI 経由では1東風戦に3〜4時間と数十ドルかかってしまうので、直APIで回すことになる。そのとき放銃率が着順より先に分かれるのか。実力差は本当に収束するのか。それは次回に。
おまけ: 全員がガン牌できたら、麻雀は将棋になるのか
もうひとつ、やってみたい実験がある。打ち手全員に「ガン牌」を許したらどうなるのか。
麻雀漫画『哲也』に印南という打ち手が登場する。牌の裏側にある微細な傷や汚れを覚えていて、伏せられている牌が何なのかを見抜いてしまう。いわゆるガン牌——牌の背中を読んで相手の手牌を透視する、当然ながらイカサマの技術である。現実の卓でやったら大変なことになるが、シミュレータの中なら話は別だ。
そして、これが驚くほど簡単に実装できる。盤面のスナップショットを作る関数には「全員の手牌を含めるか」というフラグがあり、AIに渡すときだけ他家のぶんを伏せて呼んでいるだけなのだ。観戦用のスクリーンショットでは全員の手牌が見えているのと同じ仕組みである。そのフラグを立てて、他家の手牌をプロンプトに書き足せばいい。イカサマ師を4人育てるのに、コードは数行しか要らない。
そうすると麻雀は、不完全情報のゲームではなくなる。全員が全部見えている——つまり、将棋の側へ一歩近づく。この記事の見立てが正しければ、そのとき運の分散は小さくなり、実力差が着順にはっきり出るはずだ。逆に、全部見えているのに着順がばらつき続けるなら、麻雀の運は情報の非対称性だけから来ているのではない、ということになる。配牌とツモという「引き」そのものが源だという話になる。どちらに転んでも面白い。
しょーもない思いつきだが、この記事で立てた仮説をいちばん安く検証できる方法かもしれない。印南に感謝したい。
余談: 牌もUIも全部手書きのCSSで、麻雀牌のあの微妙な質感を出すのに一番時間を使った。本当のことを言うと、先日リリースした自社の OrionNaut(オリオンノート) を使えば牌もUIもずっと綺麗に整えられたのだが、今回は「AIに麻雀を打たせる」ほうに情熱が全部吸い取られてしまった。見た目の話は、またの機会に。
制作メモ: 本記事の図と数値は、自作の東風戦シミュレータ上でルールベースAIに打たせた結果です。図中の AI-A〜AI-D は席の名札で、特定のモデルを指すものではありません。したがって着順の差は実力差ではなく運の分散を表します。冒頭の対局は1東風戦(seed 573)、成績表は30東風戦(seed 2025)、収束スキャンは30/100/300/1,000局を各12セット、席の偏り確認は4,000東風戦、和了率と役満率は800東風戦(4,499局)、放銃の集計は3,000東風戦(16,794局)です。実モデル(Claude)同士の対決は実施しておらず、「本物のClaudeは、降りた」節の引用は同一局面に対する各モデル1回の応答、末尾の図は動作確認用のスクリーンショットです。