2026年11月3日(火・祝)から11月4日(水)までの2日間、エピック ゲームズ ジャパンが主催するUnreal Engine公式カンファレンス「Unreal Fest Tokyo 2026」が、東京・有明のTFTホールで開催されました。
本稿では、プログラミング言語「Verse」の設計思想やUnreal Engine 6(以下、UE6)における役割について解説された講演「Verse: What it is and why we are building it」の模様をレポートします。
2026年11月3日(火・祝)から11月4日(水)までの2日間、エピック ゲームズ ジャパンが主催するUnreal Engine公式カンファレンス「Unreal Fest Tokyo 2026」が、東京・有明のTFTホールで開催されました。
本稿では、プログラミング言語「Verse」の設計思想やUnreal Engine 6(以下、UE6)における役割について解説された講演「Verse: What it is and why we are building it」の模様をレポートします。
TEXT / 神谷 優斗
Verseは、Epic Gamesが開発するマルチパラダイムのプログラミング言語です。処理のロールバックを言語仕様としてサポートしている点などが特徴として挙げられます。
講演時点で、Verseは『フォートナイト』向けの制作環境「Unreal Editor for Fortnite(UEFN)」で利用されています。また、2027年後半のアーリーアクセスを目指すUE6では、ブループリントに代わるゲームロジック実装用のプログラミング言語として位置付けられています。
講演の冒頭、Enebakk氏は今の時代に新しいプログラミング言語をつくる狙いについて説明しました。
狙いの一つは、異なる開発者が互いに作ったシステムを組み合わせられる、共有のエコシステムを作り上げていくことです。講演では、開発者Aが作ったヘルスシステムをBの武器システムが利用し、さらにその武器をCのゲームで使うという依存関係が例として挙げられました。もしAがダメージ関数の引数を互換性のない形で変更してしまうと、その関数を呼び出すBや、さらにそれに依存するCのゲームにも影響が及んでしまいます。
そのためVerseは、公開したAPIを更新する際の後方互換性を重視して設計されているとのことです。
もう一つの狙いは、ゲームプレイ用のプログラムを安全かつ直感的に書けるようにすることです。
Verseは静的な型検査を行い、型の不整合をコンパイル時に検出します。暗黙の型変換も禁止されており、intからfloatへの変換などは明示的に行う必要があります。また、値に付けた名前は既定では再代入できず(イミュータブル)、変更可能な変数の宣言にはvar、値の更新にはsetを使用します。
関数型言語のように変更を強く制限して意図しない状態の書き換えやバグを防ぎつつ、クラスやインターフェースを用いたオブジェクト指向らしい記述にも対応しています。
UE6においてVerseが担うのはゲームロジックの実装です。エンジン本体やプラグインなどには引き続きC++が使用され、パフォーマンス上の理由などでC++側に実装した処理は、Verse向けのAPIを介して呼び出せるようにする方針としています。
また、UE6向けの将来的な連携構想として、Verseで宣言したクラスの一部の関数をC++で実装する方法や、C++からVerseを呼び出す方法も説明されました。
続いてEnebakk氏は、Verseのプログラミング言語としての具体的な特徴を解説しました。
Verseでは、すべての構文が値を返す「式」として扱われます。ほかの多くのプログラミング言語では値を返さない「文」として扱われるifやforも、Verseでは値を返します。これにより、条件分岐やループの評価結果をそのまま定数や変数に束縛し、簡潔に記述できます。
例えば、string型の定数Labelに対し、体力が50を超えていれば”Healthy”、そうでなければ”Hurt”を返すif式をそのまま代入できます。また、配列[1, 2, 3]の各要素を2倍するfor式は、評価結果としてそのまま新しい配列[2, 4, 6]を生成します。
Verseは、一連の処理が成立しなかったことを「failure(失敗)」という言語概念で扱います。例えば、配列の範囲外の要素を参照する式や、存在しないキーでマップを検索する式は「失敗」となります。
こうした失敗し得る式は、「failure context(失敗コンテキスト)」と呼ばれる領域内でのみ記述できます。失敗コンテキスト内の処理が一つでも失敗すると、そのコンテキスト内で行われたすべての変更がロールバックされ、その失敗コンテキストの開始前の状態へと自動的に巻き戻ります。
これにより、処理の途中で失敗した際に、不整合な状態が残るのを防げます。また、意図しない状態で後続の処理が進行するのを防げるため、nullチェックを多用する防御的なコードを書かずに済む利点もあります。
講演では、乗り物に搭載された武器を発射する処理の例が示されました。この処理は、「乗り物が存在しない」「武器コンポーネントがない」「弾が装填されていない」といった要因で失敗する可能性があります。そのためVerseでは、乗り物・武器・弾の状態を取得する処理を一つの失敗コンテキスト(ここではifの条件部)にまとめて記述します。
実行時には、途中の取得処理が一つでも失敗すれば後続の発射処理は実行されず、すべての取得に成功した場合のみ弾が発射されます。
また、「失敗」の仕組みをループの対象を絞り込むフィルターとして使うことも可能です。敵の配列を走査するfor式の中で、「生存している」「視界に入っている」「射程内にいる」といった失敗し得る関数を呼び出すことで、一つでも条件に失敗した敵は除外され、すべての条件を満たした敵だけを結果の配列に残すことができます。
型キャストや、値が存在しない場合の既定値の選択も、失敗の仕組みで記述できます。例えば「Scores[Player] or 0」と記述すれば、マップの検索に失敗した場合に0が結果として返されます。
なお、関数が失敗し得るかどうかは、Verseの言語仕様である「エフェクト指定子」を用いて関数単位で明示します。失敗し得る関数には<decides>エフェクトを付与し、呼び出す際は丸括弧()ではなく角括弧[]を使用します。
処理が失敗した際に行われるロールバックの活用例として、講演ではアイテムの購入処理を行う関数が紹介されました。
一つの失敗コンテキストの中に「所持金を代金分減らす」「ショップの在庫を1個減らす」「購入したアイテムをバッグに入れる」という一連の処理を記述しておけば、最後の「バッグに入れる」処理がバッグ満杯で失敗したとしても、すでに実行された所持金やショップ在庫の変更まで自動的に購入前の状態へ巻き戻されます。
さらに、成功値またはエラー情報を表すresult型を利用し、「バッグが満杯である」といった失敗理由を呼び出し元へ返す例も紹介されました。
Verseには、時間をかけて進行する処理を非同期関数として直感的に記述する仕組みがあります。関数に<suspends>エフェクトを付けると、ブループリントのLatentノードのように非同期処理として扱われ、関数内で一定時間待機するSleep()などが使えるようになります。
比較例として、待ち時間をTickで管理するC++の実装例も紹介されました。更新のたびにタイマーを調べ、次の処理へ進むかを分岐・判断するC++での実装に対し、VerseではSleepによる待機と後続の処理をそのまま順番に書き下すことができます。
時間のかかる複数の処理を並行して進める場合には、複数の非同期関数を同時に実行し、すべて終了するのを待ってから次へ進む「sync」や、最初に完了した処理の結果を採用して残りの処理を自動的にキャンセルする「race」などの並行処理構文を使用します。
C++やブループリントではデリゲートなどを使わざるを得ず複数の場所に分かれがちだった処理の流れを、Verseではsyncやraceを使って一か所にまとめて記述できます。
具体例として挙げられたチャージ攻撃の実装では、「チャージ完了を待つ処理」と「被弾イベントを待つ処理」をraceで並行して待ち受けます。raceは、チャージが先に完了すればtrue、被弾が先に発生すればfalseを返します。その後、結果の値に応じて、チャージ攻撃を発動するか、ひるみアニメーションを再生するかを分岐させています。
Verseは、セーブデータのようにセッションをまたいでプレイヤーごとのデータを永続化する仕組みを言語レベルでサポートしています。保存したいデータ構造をクラスや構造体として定義し、クラスに<final><persistable>指定子を付与することで、プレイヤーごとの保存データとして扱えるようになります。
UE6では、従来のActorに代わる新たなオブジェクト構築基盤として「Scene Graph」が導入されます。
Scene Graphでは、親子関係を持つ基本オブジェクトであるentityに、見た目やロジックを担うcomponentを組み合わせて、シーン内のオブジェクトを構成します。
オブジェクト固有の動作は、Verseで定義されているcomponentクラスを継承したサブクラスに記述します。
アクタの子クラスに対応する、entityとcomponent構成のプリセット「Prefab」も、Verse上ではクラスとして扱われます。
例えば、金庫のPrefabであるEP_VaultはEP_Vault{}という構文でインスタンス化でき、AddEntitiesでシーンへ追加します。
さらに、Prefabの階層構造そのものをVerseのソースコードだけで定義する機能も設計中とのこと。
言語機能のさらなる拡張として、依存先の変更に合わせて値を自動更新するLive variablesも開発中です。例えば、XをY + 1と定義すると、Yが0のときにXは1になります。その後Yを5に変更すると、依存関係が自動的に追跡され、Xの値も自動で6へと更新されます。
また、マルチプレイでの応答性を高めるため、クライアント側で処理を先行実行させる「クライアント予測」機能も将来機能として紹介されました。クライアントが先行して進めた状態をサーバー側で検証し、補正が必要な場合はクライアント側の変更をロールバックして、サーバーの正しい状態を反映します。
実行基盤においては、従来のブループリントのバイトコードへ変換して実行する方式に代わり、新たに「Verse専用VM(※)」の開発が進められています。
※ VMはVirtual Machine(仮想マシン)の略。ここでは、バイトコードを解釈・実行するソフトウェアの実行基盤を指す
このほか、関数を既定でロールバック可能にする計画や、Verseおよび言語ランタイムのオープンソース化も将来のロードマップとして紹介されました。
Enebakk氏は最後に、言語の仕組みや開発中の機能を詳しく知るための資料として「Book of Verse」を、現在のUEFNで利用できるAPIの参照先として「Verse API Reference」を紹介し、講演を締めくくりました。
「Unreal Fest Tokyo 2026」公式サイトBook of VerseVerse API Referenceコーヒーがゲームデザインと同じくらい好きです
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
CEDECで行われた講演のレポートをまとめました。
UNREAL FESTで行われた講演のレポートやインタビューをまとめました。
GDCで行われた講演などのレポートをまとめました。
CEDEC+KYUSHUで行われた講演のレポートやイベントレポートをまとめました。
GAME CREATORS CONFERENCEで行われた講演のレポートをまとめました。
Indie Developers Conferenceで行われた講演のレポートやインタビューをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドやレポートなどをまとめました。
東京ゲームショウで展示された作品のプレイレポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームダンジョンで展示された作品のプレイレポートをまとめました。
日本と文化が近い中国でゲームを展開するための知見を、LeonaSoftware・グラティークの高橋 玲央奈氏が解説。
インディーゲームパブリッシャーの役割や活動内容などを直接インタビューします。