Jumpaku Othello
https://othello.jumpaku.net/app/
はじめに
オセロWebサービス Jumpaku Othello を作成し,公開しました. 以下では,
- Jumpaku Othelloとはどのようなサービスか?
- なぜ作成したのか?
- どのような言語,環境で開発したのか?
を述べた上で,関連するリンクを紹介します. 詳細なドキュメントについては,関連するリンクを参照してください.
Jumpaku Othelloとはどのようなサービスか?
Jumpaku Othelloの構成を以下の図に示します.
このサービスはDocker上で動作するDockerコンテナであり,オセロWebアプリケーションとオセロWeb APIを提供します.
オセロWebアプリケーション
ブラウザでhttps://othello.jumpaku.net/app/にアクセスするとAIを相手にオセロの対戦をして遊ぶことができます. オセロのゲーム進行とAIに関する処理はオセロWeb APIを通してサーバ側で行われます.
オセロWeb API
Jumpaku Othelloは,オセロシステムとオセロAIによって構成されています. オセロシステムはオセロのゲーム進行を管理するモジュール,オセロAIは与えられた盤面に対する最善手を探索するモジュールです. それぞれのモジュールの機能の呼び出しはオセロWeb APIを通して行います. オセロWeb APIは,オセロシステムのAPIとオセロAIのAPIによって構成されるWeb APIです.
オセロシステムのAPI
オセロシステムのAPIには以下の3つがあります.
/v1/games/?action=make
: 新規のゲームを作成する/v1/games/?action=get
: 既存のゲームの状態の確認する/v1/games/?action=move
: 既存のゲームの盤面に石を置く
オセロAIのAPI
オセロAIのAPIは次の1つだけです.
/v1/ai/move
: 盤面情報を入力し,最善手を探索する
Dockerイメージ
以上のオセロWebサービスをサーバ上で動作させるためのDockerイメージ jumpaku-othello をDocker Hubで公開しました.
なぜ作ったのか?
Jumpaku Othelloを作成した理由は以下の2つです.
強いオセロAIの作成
私は以前にもオセロAIの作成に挑戦したことがあります. その時はミニマックス法を理解できず,満足できるオセロAIを作成することができませんでした.
それから数年を経て,私の所属サークルでオセロAIコンテストが開催されることとなりました. 再びオセロAIを作成する機会を得ることとなったのです. 今回はオセロAIをミニマックス法に基づいて開発しました. 私はミニマックス法を理解できる程度に成長していました. 本当はオセロの対戦結果データを学習することも考えていたのですが,ミニマックス法に基づいて開発したオセロAIは既に私よりも強いAIとなっていたため,学習については見送る事としました.
自作Webサービスの公開
私はVPSの契約をして,NextcloudやGogs,Nexus Repository Managerといったサービスを動作させていました. しかし,自作のWebサービスを動作させたことがありませんでした. せっかくVPSの契約をしているのだから,そこで自作Webアプリを公開したい,という思いが常に心にありました. 弱くないオセロAIの開発に成功した私は,この機会に自作Webアプリの公開に挑戦する事としました.
どのような言語,環境で開発したのか?
オセロWebアプリケーション
言語はTypeScriptを用い,ビルドにはwebpackを利用しました. また,描画のためのライブラリとしてReactを利用しました.
オセロWeb API
言語はKotlinを用い,ビルドにはgradleを利用しました. また,WebフレームワークとしてKtorを利用しました.
関連するリンク
- オセロWebアプリケーション:https://othello.jumpaku.net/app/
- Dockerイメージ:https://hub.docker.com/r/jumpaku/jumpaku-othello
- ソースコード:https://github.com/Jumpaku/JumpakuOthello