Project Fx 2.0

怪文書と備忘録を書きます

あるいはボドゲでいっぱいの星~ボードゲーム開発・対局用フレームワーク「Dagaz Project」の紹介~

この文章は、Board Gamed Design Advent Calendar 2020の第20日目の記事です(投稿は25日目)。遅刻申し訳ありません。 adventar.org

この記事の目的は、私が開発に携っている(携わろうとしている)ボードゲーム制作ツール「Dagaz Project」を皆さんに布教し、その開発メンバーを可能な限り増やすことです。
私自身はいわゆる「ボドゲ界隈」とは全く無縁の人間であり、ボドゲにおける一般的な用語・概念をほとんど何も知りません。 このため、界隈では良く知られていることの説明に過剰に文字数を割いている箇所があるかもしれません。 また、扱っているネタが一般的なボドゲとややかけ離れているきらいがありますが、これは私が他にちょうど良いアドカレを見つけることができなかったためです。

Dagazについて説明する前に、まずその前提となる概念をいくつか紹介する必要があります。

ゲームAIとGeneral Game Playing

ご存じの方も多いでしょうが、コンピュータ関連の科学技術が発展するにつれて、その応用分野の一つとして人工知能の研究も盛んに行われるようになっていきました。 その中でも、「コンピュータにゲームをプレイさせる」という方面への応用は古くから盛んであり、これまでに数多くのゲームについてそれを上手にプレイするAIが開発されています。 1990年代以降、チェス、オセロ、将棋、囲碁などの数々のアブストラクボードゲームにおいて、AIは人類最強クラスのプレイヤーを破るまでの強さを誇るようになってきています。 そして2010年代にDeepMind社のAlphaGoが、ゲームAIの最後の難関とされた囲碁で人類を完全に上回って以降、ゲームAI開発の潮流はポーカーや麻雀などの不完全(不完備)情報ゲームに移り始めています。
しかし、これらのAIは総じて「特定のゲームのプレイのみに特化しているAI」です。 これに対し、「どんなゲームでも上手にプレイできる汎用的なAI」を作ろうという動きもあります。 それこそが「General Game Playing」(GGP)と呼ばれる分野です。

Zillions of Gamesの誕生

英語版Wikipediaの記述によれば、GGPは1992年頃に誕生した比較的新しい研究分野です。
1998年、「Zillions of Games」(ZoG)という商用GGPソフトウェアが発売されました。 これは「Zillions Rules Files」という独自のDSLを用いてゲームのルールを形式的に記述し、それをソフトウェアに読み込ませると、 内蔵された汎用のゲームAIが自分でルールを解釈してCPU対戦をしてくれるという代物でした。 どうやらこのソフトウェアの反響は、少なくとも海外のボードゲームマニアの間ではかなり物凄いものであったらしく、 多くのユーザーが様々なゲームのルールのZRFファイルを作成し、競って公開しました(発売から20年以上が経った現在でも、ZRF作成をしているユーザーはそこそこいます)。 ZoGは現在でも販売が続けられており、この記事を書いている2020年12月下旬の時点で3055種類ものZRFファイルが公開されています。

しかし、Zillions of Gamesには致命的な欠点がいくつか存在しました。
細かいことを挙げて行けばキリがありませんが、概ね次の2つに集約されます:
1つ目:「ソフトウェア自体の仕様やZRFの機能的な制約により、ZoGでは実装することが難しいボードゲームがある」こと。
2つ目:「商用ソフトである関係上、ソースコードが公開されていない」こと。

1つ目の欠点が重大であることは誰の目にも明らかでしょう。 これについては色々な指摘がされていますが、日本語の情報としてはzillionsofgames @ ウィキに詳しくまとまっているのでそちらを参照してください。
とりあえず具体例を挙げると、ZoGは不完全情報(不完備情報)ゲーム、つまり麻雀などのような対戦相手の手の内が分からないゲームを遊ぶことは基本的にできません。 無理やりそれっぽく実装できないこともないのですが、ディスプレイ上の表示をどうにか隠すことはできても、内部処理の都合でZoGのAIには相手の手の内が丸見えになっているので、実質的にゲームとして成立しなくなってしまいます。
また、「一つの位置に複数の駒が存在する」という状態を考慮していないので、例えばマンカラなどのようなゲームは基本的に実装できません。 ZoGユーザーでボードゲーム愛好家のヴァレンティン・チェルノコフ氏は、「ZoGは基本的にチェッカーやチェスに似たゲームでなければ実装することができない」「それ以外のゲームも実装できないことはないのだが、それには巧妙なハックが必要になるし、よしんば実装できたとしても動作が不安定になる」と総括しています。

2つ目の欠点も、実は割と重大なものなのです。 上で説明した1つ目の問題点を誰かが完璧に解決できたとしても、ZoGがソースコードを公開していない商用ソフトである以上、自分でソースをいじくって再配布するという訳にはいきません。 またZoGはWindows環境にしか対応していないので、MacLinuxといったその他の環境では基本的に動きませんし、スマートフォンタブレットのアプリもありません。 自前で他の環境に移植するというのは至難の業です。 (一応、MacLinuxで動かす方法がないという訳ではないのですが、パソコンに不慣れなユーザーが容易く行えるようなものではありません。)

Dagazの誕生

先ほど発言を紹介したボードゲーム愛好家のヴァレンティン・チェルノコフ氏は、ZoGの欠点の解決を試みたボードゲーム制作・対戦ツール「Dagaz」を開発しました。言語は JavaScript であり、HTMLのcanvas要素に盤駒の画像を表示して動作する仕組みです。

Dagazで実装できるゲームの例については、Dagazの公式サイトを開いて、実際に遊んで体験してみてください。 glukkazan.github.io

Dagazの開発コンセプトについては、チェルノコフ氏本人による文章を翻訳した以下のエントリをぜひご覧ください。

stepney141.hatenablog.com

Dagazのメリット

拡張性の高さ

Dagazのソースコードはモジュール形式になっており、「ゲームのルールを記述するモジュール」「対戦用AIのモジュール」「描画処理のモジュール」といった各コンポーネントを組み合わせて1つのゲームを作る仕組みになっています。 このため、モジュールの追加・削除・書き換え・変更が簡単にできるようになっており、高い拡張性を持っています。

クロスプラットフォーム対応

先にも述べたように、Zillions of GamesはWindows専用に作られていたため、Macなどの環境で実行するのは難しくスマホで使うこともできませんでした。

しかし。DagazはJavaScriptとHTMLのcanvas要素を使って動くように設計されているため、 スマホだろうとパソコンだろうと、インターネットブラウザ1さえ使える環境ならどこでも動きます。 サーバとの通信もしないので例えスマホ機内モードにしていても使えます。

オープンソースである

Zillions of Gamesが完全クローズドソースであったことの反省を踏まえて、Dagazは全てのソースコードがMITライセンスで公開されています。
さらにGitHub上でOSSとして開発されているため、誰でも簡単に開発に参加できます。

こちらは周辺ツールも含めたソースコード本体のリポジトリgithub.com

そしてこちらは色々なゲームが実装されているDagaz公式サイトのレポジトリです。 github.com

Dagazの欠点と問題点

(拡張性が高いとはいえ)万能ではない

Dagazは元々、チェス・囲碁バックギャモンのような戦略的ボードゲームを実装するために作られたものです。 そのためあらゆるメカニクスボードゲームに適している訳ではありません。 より多くのメカニクスに対応できるよう改造することは十分に可能ではあるすが、とりあえず現時点での仕様では、実装できないボードゲームが存在するかもしれません。

パフォーマンスが低い

Dagazは完全なJavaScript製で、ブラウザ上のJavaScriptエンジンによって実行されます。 このためどうしてもパフォーマンスが低くなってしまい、組み込まれている対戦用AIも弱くなってしまっています(思考ルーチンを改良することである程度改善する可能性はあります)。

ドキュメントがない

開発者向けドキュメントはおろか、一般ユーザー向けの使い方説明も全くできていません。 DagazはZillions of Gamesの後継を目指して開発されているので、当然自分でゲームのルールを書いて読み込ませる仕組みがあります。 しかし現在この機構に関してリファクタリング作業をしている真っ最中であり、正直ドキュメントどころではないというのが現状です。

ソースコードが汚い

現在のDagazのソースコードは全てES5で書かれており、モジュールとかいう便利なものは一切使われていません。 ファイル間での変数のやり取りは全てグローバルスコープを介して行われており、当然ながら変数定義も全てvarなので処理を追うのも一苦労です。 ファイル名の命名規則もかなりめちゃくちゃで、ドキュメントはおろかソースのコメントすらほとんどありません。 さらに、ユニットテストやグラフィック部分のE2Eテストも満足に書かれていません。 コードの全容を全て把握しているのは、元開発者のチェルノコフ氏しかいません。

開発者がいない

現在開発に携わっているのは、プロジェクトを立ち上げたチェルノコフ氏と最近参加した私のたった2名のみです。 圧倒的に人手が足りません。 チェルノコフ氏も私もフロントエンド開発に詳しい訳ではないため、ぜひとも人手が欲しいと考えています。

まとめ

Dagazは本当に素晴らしいソフトウェアなのですが、とにかく開発者が足りません。 現在、私とチェルノコフ氏は現在のDagazの欠点を解消したアップデート版の開発を進めています。

github.com

フロントエンド開発に詳しいボードゲーマーの皆さん、ぜひDagazをより良いものとするためにご協力いただけないでしょうか。


  1. ブラウザ側の機能の関係で、Google ChromeFirefox・Edgeでの利用をオススメします。Internet ExplorerSafariは非推奨です。