bevy-migration-0-18-to-0-19 について
Bevy プロジェクトを 0.18 から 0.19 に移行する開発者向けのリファレンスです。重要な API、機能、エコシステムの変更を整理し、アップグレードの検証チェックリストも掲載しています。
主な機能
- 01重要な API 変更の対照表
- 02リソースとクエリの移行案内
- 03テキスト、シーン、描画の更新
- 04機能とエコシステムの互換性情報
- 05アップグレード検証チェックリスト
活用シーン
- 01Bevy 0.19 への更新計画
- 02移行に伴うビルドエラーの解決
- 03機能構成と対象環境のビルド確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-migration-0-18-to-0-19インストール後、Claude Code で/bevy-migration-0-18-to-0-19を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/rendering-assets-and-api.mdresources-as-components.mdscene-serialization.mdtext-and-fonts.md詳細
Bevy 0.18 → 0.19 の移行
Bevy 0.19.0 は 2026-06-19 にリリースされました。bevy = "0.19" を指定し、最新の 0.19 パッチリリースで検証してください。公式の移行ガイドを最初から最後まで適用してください。このスキルでは、ゲームコードと関連するスキルに影響する可能性が高い変更を優先しています。
最初に確認するチェックリスト
- エンジンと Bevy エコシステムのすべてのクレートをまとめて更新してください。Bevy 0.18 用にビルドされたクレートは、Bevy 0.19 の ECS/アセット/レンダリングの型と共有できません。
- プロジェクトで実際に使用する
default-featuresとターゲットトリプルで再ビルドしてください。 - 二次的なシステムエラーを追う前に、リソースと広範なクエリの競合を修正してください。
- シーン、テキスト、アセット、レンダリング、ライト、UI フォーカスを更新してください。
- 永続化されたアニメーションターゲット ID とシリアライズ済みのワールドデータを再生成してください。
- 代表的なサンプルをコンパイルし、ネイティブおよび Web/プラットフォーム向けビルドを動作確認してください。
影響の大きい変更
| Bevy 0.18 | Bevy 0.19 |
|---|---|
#[derive(Component, Resource)] | 別々の型に分割。Resource: Component |
広範なクエリと Res<T> | 該当する場合、Without<IsResource> でリソースエンティティを除外 |
init_non_send_resource | init_non_send |
SceneRoot / DynamicScene | WorldAssetRoot / DynamicWorld |
bevy_scene の旧ワールドシリアライズ | bevy_world_serialization |
TextFont { font: Handle<_>, font_size: f32 } | FontSource と FontSize |
TextLayout::new_with_justify | TextLayout::justify |
LoadContext::loader() | LoadContext::load_builder() |
AsyncSeekForward を使うカスタム Reader | 必須になった Reader::seekable() |
ViewNode とカメラのレンダーグラフノード | Core2d / Core3d スケジュール内のシステム |
Replace、on_replace | Discard、on_discard |
set_executor_kind(ExecutorKind::...) | executor インスタンスを渡す set_executor(...) |
ライトの shadows_enabled | shadow_maps_enabled と、任意の contact_shadows_enabled |
カメラ上の Atmosphere | 独立した bevy::light::Atmosphere エンティティ |
公開されていた InputFocus.0 | get、set、clear メソッド |
レンダーノード API は廃止されましたが、カメラ以外のトップレベルスケジュールである bevy::render::renderer::RenderGraph は引き続き存在します。このスケジュール名を機械的に置き換えないでください。
テキストとシーン
TextFont {
font: asset_server.load("fonts/FiraSans-Bold.ttf").into(),
font_size: FontSize::Px(24.0),
..default()
}
commands.spawn(WorldAssetRoot(
asset_server.load("models/level.glb#Scene0"),
));
テキストシェーピングとフォールバックは Parley/fontique が提供するようになりました。インストール済みフォントファミリーの検出には、system_font_discovery フィーチャーが必要です。従来のシリアライズシステムは BSN 用の名前を確保するために改名されました。glTF のルートには、BSN のシーン型ではなく、引き続き WorldAssetRoot を使用します。
テキストとフォントおよびシーンのシリアライズを参照してください。
リソースとジェネリッククエリ
Res<T> と ResMut<T> は、引き続き通常の API です。意味上の変更点は、リソースの値がシングルトンエンティティに格納され、#[derive(Resource)] が Component も実装することです。その結果、コンポーネントを広範に検索するクエリがリソースアクセスと競合したり、意図せずリソースエンティティを含めたりする可能性があります。
fn inspect_entities(
entities: Query<EntityRef, Without<IsResource>>,
settings: Res<GameSettings>,
) {
// ...
}
すべてのクエリに機械的に Without<IsResource> を追加しないでください。通常のエンティティだけを対象とするクエリに限って絞り込んでください。コンポーネントとしてのリソースを参照してください。
フィーチャーとエコシステムのクレート
[dependencies]
bevy = { version = "0.19", default-features = false, features = [
"3d", "ui", "audio"
] }
audioは2d、3d、uiによって暗黙的に有効にならなくなりました。uiは2dまたは3dによって暗黙的に有効にならなくなりました。- プロファイルコレクションは
default-features = falseと組み合わせて使用する必要があります。そうしないと、Cargo のフィーチャー統合によってデフォルトフィーチャーが引き続き有効になります。 - デフォルトフィーチャーを無効にする場合、ネイティブのコントローラーイベントには
bevy_gilrsバックエンドが必要です。 bevy_capture 0.6とbevy_hanabi 0.19は Bevy 0.19 を対象としています。他のすべての依存関係についても、クレートのバージョンから推測せず、宣言されている Bevy のバージョンを確認してください。
その他の移行元
InputFocusはDefaultPluginsによって初期化されます。Bevy 0.19.1 ではfocus.set(entity, FocusCause::Navigated)を呼び出してください。1 引数の 0.19.0 の例は パッチ適用前のものです。- シリアライズされた
AnimationTargetIdの値を再計算してください。ハッシュ/ID アルゴリズムが変更されています。 - glTF の
#Material0ラベルはGltfMaterialを返すようになりました。PBR 変換が有効な場合にHandle<StandardMaterial>を取得するには/stdを追加してください。 - 高度な読み込みは
AssetServer::load_builderを経由するようになりました。ネストされた読み込みにはLoadContext::load_builderを使用してください。 EasyScreenRecordPluginの手動リテラルにはoutput_dirが必要です。..default()を使用すれば、すでに設定されています。FeathersPluginはFeathersCorePluginに変更されましたが、プラグイングループは引き続きFeathersPluginsです。
レンダリング、アセット、APIを参照してください。
移行を検証する
cargo check --all-targets
cargo test
cargo tree -d | rg 'bevy(_| )'
Bevy のメジャー/マイナーバージョンが重複している場合は、無害な Cargo のノイズではなく、互換性の問題として扱ってください。また、サポート対象のすべての機能プロファイルとターゲットでビルドしてください。デフォルトのデスクトップビルドだけでは、default-features = false や WASM の検証にはなりません。