【非エンジニアが挑む】既存のチェスBotに「個性」と「必ず決着するルール」を追加してみた

【非エンジニアが挑む】既存のチェスBotに「個性」と「必ず決着するルール」を追加してみたの構成
Tomoya

前回は、VPS内で仮想通貨の価格を取得し、条件を満たしたら通知するシステムを作りました。

今回は、普段からよく使っているCursor(カーソル/Anysphere)とVPSを組み合わせた、実践応用編に取り組んでいきます。

Tomoya

自分が使えるツールを駆使して、1つのプロダクトを形にする試みです。

チェスの自己対局システムは、以前から自分のフォルダの中に既にありました。これをCursorで改良し、VPS上で24時間動かすことで、PCを閉じていても、外部のブラウザからいつでも観戦できるようにするのが今回の目標です。

テレビや動画配信のようなイメージを持って進めていきました。

VPSの特徴

VPSの特徴は、ローカルPCで自動Botを動かしていても、システムを閉じる、あるいはPCの電源を切ってしまえばそこで終わってしまう、という点です。

しかしVPSを使えば、24時間その自動Botを動かし続けることができます


目次

なぜ「攻撃 vs 守り」というコンセプトにしたか

「攻撃 相手を崩し、勝機をつかむ」と「守り 耐え抜き、反撃の機会を待つ」の対立コンセプトを示すチェス駒のビジュアル
チェスにおける「攻撃」と「守り」の戦略的対立を表現したイメージ画像です。

そのうえで、ある程度の分かりやすさも欲しいと思いました。

普段からテレビや動画配信を見ることが多いこともあり、「白は攻撃、黒は守り」とあらかじめルールを決めておくことで、自分がどちらを見て学ぼうか、という視点を持ちやすくなります。

これを基本として繰り返し見ることで、その型に見慣れることができ、無意識のうちにでも最善に近い一手を指せるレベルまで感覚が育っていくことも狙っています。

チェスは頭を使うゲームなので、複雑な局面が続くと24時間集中して見続けられる人はいません。さらに複雑な手ほど発生頻度が低く、いざ自分の対局でそのシーンが来ても、忘れていて指せない、ということにもなりがちです。

そうなると結局、ただのエンタメとして消費されて終わってしまう——それを避けたかった、というのも理由の一つです。

攻撃・守りの「個性」をどう表現するか悩んだ

24時間対局させるとなると、自分が見ていない時間が必ず出てきます。

Stockfishというチェスエンジンは、あくまで機械です。こちらでうまくルールを設計してあげないと、攻撃型・守備型という個性を表現することはできません。

Tomoya

ここで考えたのが、まずContemptという設定値です。

攻撃側は高め(例:50)、守り側は低め〜中間(例:10)に設定します。値が高いほど「引き分けを避けて、勝ちにいく」指し方になります。

これを調整することで、多少荒くはなるものの、攻撃型らしく勝ちを狙いにいくチェスを振る舞わせることができました。一方の守備型は、負けないことを優先しつつ、チャンスがあればカウンターも仕掛けてくる、という振る舞いになります。

Tomoya

2つ目に用意したのが、序盤(オープニング)のテンプレートです。

両者の特性に合わせたオープニングをあらかじめ何パターンか用意しました。こうすることで、見ている側もオープニングについて自然と学べますし、最初の数手にランダム性を持たせることで、その後の展開が毎回変わる面白さも演出できます。

いくらContemptを変えていても、毎回同じ攻め方・同じ守り方では飽きてしまうのは明らかです。最初の手をランダムに始めることで、その局面を踏まえた展開を毎回生み出せるようにし、対局ごとの面白さを増やせると考えました。

「必ず決着をつける」というルールへのこだわり

チェスを構築する上での問題点

チェスは、終盤になるほど引き分けになりやすいゲームです。ある程度の駒が残っていないとチェックメイトまで持ち込めませんし、実力のあるプレイヤーほど、終盤で負けにつながるような手を間違えません。人間であれば凡ミスもありますが、機械であればなおさら手を正確に計算するため、間違えにくく、引き分けになりやすい——これは実際に既存のシステムを動かしてみても明らかでした。

Tomoya

そこで、必ず決着をつけることにこだわりました!

チェスの対局は、ある程度の手数が進めば盤面の優劣がはっきりしてくるので、手数による制限と、その時点での評価値組み合わせて決着をつけ、次の対局に進む仕組みにしました。

これは、効率よく対局を進めつつ、毎回面白いところだけを見せる形にもなります。ルールをあらかじめ決めておくことで、その範囲の中でどうやって勝ちに持っていくのかを見ること自体が、見ていて勉強にもなり、面白いと思っています。

ルール上は引き分けになってしまう局面が発生した場合も、その時点で優勢だった方を勝ちとみなす——このシステム独自のルールを設けることで、結果としてどちらが勝ったのか負けたのかをはっきり示せるようにしました。

Tomoya

あやふやにさせない、というエンタメ性を追求した部分です!!

チェックメイトでの決着にこだわった理由

できるだけチェックメイトで終わらせたかった理由

チェスを見ていて一番面白いのは、まさにチェックメイトの瞬間だからです。

そして、そのチェックメイトに至るまでの過程は非常に勉強になります

どこで罠を仕掛けているのか、なぜこの手を選んだのか——見ながら考えさせられる部分がたくさんあります。

チェスというゲーム自体はシンプルですが、マグヌス・カールセンのようなトッププレイヤーが見せる知的な面白さを、このシステムにも取り入れたいと思っていました。

引き分けで終わってしまうと

「結局この攻めには意味があったのか?」

「参考になったのか?」

があやふやになり、見る必要性そのものが薄れてしまいます。

多少のミスがあっても、どれだけ自分の方針を貫いてゲームを進めるのか、それをこのシステムで表現するのが目標です。

少しのミスに付け込んでカウンターを取るのか、王道の攻めでチェックメイトに持ち込むのか

Tomoya

それを見たいと思っているのは、自分だけではないはずです!!

そのために行き着いたのが、1手あたりの思考時間をあえて短く設定する、という工夫でした。

完璧に近い指し手同士がぶつかると引き分けが増えてしまうので、多少のミスが起きる余地を残すことで、自然にチェックメイトで終わる対局を増やせます。


観戦用の仕組みを追加するという発想

24時間動かしていると、自分が見ていない瞬間は必ずあります。そういう時でも、再び画面を開いた瞬間にどういう状況なのかをすぐ掴めるように、ダッシュボードを工夫することが大事だと考えました。

「現在 黒○勝:白○勝」という勝敗表示は、まさに最初に攻守を分けておいたことが活きてくる部分です。

加えて、指し手の履歴表示や、盤面の優劣を表現する仕組みも、最初の段階から組み込んでおきました。

ここは実際に稼働させてみて感じたことをCursorに伝えながら、随時改善していける部分だと思っています。

チェス盤の画面で白の初手(ポーン前進)と評価値0.00・読み状態が表示された対局UI
WebUI上で動作するチェス盤画面。上部に評価値、下部にエンジンの思考深度ログが表示されます。

Cursorで実装してみて感じたこと

Cursorエディタ画面でチェスBotの戦術仕様書とAIアシスタントの実装報告テキストを表示している状態
AIアシスタントとの対話画面で、仕様書ドキュメントに基づきPython対局エンジンとNext.js連携の実装コードを生成・確認しています。
思った事

自分の意見を反映したシステムを、こんなにも簡単に実装してくれるのは、AIエージェントでコーディングすることの大きな魅力の一つだと感じます。

非エンジニアの自分であっても、PM(プロダクトマネージャー)のような立ち位置で、実現したいアイデアと方針を伝えて依頼・指示するだけで形になっていく——本当にすごい時代だと感じています。

Tomoya

まだCursorを使ったことがない方は、一度契約してみることをおすすめします。

月額20ドルから利用でき、Cursor自身が開発しているモデルに加えて、2026年7月時点で、Fable5・GPT-5.6 Sol・Grok4.6といった最新モデルもエージェントとして活用しながらコーディングできます。

バイブコーディングという言葉があるように、初心者でも自分の思いやアイデアを伝えるだけで、それを汲み取った実装をしてくれるので、安心感があります。

使い方もシンプルで、PCがあればすぐに扱えます。さらに、以前PCで作ったGitHubアカウント・リポジトリが残っていれば、モバイルやタブレットのCursorアプリからでもプロジェクトを動かせるようです。

以下のリンクから始めると、初回1か月分が割引価格で利用できます。1か月使ってみて合わなければ、すぐに解約できる気軽さも魅力だと感じています。


次回予告

Tomoya

ローカルでの実装はこれで一区切りです。

現時点ではまだMVP(Minimum Viable Product=実用最小限の製品)の段階ですが、まずはVPSに上げること、24時間稼働させることを目標に、この計画を進めていきます。

次回は、いよいよこのシステムをVPSに上げる段階に進みます。

次回予告GitHub連携・認証編「GitHubとVPS・Local PCのトークンキー認証と連携」の案内

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

始めまして。このブログを運営するTomoyaです。
未経験個人開発者。AI×個人開発(Vibe Cording)で学習して参入してくれる人が増えて広がっていくと良いなと思って始めました。

実際に作成→デプロイ(公開)→運営を行ってそれについての問題や疑問を記録していきます。
また行っていく上で内容(セキュリティ・制限など)にもこだわっていきたいなと思っています。

コメント

コメントする

目次