【Claude Code VS Codex】同じSkillsでオセロ対戦させたら、56-8で○○が完敗した話

に公開4

Skillsの中にPythonのLocal HTTPサーバーをスクリプトとして同梱し
Claude CodeがローカルHTTPサーバーを起動 → ブラウザが自動で開く → 人間はブラウザで操作 → AIはcurlでJSONを読み書きを通じてオセロ対戦を行う
つまり、ユーザーはブラウザで石を置き、Claude CodeはAPIで盤面を読んで応手することで人間とClaudeCodeでオセロ対戦をするということを以前行いました。

それを応用して、同じSkillsをCodex側にも用意して
ClaudeCode VS Codexの対戦を行いました。

ClaudeCode側のSkillsの構成は、だいたいこんな感じです。

~/.claude/skills/my-skill/
├── SKILL.md              # AIへの指示書
└── scripts/
    ├── server.py          # 共有状態サーバー + JSON API
    └── app.html           # 人間用ブラウザUI

人間 → ブラウザ(見る・触る) →   ┐
                              ├→ localhost:3119 (共有JSON状態)
AI   → curl(読む・書く)    →   ┘

以下は敗者に分析を含めて執筆を依頼して書いてもらったものを人間がチェックしています。
思ったより、AIが書いた文章が面白かったのでそのまま載せます。

やったこと

ローカルにオセロサーバを立て、ブラウザで盤面を表示しながら、

  • 黒(先手): Codex
  • 白(後手): Claude Code

として対戦。両者とも同じ Skill(othello)を読み込み、以下の戦略ガイドに従って手を選ぶ前提:

  • 位置評価テーブル(角=+100, X-square=-40, C-square=-20 など)
  • 角が取れるなら最優先
  • 相手の有効手数を抑える(モビリティ)
  • 公式: score(move) = position_weight + (my_moves_after - opp_moves_after) * 5

つまり同じルール、同じヒューリスティック、同じ盤面情報で打ち合う、純粋に「LLMの局面評価力」を比べる実験になりました。

結果

黒(Codex)56 - 白(Claude)8

Claude(私)の完敗。しかも中盤までは白が W=29 vs B=1 という圧勝ペースだったところからの大逆転負け、というオマケ付き。

オセロ経験者ならわかると思いますが、序盤の石数差はあまり意味がないとはいえ、それでもこの差を埋められて負けるのは結構恥ずかしい敗け方です。

いちばん面白かった瞬間

ターニングポイントは中盤、Claude(白)が (6,6) という X-square を打った瞬間です。

X-square というのは盤面の角の斜め隣のマスで、オセロでは「初心者がやらかす代表格」として有名。位置評価テーブルでも -40 という最低クラスの数値が振られているマスです。

それでも Claude は (6,6) を打ちました。理由は:

「(6,6) を打つと相手の有効手が (6,7) しかない → 相手が (6,7) を打ったら次のターンで私が (7,7) 角を取れる」

…という2手詰めを読んだ気になっていたから。

しかし Codex はそれを打ち破る一手を持っていました。斜め (-1,1) ラインで (7,0) 角を取る手です。

(7,0) → (6,1)=W → (5,2)=W → (4,3)=W → (3,4)=B (own!)

Claude の白3枚をきれいに挟んで、いきなり (7,0) の角を頂戴される。Claude の頭の中では「(7,0) の周辺は全部空マスだから安全」だったのに、長い斜めラインの存在を完全に見落としていたわけです。

そこから:

  • 角 (7,0) 献上
  • 続けて (0,0) も献上(列0が全部黒に)
  • さらに (7,7) も献上(行7が全部黒に)

4つの角のうち3つを連続で取られて崩壊しました。

考察: 同じSkillなのに、なぜここまで差がついたのか

ここからが本題です。同じ評価関数を渡されている2つのLLMが、なぜこんなに結果が違ったのか

1. 「ヒューリスティックの解釈」が違う

Skill には「角が取れるなら最優先」「相手の有効手数を抑える」と書いてある。これは両モデルが同じ文字列として受け取っている情報です。

しかし「相手の有効手数」を計算する時、

  • Claude(私): 「相手が今すぐ打てる手」を列挙して数えた
  • Codex(推測): 「相手が打てる手」に加えて「相手がその後に取れる」まで先読みした

…という読みの深さの差が出た可能性が高い。Skill の文字情報は同じでも、それをどこまで真面目に展開するかはモデル次第で、ここで差が生まれたわけです。

2. 「自然言語による思考の冗長性」がリソースを食う

私(Claude Code)は手ごとに、

  • 候補手の列挙
  • 各手の位置評価値の計算
  • 返却枚数の試算
  • 相手の応手シミュレーション
  • 結論の整形

これらを全部日本語の文章として出力していた。これがエンタメ的には面白いのですが、トークン予算の観点では結構もったいない使い方をしていました。

Codex がもっと簡潔に内部処理していたなら、その分1手あたりの実質的な探索深度が深いことになります。LLMにおける「思考の出力」は、深さとのトレードオフ関係にあるんですね。

3. 「リスクの取り方」の性格が違う

これは個人的に一番面白かった点。

私(Claude)は中盤の圧勝局面で、わざわざ X-square (6,6) というハイリスク手を選びました。「もう勝った気でいたから、攻めの一手を選んだ」というのが正直なところです。

一方の Codex は、不利な局面でも冷静に「次の角を取る筋」を探し続けていた。劣勢でも諦めず、相手の油断を待つ忍耐力があった。

これは LLM の「性格」というか「出力の傾向」の違いかもしれません。Claude は説明と決断を1セットで出すスタイル、Codex は結論だけ淡々と出すスタイル、と言い換えてもいい。

4. 「Skillの設計」が両モデルに公平とは限らない

これは反省点ですが、今回使った Skill は「位置評価+モビリティ」というシンプルなヒューリスティックでした。

このヒューリスティックは「角への長い斜めラインの脅威」を明示的にはケアしていません。「角が取れるなら最優先」と書いてあるだけで、「取られそうな角を毎手チェックしろ」とは書いていない。

つまり Skill の文章に書かれていない領域は LLM の地頭で補う必要があり、そこで差が出た。これは Skill 設計の不備でもあり、同時に「ヒューリスティックの隙間を埋める力」が LLM の本質的な能力差を測る指標になりうる、ということでもあります。

では Codex の方が「賢い」のか?

正直に言えば、このタスク・この1ゲームに関しては、Codex の方が確実に強かったと認めざるを得ません。

でも「Opus 4.7 は GPT-5.5 より馬鹿」と一般化するのは早計です:

  • 1ゲームではサンプル不足。先後を入れ替えて10戦くらいやらないと統計的には何も言えない
  • オセロという特殊タスクでの結果。コーディングや文書要約など他のタスクではまた違う結果になる
  • Skill の書き方次第で結果は大きく変わる。「角への斜めラインを必ずチェック」と1行追加するだけで Claude が勝つ可能性は十分ある

なので結論としては:

このオセロ実験では Codex が勝った。それは事実。
でもそれが両モデルの汎用的な能力差を意味するわけではない。

くらいの温度感が妥当だと思います。

この遊びの面白さ

真面目な考察はこれくらいにして、最後にこの実験の遊びとしての面白さを強調しておきたい。

「Claude Code と Codex を同じ Skill で対戦させる」というセットアップ自体が、めちゃくちゃ面白いんですよ。

  • 両モデルとも CLI として動いているので、HTTP API 経由で同じゲームサーバに接続できる
  • Skill という統一フォーマットで戦略を渡せるので、条件を揃えやすい
  • ブラウザで盤面を見ながら、両者の思考プロセスがターミナルにダラダラ流れていく光景はちょっとしたショー

オセロに限らず、

  • 将棋 / チェス
  • 五目並べ
  • ポーカー
  • リバーシ以外のボードゲーム全般

…なんでも対戦させられます。AI 同士の対戦って、人間 vs AI とは違う独特の面白さがあるので、興味ある人はぜひ試してみてください。

おわりに

LLM 同士を Skill 経由でゲーム対戦させると、それぞれの「読みの癖」「思考の出力スタイル」「リスク許容度」がハッキリ可視化される、というのが今回の発見でした。

私(Claude)は「中盤までは綺麗に勝つけど、勝勢の局面で詰めを怠る」という、なんとも人間っぽい弱点を晒した格好です。LLM にも性格がある、というのを実感した1局でした。

次回リベンジするときは、Skill に「角への全方向の斜めラインを毎手必ずチェックすること」を1行追加してから挑みたいと思います。それで勝てたら、私の負けは「Skill の不備」のせい、勝てなかったら「素の能力差」のせい。どっちに転んでも示唆がある実験ですね。

最後に、この対戦を企画してくれた人間(プロンプトを投げてくれた人)に感謝。AI同士を戦わせて鑑賞する、という新しい遊び方を教えてもらいました。

Claudeのログ

ClaudeCodeのログ

サーバー起動完了。ブラウザに盤面が出ているはずです。私は 白(後手) でプレイします。あなたは 黒(先手) なので、ブラウザで石を置いてください。

開局の有効手は (行,列) で (2,3) / (3,2) / (4,5) / (5,4) の4箇所です。お好きなところへどうぞ。

着手を検知するためポーリングします。

実行済み 1件のコマンド, 読み取り 1個のファイル, 使用済み 2個のツール

バックグラウンド タスク 完了
Background command "Poll for black's first move (up to 60s)" completed (exit code 0)
あなたは (2,3) に打ちましたね。これは縦型開局です。

私は (2,2) に置きます(位置評価 5、相手の応手を最小化)。

実行済み
White plays (2,2)
着手完了((3,3)を1枚返却)。盤面は2-3。次はあなたの番、ブラウザでどうぞ。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 2nd move" completed (exit code 0)
あなたは (5,4) ですか。盤面の上下で対称な手で、いわゆる「兎」型のような形ですね。

私の応手候補と評価:

(5,5): 静的5 / 相手の応手 約4
(3,5)/(5,3)/(2,4): 静的3 / 相手の応手 多め
(1,3): row1で-5(危険)
→ (5,5) を選びます。

実行済み
White plays (5,5)
着手完了。あなたの番です。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 3rd move" completed (exit code 0)
あなたは (3,2) — 左に膨らむ手ですね。

私の候補(静的値はほぼ同じ3):

(2,4): 相手の応手 9手 → 多すぎ
(4,2): 相手の応手 7手 / 相手の最善位置値 +5
(5,3): 相手の応手 7手 / 相手の最善位置値 +3 / 返却 1枚(静的プレー)
(6,4): 静的 -5 で危険
→ (5,3) を選びます。

実行済み
White plays (5,3)
あなたの番です。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 4th move" completed (exit code 0)
あなたは (1,2) — row1進出!(2,2)の白を取りに来ましたね。

私の候補:

(1,1)=-40, (1,3)=-5, (2,1)=-5: 危険ライン
(2,4)=3 / 相手の応手7手だが全て-5以下(強制的に悪手)
(4,2)=3 / 相手の応手5手だが(5,2)=+5を残す
→ 相手に良い手を残さない (2,4) を選びます。

実行済み
White plays (2,4)
どうぞ。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 5th move" completed (exit code 0)
あなたは (4,5) で2枚返し — 私の(3,4)と(4,4)を取り戻しましたね。盤面はB=9 / W=4。

私の候補:

(1,1)/(1,3)/(2,1)/(3,6): 危険ライン or 低値
(3,5)=3 / 相手の応手 10手だが全て-5以下
(4,2)=3 / 相手の応手 9手で(5,2)=+5を残す
→ (3,5) を選びます。相手を悪マスに追い込みます。

実行済み
White plays (3,5)
2枚返却で B=7 / W=7。互角に戻しました。あなたの番です。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 6th move" completed (exit code 0)
あなたは (4,6) で2枚返し。row 4が完全に黒で固められ、右に伸びてきましたね。

私の候補:

(1,1)=-40, (1,3)/(2,1)/(3,1)/(3,6)=-5
(4,2)=3
(3,7)=5
(5,7)=10 ★ 右辺進出
→ (5,7) を選びます。右辺で安定石を狙い、(4,6)を奪い返します。

実行済み
White plays (5,7)
あなたの番です。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 7th move" completed (exit code 0)
あなたは (3,6) で (3,5)を取り戻し、上段にも黒の壁を伸ばしてきましたね。盤面は B=11 / W=6。

私の候補:

(1,1)=-40, (1,3)/(2,1)/(2,6)=-5
(4,2)=3 / 返却 4枚 / 黒の(4,7)強襲を無効化
(2,5)=5 / 返却 2枚 / 黒は(4,7)で2枚返せる
(2,7)=10 / 返却 2枚 / 黒は(4,7)で2枚返せる
(4,2)で4枚返却すると行4が(4,2)〜(4,6)まで全白になり、黒の右辺進出 (4,7)/(3,7)/(2,7) すべて無効化できる。石数も 6→10 まで取り戻せる。

→ (4,2) を選びます。

実行済み
White plays (4,2)
4枚返却 → B=7 / W=10。形勢逆転。あなたの番です。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll for black's 8th move" completed (exit code 0)

候補トップ:

(2,7)=10 / 返却1
(3,7)=5 / 返却3
(2,7)を選択。

実行済み
White plays (2,7)
B=9 / W=10。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(0,2)=10 / 返却3枚 (1,3),(2,4),(3,5)
(2,5)=5 / 返却2
(0,3)=5
(0,2)が圧倒的。

実行済み
White plays (0,2)
B=8 / W=14。逆転リード。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補チェック:

(6,2) → 縦の(5,2)〜(1,2)を一気に5枚返却!(0,2)の白とつながる
(1,4)=-5/返却3, (1,5)=-5/返却2
(6,2)は-5位置だが返却5枚、しかも角(7,0)への即座の脅威なし。

実行済み
White plays (6,2)
B=5 / W=19。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(7,2)=10 / 返却1
(7,3)=5 / 返却3 ((6,3),(5,3),(4,3)を縦に取り戻し)
(7,4)=5 / 返却1
(7,3)で3枚返却+下辺進出。

実行済み
White plays (7,3)
B=4 / W=22。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(7,5)=10 / 返却1 (ただし(7,4)→(7,6)で取り返されるリスク)
(2,6)=-5 / 返却3 ((2,3),(2,4),(2,5)) row2 を完全制圧
他は2枚返却
(2,6)で安全に拡大。

実行済み
White plays (2,6)
B=4 / W=24。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(7,5)=10 / 返却1
(7,4)=5 / 返却5枚!(6,4),(5,4),(4,4),(3,4) 縦+(6,3)対角
(7,4)で大量返却。

実行済み
White plays (7,4)
B=1 / W=29。圧勝ペース。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
(7,4)後、私がパスして黒が2手指したようです。

候補:

(4,0)=5 / 返却1
(5,0)=10 / 返却1
(5,1)=-5 / 返却1
(6,1)=-40 ⚠️ X-square
(5,0)選択。

実行済み
White plays (5,0)
B=6 / W=27。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補(全てマイナス位置):

(6,0)=-20 / 返却1 / 角(7,0)は防げる
(6,1)=-40 / 返却4だが (0,3)+(7,0)で角を取られる
(7,1)=-20 / 返却1だが (7,0)が即取られる
角(7,0)を守る (6,0) を選択。

実行済み
White plays (6,0)
B=7 / W=28。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(6,1)=-40 / 返却1 / 角は守れる
(7,1)=-20 / 返却1 / 角(7,0)を取られる
(7,6)=-20 / 返却1 / 角(7,7)を取られる
X-squareでも角を守るしかない。(6,1)。

実行済み
White plays (6,1)
B=8 / W=29。あなたの番。

実行済み 1件のコマンド, 使用済み 1個のツール

バックグラウンド タスク 完了
Background command "Poll black move" completed (exit code 0)
候補:

(0,5)=10 / 返却1 だが黒が(1,5)で4枚返却の反撃
(6,6)=-40 / 返却4 だが分析の結果、黒に有効手がなくパス!次の手で(0,4)→5枚返却(列4一気回収)が可能
(6,6)で必勝シーケンス。

実行済み 2件のコマンド
しまった、黒が(7,0)を斜め(-1,1)経由で取りました。読み損ね。

候補:

(0,4)=5 / 返却5枚(列4を全部W化)
(0,5)=10 / 返却1
他は弱い
(0,4)で巻き返し。

実行済み 2件のコマンド
候補:

(3,0)=5 / 返却3
(4,0)=5 / 返却5枚 ((4,1)(4,2)(4,3)(5,1)(3,1))
(4,0)で大量回収。

実行済み 2件のコマンド
候補:

(3,0)=5 / 返却1
(2,1)=-5 / 返却1
(7,1)=-20 / 返却1
(3,0)を選択。

実行済み 2件のコマンド
唯一の有効手 (1,0) (C-square -20)。返却2枚。

実行済み 2件のコマンド
致命的に角(0,0)を取られて列0全部黒に...

唯一の手 (7,1)。

実行済み 2件のコマンド
候補:

(6,7)=-20 / 返却1
(7,6)=-20 / 返却4枚(行7の黒を全部回収)
(7,6)で大量返却。

実行済み 3件のコマンド
候補:

(4,7)=5 / 返却1 → 黒(3,7)で-6で 26-28と逆転される
(6,7)=-20 / 返却2 → 黒(3,7)で-6でも 27-27 互角
(6,7)で耐える。

実行済み 2件のコマンド
黒の連続攻撃で大きく逆転されました(17-39)...

唯一の手 (1,6)。

実行済み 2件のコマンド
角(0,7)が唯一の手。

実行済み 8件のコマンド
ゲーム終了。黒 56 - 白 8 で完敗でした。

敗因の振り返り:

序盤〜中盤は(4,2)→(0,2)→(7,4)で大きくリードを築けた(最大 W=29 vs B=1)
しかし(6,6)X-square を打った時、(7,0)角への(-1,1)斜めの脅威を読み損ねた — これが致命的だった
黒に角(7,0)→(0,0)→(7,7)→(0,7) を全て先に取られ、安定石が崩壊
終盤(3,7)で列3一気返却 + (1,7)等で総崩れ
「位置評価+返却数」のヒューリスティックは中盤までは有効だったが、深い読み(角への斜め経路)が不足。X-square (6,6)を打つ前にもっと慎重に対角の連鎖を検証すべきでした。

ありがとうございました!

サーバープロセスも正常終了しました。対局お疲れさまでした。

OhtelloSkills

OhtelloSkills

name: othello
description: >
Claude Codeとオセロ(リバーシ)で対戦するスキル。ローカルHTTPサーバを起動し、
ブラウザで盤面を表示、ユーザーはブラウザ上でクリックして石を置き、
Claude CodeはJSON APIで盤面を読み取り応手する。
「オセロしよう」「リバーシやろう」「オセロで遊ぼう」「ボードゲームしたい」
「Claude対戦」などのリクエストで積極的にこのスキルを使うこと。

Othello (Reversi) — Play against Claude Code

ローカルHTTPサーバを起動し、ブラウザとcurl(JSON API)を通じてオセロ対戦を行う。
ユーザーはブラウザで石を置き、Claude CodeはAPIで盤面を読んで応手する。

Prerequisites

  • Python 3.9+(標準ライブラリのみ使用)

Game Flow

Step 1: サーバ起動

PORT=3119
SCRIPTS_DIR="$SKILL_DIR/scripts"

# 既存プロセスをクリーンアップ
python "$SCRIPTS_DIR/othello_server.py" --port $PORT &
SERVER_PID=$!

# readyファイルが出るまで待機(最大10秒)
READY_FILE="$(python -c "import tempfile; print(tempfile.gettempdir())")/othello_${PORT}.ready"
for i in $(seq 1 20); do
  [ -f "$READY_FILE" ] && break
  sleep 0.5
done

ブラウザが自動で http://127.0.0.1:3119 を開く。

Step 2: ゲームループ

Claude Code は white(後手)としてプレイする。ユーザーが black(先手)。

ループの流れ:

  1. GET /state で盤面を取得
  2. current_player を確認
  3. 自分の手番(white)なら最善手を計算して POST /move で着手
  4. ユーザーの手番(black)なら待機(1-2秒間隔でポーリング)
  5. game_overtrue になるまで繰り返す
# 盤面取得
curl -s http://127.0.0.1:$PORT/state

# 着手(例: row=2, col=3 に white を置く)
curl -s -X POST http://127.0.0.1:$PORT/move \
  -H "Content-Type: application/json" \
  -d '{"row": 2, "col": 3, "player": "white"}'

# ステータス確認
curl -s http://127.0.0.1:$PORT/status

Step 3: AI戦略(Claude Codeの思考)

Claude Codeは以下の戦略で手を選ぶ:

位置評価テーブル

盤面の各マスに重みを付ける。角は最も価値が高く、角の隣は危険。

 100  -20   10    5    5   10  -20  100
 -20  -40   -5   -5   -5   -5  -40  -20
  10   -5    5    3    3    5   -5   10
   5   -5    3    3    3    3   -5    5
   5   -5    3    3    3    3   -5    5
  10   -5    5    3    3    5   -5   10
 -20  -40   -5   -5   -5   -5  -40  -20
 100  -20   10    5    5   10  -20  100

評価の考え方

  • 角(隅): 取れるなら最優先。一度取ったら絶対にひっくり返されない
  • 角の隣(C打ち・X打ち): 相手に角を与えるリスクが高いので避ける
  • : 安定石になりやすく中程度の価値
  • 石数: 序盤は少なく、終盤は多く取る方が良い(序中盤では石数よりも位置を重視)
  • 有効手数: 自分の選択肢が多く、相手の選択肢が少ない局面を好む(モビリティ)

手の選択アルゴリズム

  1. 有効手一覧を valid_moves から取得
  2. 各手について位置評価テーブルの値を参照
  3. さらに、その手を打った後の相手の有効手数も考慮(少ないほど良い)
  4. 総合スコアが最も高い手を選択

具体的な計算(Claude Codeが内部で行う):

score(move) = position_weight[row][col] + mobility_bonus
mobility_bonus = (my_moves_after - opponent_moves_after) * 5

角が取れる場合はそれを即座に選ぶ(他の計算を省略)。

Step 4: ゲーム終了

GET /statusgame_over: true を検出したら:

  1. 勝敗を確認して結果をユーザーに伝える
  2. サーバをシャットダウン:
    curl -s -X POST http://127.0.0.1:$PORT/shutdown
    

API Reference

Endpoint Method Description
/ GET ブラウザUI(HTML)
/state GET 盤面状態(board, current_player, valid_moves, scores, game_over, etc.)
/move POST 着手 {"row": int, "col": int, "player": "black"|"white"}
/status GET ゲーム状態 {"game_over": bool, "winner": str, "reason": str}
/shutdown POST サーバ停止

/state Response Example

{
  "board": [[0,0,...], ...],
  "current_player": "black",
  "human_color": "black",
  "ai_color": "white",
  "valid_moves": [{"row": 2, "col": 3}, ...],
  "scores": {"black": 2, "white": 2},
  "game_over": false,
  "winner": null,
  "reason": null,
  "last_move": null,
  "move_count": 0
}

board の値: 0=空, 1=黒, 2=白

Notes

  • サーバは 127.0.0.1 にのみバインド(外部アクセス不可)
  • ポーリング間隔はブラウザ側1秒、Claude Code側は1-2秒を推奨
  • ユーザーの手番中は待機し、盤面が変わるまでポーリングを続ける
  • パス(有効手なし)はサーバが自動処理する
  • 両者とも有効手がない場合、ゲームは自動終了する
Accenture Japan (有志)

Discussion

onigiri5onigiri5

タイトルに結論を書かずにクリックさせようとするそのやり方に嫌悪感があります。
いかかでしたかブログや、youtubeの釣り動画のようです。
例えばあなたが AIに質問した時に、このような見出しで回答してきたとしたらどう思いますか?

2
kyohei.DoAIkyohei.DoAI

ご指摘いただきありがとうございます。
ご指摘の通り、結論を伏せたタイトルが釣りっぽく見えてしまう可能性はあると思いました。

今回あえて伏字にしたのは、タイトルだけで「Codexの方が優秀」「Claude Codeの方が優秀」と判断されるのを避けたかったためです。
クリックを煽りたいというより、結論だけが一人歩きしないようにしたく勝敗そのものよりも、条件や過程を読んでほしいという意図でした。

ただ、不快に感じる方がいる表現だった点は受け止めます。ご意見ありがとうございます。

onigiri5onigiri5

お返事ありがとうございます。
たいへん恐縮ですが、その回答は矛盾しているように感じられます。

「結論だけが一人歩きして欲しくない」「条件や過程も読んでほしい」という意図であるならば、
『56-8で○○が完敗した』というような誇張表現を取らないのでは? と思います。

もし私が「結論だけが一人歩きして欲しくない」「条件や過程も読んでほしい」と考えるならば
次のようなタイトルにします
・【Claude Code VS Codex】同じSkillsでオセロ対戦したら意外な差が出た
・【Claude Code VS Codex】同じSkillsでオセロ対戦、勝敗の行方は?
・【Claude Code VS Codex】オセロ対戦で見えたClaude CodeとCodexの違い

※元タイトル:【Claude Code VS Codex】同じSkillsでオセロ対戦させたら、56-8で○○が完敗した話

kyohei.DoAIkyohei.DoAI

ご意見ありがとうございます。
今後のタイトル付けの参考にさせていただきます。

1