五目並べAI対戦をHTML・CSS・JavaScriptでゼロから作る方法を丁寧に解説する記事のアイキャッチイメージ。コピペで動くコード、盤面管理、AIの思考ロジックまで初心者でも理解できるように説明しています。

開発ガイド

【コピペで完成】五目並べAI対戦の作り方|HTMLとJavaScriptで学ぶ思考ロジック入門

「五目並べ」はシンプルなルールながら、読み合いや戦略が深く、昔から多くの人を夢中にしてきた定番ゲームです。

この記事では、この五目並べを 「AI対戦ができるプログラム」 として作り上げる方法を、初心者にも分かりやすく解説します。

AIと聞くと難しく感じるかもしれませんが、ご安心ください。
今回作るのは HTML・CSS・JavaScriptだけで動く単一ファイルの五目並べのAI対戦です。
特別なライブラリや開発環境は一切必要ありません。ブラウザとテキストエディタだけでOKです。

「ロジックが難しそう」「理解できるか不安…」という方も大丈夫。
この記事では、完成したコードを そのままコピペして動かすだけ で、すぐにAIと対戦できる五目並べが完成します。

実際に手を動かして AI の挙動を見ながら学ぶことで、
「なぜこのロジックが必要なのか」が自然とつながり、理解がぐっと楽になります。
あなた自身の手で、AI対戦ができる五目並べを作り上げていきましょう!

五目並べAI対戦の基本仕様

まずは今回作成する 五目並べゲームのルールAIがどこまで対応するのか を明確にしておきましょう。
最初に前提が整理されていると、後のロジック解説が一気に理解しやすくなります。

完成版を体験してみよう

五目並べの基本ルール

五目並べは非常にシンプルなルールで遊べますが、念のため基礎を表にまとめておきます。

項目内容
盤面15×15 の格子状の盤を使用します。
プレイヤー黒(先手)・白(後手)が交互に石を置きます。
勝利条件縦・横・斜めいずれかに 5 個の石を連続で並べた方が勝ち
引き分け全てのマスが埋まり、勝者がいない場合は引き分け。

シンプルなルールですが、実際の対戦では「守り」や「先手有利」といった戦略的要素が強く、読み合いも奥深いゲームです。

今回つくるAI五目並べの仕様と特徴

今回のプロジェクトでは「ただ遊べるだけ」ではなく、
実際に考えて打つ“AI対戦”ができる五目並べ を作ります。

まずは全体仕様をわかりやすく表にまとめました

項目仕様内容補足
対戦形式プレイヤー vs AI先手・後手を自由に選択できます。
AI難易度初級・中級・上級探索深度 を変えることで強さを調整します。上級は「3手先」まで読みます。
禁じ手対応黒の「長連」のみ対応※ 連珠の三々・四々などは 今回は未対応(後半で拡張に触れます)。
強制手(重要)勝ち筋・負け筋を最優先でチェック相手の「生き三」など 2〜3手の必勝形を事前にブロックする仕組みです。

まずは動かしてみよう(コピペでOK)

AIの仕組みを理解するいちばんの近道は、コードを読むことではなく 実際に動かしてみること です。
この章では、完成した五目並べAI対戦を 1つのHTMLファイルだけで動かす方法 を紹介します。

ステップ1:ファイルを作成しよう

今回の五目並べAI対戦は HTML・CSS・JavaScriptをまとめた単一ファイル構成 なので、特別な環境は一切不要。
PCとブラウザがあれば、誰でもすぐに動かせます。

  1. 新しいファイルを作成
     PCのデスクトップなど任意の場所に、gomoku_ai.html のような名前で新規ファイルを作成してください。
  2. エディタで開く
     VS Code・Sublime Text・メモ帳など、お好きなテキストエディタで開いてください。

ステップ2:コードをコピペしよう

次の「完成コード」をすべてコピーして、gomoku_ai.html に貼り付け、上書き保存します。

ステップ3:ブラウザで開いてみよう

保存した gomoku_ai.html ファイルをダブルクリックすると、
お使いのブラウザで自動的に開きます。

ゲーム画面が表示されたら、まずは 上級(3手先読み) に設定して遊んでみましょう。
ここで、AIの強力な防御ロジックを確認するためのテストプレイをしてみましょう。

オススメのテスト方法(AIの強さを体感できます)

  • 黒(先手)で4連を作る
     → AIがその両端のどちらかを即座にブロックします。
    4連は、次の手で5連が確定する「即勝手」です。これを最優先で阻止します。
  • 黒で「生き三」を作る
     → AIが急所を最優先で塞ぐ行動を取ればOK。
      これを無視して別の場所を打つAIは弱いAIです。
      本作のAIは、生き三の「準即勝形」をきちんと判断し最優先で対策します。

(※)生き三とは、両端が空いた3つの連なりを指します。

こうしたテストを行うことで、後で学ぶ
「なぜこのロジックが必要なのか?」
という理解が飛躍的に深まります。

まずは遊んでみることが何より大切です。防御ロジックが正しく動いているか、体感しながら読み進めていってくださいね!

ほーく
ほーく

HTMLの解説(盤面と情報表示をつくる)

AIロジックに進む前に、まずはゲームの「舞台」となる HTML構造 を理解しましょう。
今回の五目並べAIは 1ファイルで完結するため、<body> の中に必要な要素をすべて配置していきます。

HTMLの役割と基本構造

HTML部分は大きく分けて次の2つで構成されています。

  • ゲームの表示エリア(盤面)
  • 操作やメッセージを表示するエリア

それぞれの役割を表でまとめると、以下のようになります

役割HTML要素(id / class)説明
全体コンテナ<div class="wrap">中央配置や背景装飾のための外枠。
操作パネル<div class="controls">先手/後手選択(#first)、AIの強さ選択(#level)、開始ボタン(#btnStart)を配置。
スコア・情報表示<div class="status"> / <div id="message">黒石・白石の数や「黒の番です」などのメッセージを表示。
盤面コンテナ<div class="board">盤全体の枠要素。
マス生成エリア<div class="grid" id="grid">JavaScriptが 225マス(15×15)を自動生成するための入れ物。

盤面の中心となる <div id="grid">

盤面のマス(セル)はHTMLに直接225個書き込むのではなく、
JavaScriptで1つずつ生成し、grid内に追加する仕組みになっています。

この方式にすることで、

  • マスを(x, y)座標として扱いやすい
  • AIロジックとの連携がしやすい
  • 盤面サイズを変える応用も簡単

といったメリットがあります。

JavaScriptとの連携ポイント

HTMLに振られた id は、JavaScriptから以下のように取得して使います。

  • gridEl
     → マス(セル)を生成したり、クリックイベントを監視したりする中心的な存在。
  • msgEl
     → 「黒の番です」「AIが思考中…」「黒の勝ち!」など、ゲーム状態を表示。

HTMLはあくまで「骨組み」。
ここにCSSとJavaScriptを組み合わせることで、ようやくゲームとして動き出します。

CSSの解説(盤面デザインとレスポンシブ対応)

HTMLで骨組みができたら、次は CSSで「五目並べらしい見た目」 を作っていきます。
特に重要なのは次の2点です。

  • 15×15 の格子をきれいに描画すること
  • スマホでもストレスなくプレイできるデザインにすること

この章では、そのために実装しているCSSのポイントをわかりやすく解説します。

CSS Grid で 15×15 の格子をつくる

五目並べの盤面は、CSSの Grid(グリッド)レイアウト が最適です。
display: grid を指定し、repeat(15, 1fr) で等分されたマスを作るだけで、
美しく整列した 15 × 15 のセルが自動生成されます。

CSS変数 --board-size: 15; を使っているので、後から盤面サイズを変えるのも簡単です。

CSS抜粋(マス生成部分)

石のデザインとヒント表示

石は、マス(.cell)の中に配置する 円形の要素(.point で表現しています。

要素スタイル説明
.point.black黒い円黒石
.point.white白い円(薄い枠つき)白石
.cell.hint::before半透明の円石を置けるマスのガイド
.forbidden.hint::before赤い円黒の禁じ手(長連)となるマスの警告

ヒント表示があることで、プレイヤーは
「どこに置けるのか」「禁じ手はどこか」を直感的に把握できます。

レスポンシブ(スマホ対応)

五目並べはスマホでも遊ぶ人が多いため、画面サイズに応じて盤面が自動調整されるようにしています。
その中心となるのが min()aspect-ratio の組み合わせです。

aspect-ratio: 1/1 を指定することで、
画面の幅が変わっても「正方形の盤面」が崩れずに維持されます。
ボードゲーム系のUIでは非常に相性の良い手法です。

CSS Grid はボードゲーム開発と相性抜群です。
repeat(15, 1fr) と指定するだけでマスが等間隔で並ぶので、
手作業でHTMLを並べる必要がありません!

ほーく
ほーく

JavaScriptの基本ロジックを理解する

HTMLとCSSで盤面の「見た目」が完成したら、いよいよJavaScriptでゲームに“命”を与えていきます。
この章では、AIロジックを理解する前段階として、盤面データの管理手番の切り替えといった“基本の仕組み”を丁寧に解説します。

定数と盤面(ボード)の管理

五目並べでは、15×15 の盤面をどうデータとして扱うかが非常に重要です。
今回の実装では、盤面を 2次元配列(配列の中に配列) として表現しています。

使用する定数

定数名意味
SIZE15盤面のサイズ(15×15)
EMPTY0何も置かれていないマス
BLACK1黒石
WHITE2白石

盤面配列の仕組み

盤面全体は board という2次元配列に保存します。

このように作ることで、次のように直感的に扱えるようになります。

  • board[y][x] → y 行 x 列のマスを示す
  • board[7][7] = BLACK; → 盤面中央に黒石を置く

ポイント
五目並べは座標管理が複雑になりやすいため、
「board[y][x]」で明確に指定できる構造は非常に有効です。

手番の管理と石の配置

次に、ゲームの進行を管理します。
誰の番なのか、どの色の石を置くのかは次の変数で管理しています。

設定画面で先手/後手を選んだ場合は、ここから書き換えられます。

プレイヤーがマスをクリックしたときの流れ

クリックイベントは onCellClick が処理します。

クリックされたマスを取得したら、次の処理が行われます。

1.座標の取得と合法手のチェック
onCellClick はクリックされたマスの座標を取得し、そのマスが既に埋まっていないか、
黒番の場合に禁じ手(長連)ではないかをチェックします。

2.着手処理の実行
チェックが通ると、placeStone(y, x, humanColor) 関数を呼び出します。
この関数が、データの更新画面の更新を一括して行います。

この placeStone 関数が、AIもプレイヤーも共通して利用する「石を置いて、次の状態へ移行する」ための核となる処理です。

placeStone 関数の動きは以下となります。

  • 盤面データを更新します (board[y][x] = color;)。
  • 画面表示を更新します(redrawStones();)。
  • 勝利判定(checkWinOnBoard)を行い、勝敗が決していればゲーム終了処理を行います。
  • 手番を相手に交代し(turn = opponentOf(color);)、AIの手番であれば aiTurn() へ移行します。

この仕組みにより、AIが選んだ手でもプレイヤーが選んだ手でも、
placeStone 関数を呼び出すだけで、統一された流れで着手と画面表示が完了します。

AIロジックの仕組みを理解しよう(最重要!)

この章は、五目並べAIの「頭脳」にあたる部分です。
五目並べAIは、「ミニマックス法」と呼ばれる探索手法で最善手を決定しますが、それだけではありません。

最大の特徴:5段階の「強制手」ロジックを搭載
五目並べには「次に打たれたら絶対負ける」「ほぼ勝ちが決まる」といった局面が存在します。
これを見逃すと、どれだけ探索しても弱いAIになってしまいます。

そこで今回のAIは、 「今すぐ打たないといけない手」=強制手 を探し、最優先で着手します。

AIの思考フローは「強制手 → ミニマックス」の2段構え

AIは次の順序で手を決めます。

① 強制手があるか?(即勝・即負け阻止など)
↓ YES → その手を返す(探索なし)
↓ NO
② ミニマックス法で最善手を探索する(1〜3手先)

この2段構えにより、

  • 即勝ちを確実に拾う
  • 負ける手を絶対に見逃さない
  • 加えて、深さ3手までの読みで攻め筋を評価できる

という 堅実かつ攻撃的なAI になります。

5段階の「強制手」優先順位(優先度1〜5)

強制手は次のように優先順位が決まっています。
この順序は findImmediateMove 関数にそのまま反映されています。

優先度種類内容目的
1位自分の即勝 (aiWin)そのマスに置けば5連で勝ち最優先で勝利確定
2位相手の即勝阻止 (blockNow)相手が次に置けば勝つマスをブロック1手負けを防ぐ
3位オープン3急所阻止 (blockOpen3)相手の「生き三」を潰す2手先の必勝形を防ぐ
4位準即勝阻止 (blockPre)相手が置くと「次の1手勝ち」が生まれるマス3手先の必勝形を防ぐ
5位自分の二重脅威 (aiDouble)ダブル4など複数の勝ち筋が同時に発生攻撃の優位を確保

AIの優先度と強さについて

五目並べAIの強さは、「生き三」と「準即勝」を見抜けるか」に依存します。

優先度3:生き三(オープン3)急所ブロック

  • 両端が空いた“3連”
  • 次を打たれたらオープン4(1手勝ち)ができる

AIは listOpenThreeBlocks() 関数でこれを検出し、即ブロックします。

優先度4:準即勝ブロック

一見すると安全そうな場所でも、相手がそのマスに置く
 → 次の手で確定勝ちが発生

という「罠」のようなマスが存在します。

AIは countImmediateWinsAfter() 関数で
「相手がそのマスに置いたら、1手勝ちが発生するか?」を調べます。

1つでも勝ちが生まれるなら → 最優先でブロック します。

ミニマックス探索(強制手がない場合の思考)

強制手で着手が決まらなかった場合、AIはようやく探索フェーズに入ります。

評価関数(evaluateBoard)の役割

探索の終端や途中で以下のように盤面を数値化します:

  • オープン4 → 超高得点(ほぼ勝ち)
  • オープン3 → 高得点(2手勝ち)
  • ダブル脅威 → ボーナス加算
  • 中央寄りの手 → 少しだけ優遇

これにより、

  • 中盤は中央寄りの布石
  • 終盤は勝ち筋の読み
  • 相手の強い形を回避

など、自然な動きを取るようになります。

カスタマイズ例(もっと強いAIにしたい人向け)

ここまでで基本の五目並べAIは完成しましたが、実はまだまだ強化できます。
「もっと頭のいいAIにしたい」「盤面やデザインを変えたい」など、発展の余地はたくさんあります。

ここでは、AIの強化デザイン面のカスタマイズを、初心者でも取り組みやすい内容にしぼって紹介します。

AIをもっと強くするには?

今回のAIは、すでに次の2つの技術を使っています。

  • ミニマックス法(Minimax)
    → 何手か先まで読み、最善手を選ぶ方法。
  • α-β(アルファベータ)枝刈り
    →「これ以上読む必要がない手」を早めにスキップして高速化する仕組み。

この仕組みのおかげで「上級(3手読み)」でもサクサク動きます。

もっと強くする方法①:探索深度を上げる

AIの強さは「どれくらい先まで読むか」に大きく左右されます。

MAX_DEPTH.hard = 3

MAX_DEPTH.hard = 4 に変更すると、AIは4手先まで読むようになり、より強くなります。

ただし、深く読むほど 処理が重くなる ため、ブラウザだと少し時間がかかることがあります。

もっと強くする方法②:局面の記憶(ハッシュテーブル)

「同じ局面を何度も計算しない」ようにする技術です。

一度評価した盤面をメモしておき、
もう一度同じ局面になったら、その評価を再利用する。

これだけでミニマックス法のスピードが劇的に改善します。
興味があれば「Transposition Table / Zobrist Hash」といったキーワードで調べてみてください。

ルールの拡張(連珠ルールに近づける)

現在のAIが対応している禁じ手は 黒の“長連”(6つ以上並ぶ) のみです。

五目並べの公式ルール(連珠)では、さらに以下の禁じ手があります。

禁じ手内容
三々(さんさん)1手で「生き三」が2つできてしまう手
四々(しし)1手で「四連」が2つできてしまう手

どうやって判定するの?

三々や四々を判定するには、

  • 着手後に盤面全方向の「連」を数える
  • 「生き三」「四連」が同時に2つ以上できているかをチェック

といったかなり高度な数え上げが必要になります。

見た目やサイズを自由に変える(初心者向け)

デザインの変更はとても簡単です。
CSS変数を少し変えるだけで、盤の雰囲気をガラッと変更できます。

色の変更(CSS)

好きな色に変更するだけで、オリジナル感のあるデザインになります。

初心者でもできる調整から、上級者向けの高度な技術まで幅広く挑戦できます。
ぜひあなた好みの五目並べに育ててみてください!

おすすめの学習リソース|もっとスキルを伸ばしたいあなたへ

五目並べAI対戦」を完成させたことで、あなたはすでに HTML・CSS・JavaScriptの基礎 に触れました。
ここからさらにステップアップするために役立つ学習リソースを紹介します。

おすすめ書籍

『ゲームで学ぶJavaScript入門 増補改訂版 ~ブラウザゲームづくりでHTML&CSSも身につく!』

  • ゲームを作りながら学べるので、退屈せずにJavaScriptの基礎が身につく
  • HTML・CSS・JavaScriptの基本を一冊で網羅、Web制作の土台が自然に理解できる
  • 13本のサンプルゲームを実際に動かせるから「作れる喜び」が味わえる
  • 初心者・中高生にもやさしい解説で、初めてのゲームプログラミングに最適

『スラスラわかるHTML&CSSのきほん』(SBクリエイティブ)

  • Web制作初心者に最適な入門書。HTMLとCSSの仕組みをやさしく解説。
  • これからWebページを作ってみたい方にぴったり。
  • レイアウトの基本やスタイルの調整方法など、実践的に学べます。
SBクリエイティブ/狩野祐東

オンライン講座編

Udemy|世界最大級のオンライン学習プラットフォーム

世界中で利用されるオンライン学習サイト。
HTML、CSS、JavaScriptの入門から応用まで、高評価の講座が数百種類揃っています。
初心者でも動画を見ながら手を動かせるので、挫折しにくいのが魅力です。

まとめ

お疲れさまでした!
これであなたは、HTML・CSS・JavaScriptだけで動く本格的な五目並べAI対戦を作れるようになりました。

今回の開発を通して、

  • 盤面を2次元配列で管理する方法
  • 強制手(即勝・生き三など)を優先するAIの考え方
  • ミニマックス法とα-β枝刈りによる「先を読む」仕組み
  • 効率的な画面描画

といった、ゲームAIづくりの基礎をひと通り学べました。

この知識は、オセロや将棋などの他のボードゲームAIにも応用できます。
ぜひ今回の経験を活かして、次のゲーム作りにも挑戦してみてください!

関連記事

【実際に遊べる 五目並べはこちら。AIと対戦してみましょう!】▼

五目並べAIづくりを楽しめた方は、以下の記事もおすすめです。
どれもブラウザだけで動く本格的なゲームを題材にしており、AIロジックやJavaScriptの理解がさらに深まります。

【作り方記事】まるばつゲーム(三目並べ)の作り方|AI対戦ロジックを学ぼう!

【作り方記事】オセロ(リバーシ)の作り方|AIロジックやJavaScriptを学ぼう!

-開発ガイド
-, , , , ,