1台のスマホで二人対戦できる無料チェスサイトを作ってみた
チェスできたらカッコよくない?
アニメ「サイレント・ウィッチ」にハマった。
ご存じなくとも特に問題ないので安心して続きを読んで欲しい。
主人公は数学と魔術の天才で、通っている学校でチェスの選択授業を受けることになる。それまでチェスを一度もやったことがなかった主人公だが、数学が得意な彼女は上級生をも圧倒する。盤面を分析し確率を計算、何十手も先を読んでコマを動かすその姿、かっこいい…!
安直な私はすぐにチェスやりたい!と思い立った。
だが、すぐに飽きる可能性が高い。これまで何度かチェスアプリをダウンロードしてBOTと戦ったことがあるものの、おもしろさを見出せなかった。 大抵負けるし、たまたま勝ったとしてもなぜ勝ったのかいまいち理解できなかった。ふんわりとしたルールしか知らないのだ。
ならばルールを理解するところから始めれば、飽きもすぐには来ないのでは?
早速Kindleでチェス初心者向けの本を探し、レビューの良かった「チェスを初めてやる人の本(小島慎也氏著)」を拝読した。
そこで気づいた。ルール間違って覚えてるじゃん。
私は、チェックメイトとは相手のキングを自分のコマの陣地に入れることだと思っていた。これは正しくは「チェック」であり、勝敗は決まらない。
「チェックメイト」とは相手のキングを自分のコマの陣地に入れるかつ、相手のキングを囲い逃げる場所をなくすこと。相手のキングを自陣のコマの攻撃範囲に含めても、そのコマを取られたり、キングに逃げられてしまえば意味がない。
そりゃいつまで経ってもBOTに勝てるはずがない。チェックしてもチェックしても、なぜかゲームが終わらず、逆に自分のコマをとられてどんどん追い詰められていたのだ。
そもそもなぜ間違って覚えていたのだろうか?
実家にあったチェス盤を引っ張り出してきて、箱の裏面に記載された説明を読みなおしてみた。そこには、「将棋とおなじように、それぞれの駒を使って、相手のキングをチェックメイト(将棋の王手詰)とすれば勝ちです。」としか書いていなかった。駒の説明も「将棋の〇〇の動きと同じ」と、オセロ / チェス盤なのに将棋をベースに説明している。
そんなことある?現代ならSNSに晒上げられる可能性もあるほど手抜きだ。当時だからできた荒業かもしれない。
私は将棋をしたことは一度もない。(山崩しは例外とする。)親も将棋をしていた記憶はないし、チェスだってこのチェス盤で数えるほどしかしたことがない。つまり、この不親切な説明だけを頼りに、親子は"雰囲気チェス"を楽しんでいたのだ。 "雰囲気チェス”の知識だけを頼りに本物のチェスに挑んでは打ちのめされていた私は、こうして、数十年越しにチェスのルールを正しく学んだ。
やっとチェスの扉の取っ手に手をかけたのだった。
オレに勝てたらね
さて、読了してやっとチェスの扉を開けたのだが。
ここでこれまでと同様アプリをインストールしてもまた飽きる未来しかみえなかった。
この私の溢るる闘志。BOTでは受け止めきれぬ。生身の人間相手でないと昇華できない。だってサイレント・ウィッチでは対人だったから…!
幸いにも手元にはチェス盤がある。古くてほこりをかぶったチェス盤を、ウェットティッシュで丁寧に端から端まで拭った。当時はウェットティッシュなんてなかった気がする。それともまだ高価で、裕福でなかった我が家には存在しなかっただけなのだろうか。
コマもひとつひとつきれいに磨いていて、新たな問題に気づいてしまった。
なんてこった。黒のルークがひとつ足りない。
盤面にコマを並べても、コマがひとつ足りないだけで、なんとなく締まりがない。新しくチェス盤を買おうか。せっかく磨いたのに?今すぐにでもチェスがしたいのに?…しょうがない。オセロのコマでルークは代用することにした。
肝心の対戦相手だが、手っ取り早くチェスをするには最適な人物がいる。そう。目の前でYouTubeを見ている夫だ。さっそく勝負を挑んだ。が、夫は渋った。
なんと彼はチェスのルールを知らないらしい。スマホの画面から視線を逸らそうとしない夫をなんとか説得して、どうにか対局の席に着かせた。
チェスをしたことがないなんて、好都合だ。
すまないな、私の初勝利の礎になってもらおうじゃないか。
本で得た知識で夫に説明をしていく。
「これがルーク、まっすぐ進むんだよ。」
「あー、飛車ね。」
「これはビショップっていって斜めに進めるやつで。」
「角か。」
…おや?様子がおかしいぞ?夫はチェスのルールこそ知らないものの、将棋の経験があったのである…!
さて問題です。
将棋ミリしらチェスはルールをかじっただけの人間が、チェスはしたことないが将棋をしたことがある人間にチェスで勝てるでしょうか?
答えはノー。完敗である。
あっさり負けを喫してしまった。本で読んだ知識を使っても、先の手が読めなければ勝てない。先の手を読んだつもりで相手が引っかかった!と思って飛びつくと、次の手で自分のコマがなくなっていたりする。先の先を読まれているのである。
無念!
チェスのルールをさっき覚えたやつに負けた!サイレント・ウィッチの主人公か貴様は!
ルールを覚えたところで初心者は所詮初心者。スタート地点に立つだけでは白星は刻めないのであった。 悔しいから明日もやろう!と提案すると、時間があったら、とかわされた。
つれない奴め。またゴネてやる。
対局を終え、片付けようと盤面を見た。ポツンとあるオセロのコマは、居心地悪そうに身を縮めている。(ように見える。) うーん、やっぱり。
「新しいチェス盤買おうかな」
零した言葉を耳にして、夫はチェスのコマを集めながら、またはじまったという目でこちらを見た。
熱しやすく冷めやすい私の性格をよくご存じの彼は、物を揃えたら満足して辞めてしまうのが予見できたのだろう。
「オレに勝てたらね」
鼻で笑うように放たれたその言葉は、リベンジに燃える私の心に見事油を注いだのだった。
人生あきらめが肝心。チャレンジ精神も肝心。
それから一週間、勝負にして3試合。
仕事で疲れた頭を酷使して晩御飯の後に前日の続きを指したり、休日の昼間にふたりで缶ビールを飲みながら指したり。夫は面倒がりながらも付き合ってくれた。
そしてなんと!
私は!!
…一度も勝てなかった。
3度目の対局で負けた後、ふぅと息をついて盤面のオセロのコマを眺めた。こりゃ新しいチェス盤は買えないぞ。逆に清々しい気持ちだ。諦めよう。新しいチェス盤と相見えることになるのはしばらく先のようだ。
チェスはしたい。でもオセロのコマは心踊る気持ちが目減りする。
チェスのコマだけ新しく買うのは…?反則か。
誕生日にプレゼントとして買ってもらう?勝負に勝って自分で買わなければプライドが許さない。
片付けが終わって、夫が机に置いていたスマホを持ち上げた。
そうだ。なぜ気づかなかったんだ。物質主義に支配されすぎではないか。
スマホですればいいじゃん!
いや、スマホは画面が小さいかも?その場合はタブレットPCでやればいいか!今時花札もネットでできるくらいだし、チェスもできるでしょ。
スマホでもタブレットでもしたいから、スマホのアプリじゃなくてウェブサイトでできるといいな。
相手が目の前にいるんだから、オンラインでそれぞれの端末で操作するんじゃなくて、1台のスマホかタブレットで、2人で対局したいな。
めんどくさいからログイン機能とかなくていいな。
対局が終わったら振り返りができるページがあると尚よし!
簡単に見つかるはずだったのだが、それがなかなか見つからない。
検索ワードを変えてみたり、chatGPTに聞いてみたりしたが、理想のwebアプリは見つからず。 そして今日も今日とて、オセロのコマがルーク代わりのチェス盤で勝負。負け。いい加減飽きてしまいそうだ。
あーあ、せっかく見つけた新しい趣味だったのにな。
そんな時だった。
ポッドキャスト「ゆるコンピュータ科学ラジオ」を聴いていると、「#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった(大塚あみ氏著)」が紹介されていた。(171. ゆるコンピュータ科学ラジオ『#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった』より)
へぇーchatGPTでゲームアプリ作れるんだ。
…なるほど?
ゲームを作ったことはないが、幸いにもプログラミングに覚えはあるし、簡単なウェブサイトなら作ったことがある。chatGPTにお願いすれば、チャチャっと作れちゃうんじゃないか?自分で作ったチェスアプリは、勝利して買った新しいチェス盤よりも気持ち高らかにチェスができるんじゃないか?
かくして私は、軽い気持ちでチェスアプリを作り始めたのだった。
思えば遠くへ来たもんだ
あれから3ヶ月が経った。夫とチェスはあれ以来一度もできていない。
私はチェスアプリを作るのに忙しく、夫は私に誘われなければチェスをしないからだ。
とっかかりは簡単だった。
chatGPTは優秀で、こういうウェブアプリを作りたいから叩き台を作って、と伝えるとすぐにアウトプットをくれた。コピペして実行すればチェスができた。
感動した。なんて簡単にできるんだ。すげーchatGPT…!
そこまではよかった。動きはした。したのだが、キャスリングもアンパッサンもできなかった。
これだけでは、チェスはできない。藁ぶき屋根の家ではオオカミの猛威を防ぐことはできない。ここから、レンガの家に仕上げていく必要があった。
チェスができるだけの状態から、盛り込みたい機能を付け足して肉付けしていく。コピペしただけのchatGPTのアウトプットを読み解いて、改変していく必要がある。
ある機能を追加したいがそうすると元の仕様を変えなければならない。やっと仕様変更して動いたと思ったら、今度は別の機能がバグる。バグった機能がなぜ動かなくなったのかchatGPTに聞く。言われた通りに修正する。治らない。角度を変えて何度も質問して、やっと答えに辿り着く。元の仕様に戻さないといけなくなる…。
プログラムを書きながら何度思ったことだろうか。
私は何をしているんだろう。私はただチェスがしたいだけなのに。夫にチェスで勝ちたいだけなのに。新しいチェス盤が欲しかっただけなのに。なんでチェスをせずにこんなに必死にプログラムを書いているんだ。
どうしてこんなにチェスから離れたところへ来てしまったんだ…。
だがはじめたのは私だ。
カッコいい大人は、一度始めたのことは最後までやり通すものなんだ…!ここまできたら完成させてやるやる!
最後は半ば意地だった。意地でもやってのけた。試行錯誤して、なんとか完成した。
果てしない荒野を駆け抜けてやっとオアシスにたどり着いた気分だった。達成感…いやこれは開放感だ。やっとプログラムを書かなくてよくなる。もう一生分書いた。私職業プログラマじゃないのによくやったよホント。
自分を褒め倒した。なんなら自分へのご褒美に新しいチェス盤を購入してやりたくなった。本末転倒。Amazonのカートに入れるまでしたが、思いとどまって削除した。
ひとしきり喜びを噛み締めた後、夫に声をかけた。
はやくこのチェスアプリを使いたい。チェスがしたい!
夫は「お、やっとできたの」と明るい声を出した。ここ数か月私がひぃひぃ言いながらアプリ制作に取り組んでいたのを知っていただけに、完成したことをともに喜んでくれた。
だからだろうか。いつもみたいに渋々感はなく、「チェスしよう」というと、すんなりと「いいよ、やろう」と頷いてくれたのだった。