Cygames Research研究日誌 #9 ~Preforkd. それはゲーム世界のデジタルツイン・エンジン~

サイマガ読者のみなさま、こんにちは。Cygames Research所長の倉林 修一です。Cygames Researchとは、最高のコンテンツを生み出すためにサイゲームスが設立した基礎技術研究所で、この連載記事では、当研究所での研究成果や活動をご紹介しています。前回の連載第8回では、Cygames Researchにおける、多様性の力のお話をさせていただきました。ゲームの中で多様なキャラクターが力を合わせて世界を救うように、現実世界の研究を成功させるためにも多様な背景を持ったスタッフが連携することが鍵になる、というイメージを持っていただけたでしょうか。さて、ここ数ヶ月は研究組織の話が中心になっていましたので、今回は研究日誌らしく、技術のお話をさせていただきたいと思います。先日取材でもこの技術についてお話ししたのですが、当研究所が開発した、ゲーム環境そのものを仮想世界に複製して検証可能にする技術「Preforkd(プリフォークディー、図1)」の技術詳細を、ここに公開いたします!(前回の予告では「次世代バーチャルパッドのKineticsをご紹介」とお伝えしましたが、こちらはまた別の機会に。)

▲図1. PreforkdはCygames Researchにおけるゲームサービスの全体仮想化を担うシステム

この技術は、当社の『Shadowverse』や『ウマ娘 プリティーダービー』にも応用されており、当社の仮想化の基盤技術の一つになっています。技術的な用語が多い記事ですが、コンセプトそのものは色々な業種、企業、あるいは大学の研究室で使えるものと思いますので、ぜひご笑覧くださいませ。

異世界に転生するならどんなスキルが欲しい?

さて突然ですが、昨今、異世界に転生したり召喚されたりする物語が大人気ですね。グローバル化も進み、英語でも異世界に転生するという意味の「Isekaied」 という単語が生まれたりしたようです。なぜ、いきなり異世界転生の話が始まるかというと、異世界で生き延びるための戦略が、技術研究の戦略と類似しているからなのです。多くの異世界転生のストーリーでは、主人公がさまざまなスキルを転生時に身に付けますね。捕食、錬金術、死霊魔術、現実世界の全ての科学知識など、「主人公たちが身に付けるチート級スキル」と、物語の中の強キャラのスキルとを比較すると、ある違いが見つかります。それが「スキルの抽象度」です。主人公たちは、単純に力が強かったり、最強の剣術を使うのではなく、あるスキルをてこにして、別の何かを生み出せるような能力を持つ傾向にあります。捕食したスキルを融合するとか。錬金術で最強の武器や道具を生み出すとか。倒した相手を死霊魔術で仲間にするとか。科学技術で武器と医療を同時に改革するとか。私はこれを、スキルのためのスキル、“メタスキル” と勝手に呼んでいます。メタスキルが異世界で最強であるように、私たちが住むこの現実世界でも、技術を制御する技術、メタ技術が極めて重要なのです。 ゲーム企業の研究機関においても、コンピューターにおけるメタ技術である「仮想化技術」の研究開発に力を入れています。この仮想化技術は、ゲームを構成している技術要素そのものを制御の対象として、サーバーの自動複製・構築や、スマートフォン上で動作するアプリをクラウド上で起動するなどのさまざまな効果を生み出します。まさに、捕食や錬金術のような技術なのです。

コンピューターは仮想化する機械

コンピューターは、突き詰めれば、情報を記憶しておくメモリをCPUが読み書きしながら計算しているだけです。ネットワークもディスクもディスプレイもプリンターも、CPUから見たら全てがメモリなのです。したがって、コンピューターがどんなに発展しても、CPUがメモリを読み書きするという基本動作の範疇を逸脱することはありません。このように、限られた動作原理の組み合わせで複雑な問題を解決するという技術分野では、技術の進化はより上位の技術を生み出す抽象化・仮想化によってもたらされます。
いきなりアカデミックな入り方になってしまいましたが、事実、コンピューターのソフトウェア技術の歴史とは、抽象化・仮想化の歴史でした。ソフトウェア技術が進歩するということは、抽象度や仮想化のレベルが上昇することなのです。(もちろん例外はあり、上昇しすぎた抽象化レベルを落とすことにより、効率化・最適化を図るという発展の仕方もあります)

では、ゲーム開発の技術を進歩させる、別の言い方をすれば、抽象化・仮想化するとは、どのようなことを意味するのでしょうか。ゲームエンジンの導入やクラウド側のゲームフレームワークの導入など、幅広い範囲で抽象化・仮想化を実現することができますが、Cygames Researchでは、ゲームを実行する環境全体を複製し、その複製した状況でシミュレーションを行えるようにするという方向で進化させてきました。端的に言うと、仮想化によるゲーム世界の再構成です。ゲーム環境を複製できるということは、スマートフォン上で動くゲームアプリをクラウド側で実行できたり、特定のバージョンのゲーム環境を任意のタイミングでクラウド上に再現できたりすることを意味します。つまりは、ゲームの世界を任意のタイミングで、任意の構成でシミュレーションできるようにしたのです。

この「ゲーム世界を再構成する技術」のインパクトは大きく、先ほどの異世界転生モノに例えるならば、異世界に転生するときに最強の剣術スキルや最強の魔法スキルを授かるよりも、「世界を再構成できるスキル」を授かる方がはるかに強そうですよね。ゲーム世界を自由に再構成できるならば、ゲームの新しい機能をクラウド上で自動検証したり、ゲームに不具合が起きたときに世界の時間を止めてスナップショットを取っておき、後から解析したりといったことができるのです。他にも、Unityゲームエンジンを使って、サーバーサイドの機能を実装するという使い方もできます。どうでしょうか。世界全体を再構成する技術は、異世界に転生しなくとも、ゲームを開発するならぜひとも欲しい技術ではありませんか? そこで、Cygames Researchでは、ゲーム世界の再構成に向けて、 “ラムダコンテナ” と呼ぶ基礎理論を構築し、任意のスマートフォンアプリをクラウド上で大規模に、かつ効率的に動作させるシステムを構築しました。それが、当社で運用しているpreforkdというソフトウェアです。

任意のバージョン・構成のゲームアプリをクラウド上で再現
“ラムダコンテナ”という計算モデル

preforkdというシステムは、スマートフォン上で動いているアプリと、アプリの通信先であるサーバーの両方を、 “コンテナ” と “仮想マシン” という2段階の仮想化技術を駆使することにより、クラウド上でシミュレーションできるようにするソフトウェアです。ここで言うコンテナとは、スマートフォンアプリをクラウド側で動かすための仕組みを指しています(厳密にはコンテナはより広い概念ですが、ここでは簡略化して、アプリを動かす仕組みとして説明しました)。一方仮想マシンとは、このコンテナを実行するための環境やゲームサーバー本体を、クラウド上で実行する技術のことです。

preforkdによる仮想化の基盤となっている計算モデルは、当社がIEEE CLOUD 2018という国際会議で発表した、“ラムダコンテナ(Lambda Container)” と呼ばれる計算モデルです。ラムダコンテナは、関数型プログラミング言語のラムダ式をベースにした考え方で、簡単に言うと、ゲームアプリと、そのゲームアプリをビルドしたときのクライアント/サーバー環境をひとまとめにしてパッケージ化することにより、任意のバージョン・任意の構成のゲームアプリをクラウド上で動かせるというものです。 Lisp、ML、Pythonなどの歴史あるプログラミング言語や、RustやJavaScriptなどモダンな言語には、ラムダ式やクロージャという機能がありますが、このラムダ式では、関数と関数を定義したときの変数群とが関連づけられて、ひとまとまりのオブジェクトとして扱えるようになっています。これが手続きの抽象化と呼ばれる機能で、関数型プログラミング言語の生産性や柔軟性を高める要因になっています。アプリを1つの関数として捉えたときに、その関数が定義されたときの環境、すなわちアプリが必要とするデータやサーバーのセットをアプリと紐付けてパッケージ化しておき、後でそのパッケージを実行することができるならば、それはアプリという手続きの抽象化にあたるわけです。
まとめると、ラムダ式としての特性を持ったコンテナによるアプリの抽象化・仮想化を「ラムダコンテナ」と呼んでいます。そして、そのラムダコンテナの計算モデルを実装した具体的なシステムが、ゲームアプリを構成する環境丸ごとをコンテナと仮想マシンイメージの組み合わせでパッケージ化できるようにしたpreforkdなのです。ラムダ式とか関数型プログラミングとか、少し専門用語が多いのですが、要は、「今まで人が頑張っていたアプリやクラウドの管理を、コンピューターが自動的に行えるように理論化した」というイメージを持っていただければ幸いです。

もう少し技術的に説明すると、仮想マシンをクラウド環境上に生成・変更・検索・破棄する演算子(A. 仮想マシン演算子)と、その仮想マシン上にコンテナを生成・変更・検索・破棄する演算子(B. コンテナ演算子)、コンテナに接続するストレージ領域を管理する演算子(C. ストレージ演算子)そして、シミュレーション用のネットワーク構造をDNSのオーバーライドで擬似的に再現する演算子(D. ネットワーク演算子)を、関数型プログラミング、というパラダイムに基づいて定義できるようにしたプログラミング言語を、preforkdは提供しています(図2)。

▲図2. preforkdのシステム構成図。preforkdは、仮想マシン、コンテナ、ネットワーク、そして、ストレージを仮想環境で制御するスクリプト言語をゲーム開発者に提供しています

仮想マシン、コンテナ、ストレージ、そしてネットワークの4要素こそが、ゲーム世界を構成する四大元素だと思ってください。この4つを自由に操作できるシステムであるpreforkdは、言ってみれば、ゲーム世界を自在に制御できる最強魔法のようなものなのです。

エンジニアは、このプログラミング言語で書かれたたった一つのテキストファイルをpreforkdに入力するだけで、例えば『Shadowverse』のゲーム環境をサーバーからクライアントまで一括でコピーして、シミュレーションする環境を構築できます。これは単なるサーバー構築の自動化とは異なり、AIで制御されるクライアントアプリも含んでいるため、ゲーム環境全てをまるまる複製できるようになっています。つまりは、世界を、その登場人物も含めて丸ごとコピーできるのです。より詳しいpreforkdの仕組みについては下記の論文をご覧ください。

  • Shuichi Kurabayashi, “Lambda Containers: A Comprehensive Anti-Tamper Framework for Games by Simulating Client Behavior in a Cloud,” In Proceedings of the 2018 IEEE 11th International Conference on Cloud Computing (CLOUD), pages 598-605, San Francisco, CA, USA, July 2-7, 2018, DOI: https://doi.org/10.1109/CLOUD.2018.00083

ラムダコンテナによるデジタルツイン

ゲームアプリを構成する環境丸ごとをパッケージ化できると、何が嬉しいのでしょうか。今流行りの言葉でいうと、ゲーム環境の “デジタルツイン” が実現できるというメリットがあります。デジタルツインとは、日本語に直訳すると「デジタルの双子」という意味なのですが、物理空間と瓜二つな空間をサイバー空間に作り出し、シミュレーションや予測をするという考え方です。製造業におけるデジタル化の文脈でよく使われる言葉で、宇宙ロケットや大型航空機のような複雑な機械を開発するときに、その機械のコピーをデジタル空間に作っておき、各部の頑丈さや障害発生時の影響をデジタルの世界で検証する、という例がよく知られています。物理とサイバーの双子の空間を作り出すことにより、サイバー空間上でシミュレーションや検証をして、その結果に応じて物理空間を改善するなどの新しい施策が検討できるわけです。物理空間のデジタルツインを作り出すためには、現実世界をリアルタイムにデジタル化するセンサーが基盤技術になりますが、ゲーム世界のデジタルツインでは、仮想化技術が基盤技術になります。図3に示すように、今ゲームは、最先端の産業機械と比較しても遜色ないほど複雑なシステムになっています。その複雑なシステムの挙動を検証したり、変更の影響を見積もったりするためには、ゲームのデジタルツインを作り出すことが有効なのです。異世界を丸ごとコピーして、そのコピーの中で未来予測を行い、常に相手の先をとって攻撃できるスキルがあったら、どんな異世界でも生き残れそうですよね。preforkdは、そんな感じの技術です。

▲図3. 一般的なオンラインゲームのシステム構成図。ゲームのデジタルツインを作成するということは、このシステム全体をミラーリングすることを意味します

ゲームの機能変更が環境全体に与える影響を見積もるとか、デバッグを自動化するとか、Unityをサーバーサイドで動かすとか、負荷試験をする、などの応用部分だけを見ると全く異なる技術に見えますが、それらは全て、ラムダコンテナという一つの基礎理論に基づいています。そして、ラムダコンテナは、古くからあるラムダ式、ラムダ計算を基礎理論としています。ゲーム開発に使われる技術には、大学で学ぶような基礎理論が必要不可欠であり、そして、ゲーム開発を通じて、新しい基礎理論を生み出すこともできるのです。ちょっと長い記事でしたが、仮想化技術という、計算機科学のコアとも言える技術が、ゲーム開発に活用されている様子をお伝えすることができたのであれば幸いです。次回は、当社が東京理科大学にて実施している講義「DX特論」の話題を中心に、ゲーム開発技術を学ぶために何をすべきか、というお話をさせていただければ幸いです。