概要

GodotゲームエンジンのRustバインディングである「godot-rust」が2026年3月27日、v0.5を正式にリリースした。v0.4から約6ヶ月ぶりのメジャーアップデートとなり、型システムの強化、パフォーマンス最適化、エンジン統合の改善など70以上の変更が含まれている。Rust edition 2024およびGodot 4.6への対応も行われた。

セーフガードレベルによるパフォーマンス最適化

v0.5では新たに3段階のセーフガードレベルが導入された。「Strict」はデバッグビルドのデフォルトで、開発中のバグ検出を強化する。「Balanced」はリリースビルドのデフォルトで、安全性を保ちつつ高速な動作を実現する。「Disengaged」は安全チェックを完全に省略し、最大限の速度を追求するモードで、特殊な高パフォーマンスシナリオ向けとされている。

さらに、Callable::from_fn()コンストラクタの高速化や、Gd<T>の内部セルからMutexロックを除去する最適化も実施された。スレッディングモデルにより、experimental-threadsを使用しない場合はメインスレッドからのみアクセスするため、安全性を維持したままMutexを不要にできたという。

型付き辞書と型システムの強化

型システム面では、辞書がDictionary<K, V>というジェネリック型パラメータをサポートするようになった。新しい式マクロとしてdict!idict!が追加され、要素アクセスでも強い型付けが維持される。また、GDScriptにおける暗黙的なアップキャスト問題に対処するため、AnyArrayAnyDictionaryという共変コレクション型が新設された。これらはすべての要素型に対して安全な操作のみを公開し、Deref変換により&Array<T>&AnyArrayとして使用できる。

Godot 4.6のnullabilityアノテーションにも対応し、非nullパラメータにはOption<Gd<T>>ではなくGd<T>が使用されるようになった。エンジンおよびカスタムenumがGodotConvertを実装し、#[func]#[signal]#[var]#[export]、コレクション全体で統一的に利用可能となっている。GStringStringName&strとの直接比較がアロケーションなしでサポートされた。

クラス登録APIとエディタ統合の改善

#[func]#[opt(default = ...)]属性によるオプショナルパラメータのデフォルト値指定が可能になった。エディタ向けには#[export_tool_button]属性が追加され、PhantomVar<Callable>と組み合わせることでインスペクタ上にクリック可能なボタンを配置できる。

プロパティシステムでは、#[var]フィールドのRustゲッター・セッターの自動生成が廃止され、#[var(pub)]によるオプトイン方式に変更された。#[var(rename = ...)]によるプロパティ名のリネームも可能だ。ユーザーシングルトンの登録が#[class(singleton)]属性で可能となり、RustとGDScriptの両方からグローバルにアクセスできる。Godotのオートロードを簡便に取得・キャッシュするget_autoload_by_name()関数も追加された。

WebAssemblyとクロスコンパイルの進展

WebAssembly対応が大きく前進した。Wasm向けのプリビルトアーティファクトが提供されるようになり、従来必要だったapi-customフィーチャー、bindgen、LLVMツールチェーンが不要になった。Webエクスポートは現在CIでテストされており、セットアップを簡略化するCLIツールも計画されている。また、godot-bindingsのプラットフォーム選択がホストOSではなくターゲットOSに基づいて行われるよう修正され、クロスコンパイルが正しく機能するようになった。Rust GDExtensionクレートをrlibとしてコンパイルし依存関係として利用することで、モジュラーなエクステンション構成も可能になっている。

今後の展望

今後はスレッドセーフティの改善やGDExtensionエコシステムの安定化が重点分野とされている。v0.5には破壊的変更も含まれており、旧来のNode::duplicate()Resource::duplicate()メソッドは非推奨となりv0.6で削除予定。移行ガイドが提供されている。