Jumpaku Othello

f:id:Jumpaku:20190917185325p:plain

https://othello.jumpaku.net/app/

はじめに

オセロWebサービス Jumpaku Othello を作成し,公開しました. 以下では,

  • Jumpaku Othelloとはどのようなサービスか?
  • なぜ作成したのか?
  • どのような言語,環境で開発したのか?

を述べた上で,関連するリンクを紹介します. 詳細なドキュメントについては,関連するリンクを参照してください.

Jumpaku Othelloとはどのようなサービスか?

Jumpaku Othelloの構成を以下の図に示します.

f:id:Jumpaku:20190917163829p:plain

このサービスは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を作成したかったから
  • 自分のVPSで自作Webサービスを公開したかったから

強いオセロ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を利用しました.

関連するリンク

まとめ

  1. オセロシステムと弱くないオセロAIを作った
  2. WebアプリとWeb APIを提供するサービスとして自分のVPSで公開した
  3. ソースコードとDockerイメージも公開した