以下の内容はhttps://www.m3tech.blog/entry/gomoku-team-buildingより取得しました。


アジャイル開発で準備した五目並べAI対戦イベントが盛り上がった話

こんにちは。エムスリーのAI・機械学習チームの高田です。 このブログはエムスリー Advent Calendar 2025 13 日目の記事です。

AI・機械学習チームはメンバーが福岡から北海道まで、様々な地域のメンバーから構成されています。そこで、チームビルディングデーと称して、オフラインの交流も四半期に一度のペースでチーム全員で集まって様々なイベントを開催しています。

今年の3月に機械学習コンペを開催した際のレポートもテックブログで紹介しているので、ぜひご覧ください。 www.m3tech.blog

このブログでは、2025年10月31日に開催した「五目並べAIチーム最強決定戦」について、チームビルディングイベントの当日の様子と、当日の進行のためにアジャイル的に開発を進めた舞台裏をお話します。

TL;DR

  • AI・機械学習チームのチームビルディングイベントとして「五目並べAI対戦」を開催したよ
  • 当日は4チームが2時間でAIを実装し、トーナメント形式で対戦。会場は盛り上がり、各チームが自然と協力体制を築いていたよ
  • 当日までの準備として、アジャイル的に「まず動くもの」を作り、段階的に機能を積み重ねていく開発は良いアプローチだったよ

はじめに - なぜ五目並べAI対戦なのか

チームビルディングイベントというメンバー間のコミュニケーションを促すコンテンツとして「ゲームAI対戦」を企画しました。

  • 自然な協力体制: 2時間という制限時間の中で、チームメンバーが自然と役割分担し協力する
  • 技術的な議論が活発に: 探索アルゴリズムや評価関数など、普段とは違う技術トピックで盛り上がる
  • 勝敗がある楽しさ: 「勝ちたい」という気持ちが自然とチームの一体感を生む

ゲームの題材としては、シンプルながらも戦略性や実装の難易度が1日のイベントとしては適度な「五目並べ」を採用しました。 五目並べには禁じ手というルール(置けない位置に石を置くと即失格)があるものの、複雑すぎず、ルールを考慮した実装に取り組むには丁度よい題材のボードゲームだったためです。

イベント当日の盛り上がり

2025年10月31日、AI・機械学習チームによる「五目並べAIチーム最強決定戦」が開催されました。オフラインで集まった4チームが、2時間という限られた時間でAIを実装し、トーナメント形式で対戦しました。会場となる会議室では緊張感と熱気が満ちていました。

タイムテーブル - 2時間の戦い

当日のスケジュールは次の通りでした。

時間 内容 詳細
13:00-13:15 レギュレーション説明 ルール説明、禁じ手、時間制御について
13:15-15:15 作業時間 2時間でAI実装からGKEデプロイまで
15:15-15:30 疎通確認 各チームのAPIが正しく動作するか確認
15:30-16:00 トーナメント試合 準決勝(2試合)+ 決勝戦
16:00- TechTalk 各チームが戦略を発表

わずか2時間で「AIロジックの実装」「GKEへのデプロイ」「動作確認」までを完了させる必要があります。今回は運営側のエンジニアで、

  • GKEのデプロイ用のCI/CD
  • OpenAPI SpecificationでゲームAI APIの仕様を定義

を事前に準備しました。

疎通確認の時間では、全チームのAPIが正常に動作することを確認し、本番のトーナメントに臨む準備が整いました。

会場の盛り上がり

各チームが固まってワイワイ開発している写真

作業時間の2時間は

  • 「禁じ手判定、どう実装する?」
  • 「先に盤面評価のロジックを作ろう」
  • 「デプロイ通った!」

各チームが役割分担し、限られた時間で何を優先すべきか議論する姿が印象的でした。 チームワークを自然に強化するチームビルディングにフィットしたコンテンツだったと思います。

当日の対局盤面

対局設定画面

運営チームのPCでフロントエンドを立ち上げ、各チームが社内GKEにデプロイしたAPIに接続してゲームAI同士の対戦を実現しています。

プレイ画面

対戦画面は、五目並べの盤面をSVGベースで実装しました。

準決勝(2試合)

決勝

トーナメント結果 - 各チームのアプローチ

4チームがそれぞれ異なる戦略でトーナメントに臨みました。

最終順位

順位 チーム 主な戦略
1位 Dチーム 後手必勝戦略、守り中心で150手引き分け狙い
2位 Cチーム 高速計測、TDD実践
3位 Aチーム Minimax法 + 評価関数
4位 Bチーム AlphaZero_Gomoku活用(9×9→15×15対応が間に合わず)

優勝チームDの「後手必勝」戦略

大会で最も興味深かったのは、全試合で後攻(白)が勝利したことです。

五目並べ(連珠)では、先手(黒)にのみ三三・四四・長連の禁じ手が適用されます。黒は攻めづらく、白には禁じ手がありません。優勝したDチームは、この非対称性を逆手に取りました。

【大会ルール補足】 本大会は、黒にのみ三三・四四・長連の禁じ手を適用する連珠ルールをベースとし、「150手で引き分けの場合、後手(白)の勝利とする」という特別ルールを採用していました。

優勝したDチームの戦略は

  1. 守り中心で相手の攻めを受ける
  2. 150手で引き分けに持ち込む(引き分け時は白の勝利のルールだった)

でした。

また、4位に終わったBチームは学習済みモデル「AlphaZero_Gomoku」を活用しようとしましたが、そのモデルが9×9盤面対応だったため、15×15の盤面だと縁のエリアに置かれた石を考慮した盤面評価の対応が間に合わず、後半戦に弱くなるモデルとなってしまいました。

前提条件の確認が重要だと再認識させられる結果でした。

ここからは、当日までの準備編として、取り組み方を含め振り返り、学びをまとめていきます。

アジャイル開発の時系列

チームビルディングデーという締切が明確な中で、まずMVP(Minimum Viable Product)としてコア機能に集中し、徐々にリッチさを加えていく。このアジャイル的なアプローチが功を奏しました。

最初から完璧を目指すのではなく、「まず動くもの」を作り、そこから段階的に機能を積み重ねていく。締切があるからこそ、優先順位が明確になり、本当に必要な機能から実装できました。

機能追加のタイムライン

イベントの内容を五目並べAI対戦に決めてから10月31日の本番まで約2週間。業務の合間にClaude Codeへ依頼する形で開発を進めたため、実際の工数は大きくありません。最初の2日間でコア機能を集中実装し、残りの期間でUXを磨きました。

  1. ターミナルUIで動作確認(10月20日) - 最初はCLIで盤面を表示。まず動くものを作った。
  2. 禁じ手検出を実装(10月21日) - 三三・四四・長連の判定。TDDで35件のテストケース。
  3. SVGベースのWeb UIに進化(10月21日) - 盤面を交点に正しく配置、星点も追加。
  4. 石に光沢をつける(10月21日) - SVGのグラデーションで立体感を表現。
  5. AI API対戦機能(10月21日) - OpenAPI仕様を定義し、外部AIを呼び出せるように。
  6. 音声エフェクト追加(10月26日) - 石を置いたときの「カチッ」音、三連以上でチェック音。
  7. CLI機能を削除しWeb UIに特化(10月27日) - イベント当日に必要な機能に集中。
  8. 持ち時間管理(10月29日) - 将棋の持ち時間制を参考に、基本時間5秒+持ち時間60秒。
  9. 時間表示の色分け(10月29日) - 残り時間に応じて緑→オレンジ→赤に変化。
  10. イベント後にヒューマンプレイヤーモード追加(11月14日) - 人間同士でも遊べるように。

UIの変遷

ターミナルで対局

$ pnpm dev play --black-endpoint http://localhost:3001/v1/next-move --white-endpoint http://localhost:3001/v1/next-move

黒色と白色のAPIのエンドポイントを引数にしたCLIコマンドを提供

CLIコマンドとして実装した対局機能

ブラウザ上で簡素なUIを提供

音声やキャラクターなどを準備

  • 対局中のキャラクターのコメントを音源ファイルとして、Text-To-Speechでプリセットを用意
  • 石を置いたときの音をサウンドエフェクトとして再生
  • 持ち時間制度の導入

など、臨場感のある機能を多く導入しました。

人間 vs AIも可能に

まとめ

  • ゲームAI対戦はチームビルディングに効果的: 時間制限と勝敗がある中で自然とチームワークが生まれ、普段とは違う技術トピックで新鮮な議論ができた。「何を優先するか」の意思決定プロセスも磨かれる
  • アジャイル的アプローチが有効: 「まず動くもの」を作り、段階的に機能を積み重ねていく。CLIから始まり、最終的にはリッチなWeb UIが完成した
  • 使い捨てコード × Claude Codeの相性: イベント後に不要になるコードだったため、Claudeに実装を任せやすかった。CLI用コードからWeb UIへの移行に伴う大規模なコード削除も躊躇なく実行できた

技術的な学びだけでなく、普段とは違う形でのコミュニケーションを生む良い機会となりました。 また、運営側も段階的な機能開発で、開催までこぎつけられるのかという不安を抱えずに当日を迎えられたことは、心理的にもプレッシャーが少なく採用してよかったアプローチだったと思います。

We are hiring!

エムスリーのAI・機械学習チームでは、こうしたチームビルディングから日常業務まで全力で取り組むエンジニアを募集しています。

jobs.m3.com




以上の内容はhttps://www.m3tech.blog/entry/gomoku-team-buildingより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14