Verse言語入門:コードで学ぶ、UE6で主役になる新言語の基本文法

gracon_papa

前回の記事「UE6でBlueprintは廃止される?」では、「即廃止ではなく将来的に非推奨。だからこそ今のうちにVerseに触れておこう」という結論にたどり着きました。とはいえ、言葉で「新しい言語です」と言われてもピンときませんよね。この記事では、実際のコードを1つずつ見ながら、Verseの基本文法をやさしくたどっていきます。

しっこ
しっこ

正直、新しい言語って身構えちゃうんだよな…。C++で苦労したし、また一から覚えるのしんどそう。

りん
りん

大丈夫。今日は「変数・関数・if・Hello World」を、他の言語と見比べながら進める。”知ってる概念”に紐づければ、意外とすんなり入るぞ。


そもそもVerseとは?

Verse(ヴァース)は、Epic Gamesが開発している新しいプログラミング言語です。設計を主導しているのは、関数型言語Haskellの生みの親の一人、Simon Peyton Jones。関数型言語の第一人者たちが集って作られている、かなり本格的な言語です。

すでに2023年3月からUEFN(Unreal Editor for Fortnite)で無料で使えており、UE6ではBlueprint・C++と並ぶ「第3の選択肢」として標準統合される方向です。つまり「今UEFNで学べば、UE6時代に先行できる」言語というわけです。

では、さっそくコードを見ていきましょう。細かい理屈より、「こう書くんだ」という感覚をつかむのが今日のゴールです。


基本① 変数と定数

まずは値の入れ物から。Verseの基本形は 名前 : 型 = 値 です。

MaxScore : int = 1000        # 定数(あとから変更できない)
PlayerName : string = "Hero" # 文字列の定数

この形だと定数(再代入できない値)になります。「あとから書き換えたい変数」にしたいときは、頭に var を付けます。そして書き換えるときは set が必要です。

var Score : int = 0    # 変更できる変数
set Score = 100        # 再代入するときは set が必須
set Score += 10        # += も使える → Score は 110

💡 ここがポイント

他の言語だと「代入」は = だけで済みますが、Verseは書き換えのときだけ set を明示させます。「うっかり上書き」を防ぐ、Verseらしい”安全第一”の設計です。


基本② 関数

関数は 関数名(引数:型):戻り値の型 = 本体 と書きます。2つの数を足す関数なら、こうです。

Add(A:int, B:int):int = A + B

本体が長くなるときは、= の後で改行してインデント(字下げ)します。

Greet(Name:string, Age:int):string =
    "{Name}さんは {Age} 歳です"   # {} で変数を文字列に埋め込める

Verseはインデントでコードのまとまりを表す言語です。波カッコ { } だらけにならないので、Pythonを触ったことがある方には馴染みやすい見た目でしょう。ちなみにコメントは # で書きます。


Verseならではの特徴① 「失敗」で考えるif

ここからがVerseの個性です。Verseの if は、単なる「真か偽か」の分岐ではなく、式が「成功する」か「失敗する」かで動きます。これを失敗式(failure expression)と呼びます。

if (Score = 5):        # ここの = は「等しいか?」の比較。成功すれば下へ
    Print("5です")
else:
    Print("5ではありません")

面白いのは、「失敗するかもしれない処理」そのものを条件に書ける点です。たとえば割り算はゼロで割ると失敗しますが、それをそのまま if に渡せます。

if (Result := X / Y):    # Y が 0 なら「失敗」して else へ
    Print("計算成功:{Result}")
else:
    Print("0では割れません")

💡 他の言語だとどう書く?

多くの言語では、こうした「失敗しうる処理」を try-catch で囲んだり、戻り値がnullかどうかを毎回チェックしたりします。Verseはその仕組みが言語に最初から組み込まれているので、nullポインタ例外が原理的に起きにくいのが大きな利点です。

さらに if ... then ... else値を返す式としても使えます。他言語の三項演算子(条件 ? A : B)に近い感覚です。

Result := if (X > 0) then "プラス" else "マイナス"

「値が有るかもしれないし、無いかもしれない」を表すoption型も、この失敗の仕組みと相性抜群です。型の前に ? を付け、取り出すときは末尾に ? を付けます。

var MaybeGrade : ?int = false   # 空っぽの状態
set MaybeGrade = option{ 8 }    # 値を入れる

if (Grade := MaybeGrade?):      # 中身があれば取り出して使う
    Print("成績は {Grade}")

Verseならではの特徴② 失敗したら「なかったこと」になる

Verseのもう一つの目玉がトランザクショナルメモリです。ざっくり言うと、処理の途中で失敗すると、それまでの変更が自動で巻き戻る(ロールバックされる)という仕組みです。

たとえば「スコアを加算 → アイテムを付与」という一連の処理の途中で失敗したとき、普通の言語なら「スコアだけ増えてアイテムは無い」という中途半端な状態が残りがちです。Verseでは、失敗したトランザクション内の set による変更はまとめて取り消され、「何も起きなかった」状態に戻ります

📝 補足

これは「大人数が同時に触るオンラインワールドでも、状態が壊れない」ことを狙った設計です。従来、自前でロールバック処理を書いていた手間を、言語が肩代わりしてくれるイメージです。


その他の特徴(ざっくり)

  • 並行処理を安全に書ける:複数の処理を同時に走らせる仕組み(spawnsyncraceなど)が言語に内蔵されている
  • エフェクト指定子:関数が「何をしうるか」を型で宣言する。<computes>(純粋計算)・<transacts>(状態を変えうる)・<decides>(失敗しうる)・<suspends>(非同期)など
  • ループ:loop(無限ループ)と for (i := 0..99):(範囲の反復)が基本形

ここは「そういうものがある」とだけ知っておけば十分。最初から全部覚える必要はありません。


C++ / Blueprint と何が違う?

BlueprintC++Verse
形式ノードのビジュアルテキスト(高難度)テキスト(高水準・安全志向)
主な用途手軽なゲームプレイエンジンコア・高性能処理ゲームプレイロジック(並行・大規模向け)
学習難度
UE6での位置づけ将来的に非推奨の方向併存(Verseと補完)第3の選択肢として標準統合の方向

⚠️ 誤解しやすいポイント

一部で「UE6でC++が廃止される」という表現も見られますが、Epic公式はそこまで断定していません。当面はC++とVerseが役割を分けて共存する、と冷静に受け止めておくのが安全です。


実践:Hello Worldを書いてみよう

最後に、ここまでの要素を全部使った「Hello, World!」を見てみましょう。UEFNでは、ゲーム内に置けるデバイス(装置)としてVerseコードを書きます。

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

# creative_device を継承した「装置」を定義する
hello_device := class(creative_device):

    # ゲーム開始時に自動で呼ばれる関数
    OnBegin<override>()<suspends>:void =
        Print("Hello, World!")
  • using { … }:使う機能を読み込む宣言。C++の #include に近い感覚です
  • hello_device := class(creative_device):ゲーム内に配置できる装置を定義。:= は「定義する」記号です
  • OnBegin<override>()<suspends>:開始時に動く関数。<suspends> は「途中で待ったり再開したりする非同期関数」の印
  • Print("Hello, World!"):おなじみ、文字を出力する命令です

実際に試すのに必要なのは、、、
①Epic Gamesアカウント
②UEFN(無料・Epic Games Launcher経由
③Fortnite Creativeのプロジェクト
だけ。追加課金なしで、この「Hello, World!」から始められます。

しっこ
しっこ

なるほど、変数もifも”知ってる感じ”で読めた!これならHello Worldくらいなら書けそう。

りん
りん

その調子だ。まずは手を動かすのが一番。慌てず、しかし備える。今の一歩がUE6時代に効いてくるぞ。


まとめ

  • 変数は 名前:型=値、書き換えは varset。関数はインデントで書く(Python似)
  • Verseの個性は「失敗」で考えるif失敗したら巻き戻るトランザクション。ミスを言語が防いでくれる
  • すでにUEFNで無料で試せる。Hello Worldから小さく始めて、UE6時代に備えよう

関連記事:Blueprint廃止の全体像は「UE6でBlueprintは廃止される?」で、UE5で使える便利プラグインは「Fabプラグイン記事」で解説しています。

参考:

ABOUT ME
記事URLをコピーしました