bevy について
bevyは、Bevy 0.20プロジェクト向けのルーティングスキルです。開発者を各分野の専門スキルに案内し、バージョン固有の書き方や移行時の注意点を示します。
主な機能
- 01タスクに応じたBevyスキルへの案内
- 02エンジンの基礎とECSの各トピック
- 03旧バージョン向け移行スキルの一覧
- 04Bevy 0.20のAPI変更点
- 05よくある落とし穴の説明
活用シーン
- 01Bevyの作業に必要なガイダンスの検索
- 02Bevy 0.20のコードを書く前のパターン確認
- 03旧バージョンからの更新時の変更点確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevyインストール後、Claude Code で/bevyを入力して読み込まれたか確認します。
詳細
Bevy 0.20 — ルーター
Bevy プロジェクトで作業する際は、まずこれをお読みください。 すべての関連スキルは Bevy 0.20(2026-10-08 に 0.20.0 がリリース、現在のパッチバージョンは 0.20.1、rustc 1.97.1 が必要)を前提としています。ユーザーの Cargo.toml で別のバージョンが指定されている場合は、いったん作業を止め、このコレクションのパターンを適用する前に確認してください。
最小限の有効なアプリ
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera3d::default());
}
タスクに応じたスキルの選び方
| タスク | スキル |
|---|---|
アプリ/プラグイン/スケジュールの基本、Update と FixedUpdate の違い、排他的システム(0.20 のあらゆる場所での &mut World) | bevy-core-concepts |
#[derive(Component)]、#[require(...)]、オブザーバー(On<E>、On<Add<T>>)、フック(on_add/on_discard)、ストレージ | bevy-ecs-components |
Query、With/Without/Or、Changed/Added、par_iter、iter_many(..).matched()、クエリレンズ | bevy-ecs-queries |
SystemParam、SystemSet、.run_if、順序付け、.chain_weak()、remove_systems_in_set | bevy-ecs-systems |
Cargo.toml の機能:2d/3d/ui、*_api、bevy_curve、compressed_image_saver*、WASM の軽量化 | bevy-cargo-features |
0.19 からのアップグレード — On<Add<T>>、PointerClick、Hovered/Pressed、WESL、set_if_different | bevy-migration-0-19-to-0-20 |
0.18 からのアップグレード — FontSource/FontSize、bevy_world_serialization、コンポーネントとしてのリソース | bevy-migration-0-18-to-0-19 |
0.17 からのアップグレード — MessageReader、On、RenderTarget、GlobalAmbientLight | bevy-migration-0-17-to-0-18 |
glTF シーン向けの AssetServer、Handle<T>、load_builder、ホットリロード、WorldAssetRoot | bevy-assets |
AssetLoader の作成(Reader::seekable が必須) | bevy-custom-assets |
| WASM ビルドパイプライン、WebGPU と WebGL2 の比較 | bevy-wasm-webgpu |
Camera3d、Projection、RenderTarget コンポーネント、Tonemapping::Linear、ScreenSpaceTransmission、FreeCamera、PanCamera | bevy-cameras |
StandardMaterial、MaterialPlugin<M>、AsBindGroup、WESL カスタムシェーダー、ライティング、大気 | bevy-pbr-materials |
GPU パーティクル(bevy_hanabi)、ガウススプラット、フリップブック、カスタム VFX マテリアル | bevy-vfx |
AnimationPlayer、AnimationGraph、AnimationTransitions、AnimationMask、AnimationEvent、イージングカーブ | bevy-animation |
カメラ映像の MP4 または PNG シーケンスへの録画(bevy_capture) | bevy-capture |
block-mesh-rs によるボクセルメッシュ生成、チャンクパイプライン、グリーディークワッド | bevy-voxel-pipeline |
| RON ブロック定義、パレット、KTX2 アトラスのベイク | bevy-voxel-data |
再割り当て可能なアクション、エンティティの Gamepad、ホットプラグ、デッドゾーン、Steam Deck、FixedUpdate への入力 | bevy-input-actions |
AudioPlayer、PlaybackSettings、AudioSink、空間リスナー、ミックスグループ、ブラウザーでのロック解除 | bevy-audio |
| Rapier の剛体、コライダー、固定ステップの順序付け、イベント、シーンのクエリ、ジョイント、決定性 | bevy-physics |
| 組み込み/外部/ヘッドレスレンダリング、フォワード/ディファードレンダリング、レンダリングシステム | bevy-rendering |
DiagnosticPath、DiagnosticsStore、info_span!、RenderDiagnosticsPlugin、CPU/GPU の処理時間 | bevy-diagnostics-profiling |
| 安定 ID、バージョン管理された保存 DTO、ネイティブ/ブラウザーでのアトミック書き込み、スナップショット | bevy-save-load |
決定的な App::update ステップ実行、TimeUpdateStrategy、MessageCursor、ヘッドレステスト | bevy-testing |
| スクリーンリーダー、アダプティブコントローラー、再マッピング、字幕、コントラスト、モーションの安全性 | bevy-a11y |
| ボクセル編集からランタイムでの再メッシュ化まで:dirty/halo のファンアウト、リビジョントークン、上限付きアップロード | bevy-voxel-runtime |
es-fluent-manager-bevy による i18n — FluentText<T>、BevyFluentText、LocaleChangeEvent、i18n.toml | bevy-fluent |
Node、ui_widgets::Button と Hovered/Pressed、children![]、TextFont/FontSize、Val::Em、Node::border_radius、InputFocus | bevy-ui |
| Unity、Unreal、Godot、Phaser、Flash、Defold、Roblox、GameMaker からの移植 | bevy-porting |
コミット前のコピペコード/類似コードの検出(similarity-rs --cross-file) | similarity-rs |
基本ルール(Bevy 0.20 のすべてのタスク)
- イベントはメッセージです。
EventReader<E>/EventWriter<E>は 0.17 でMessageReader<M>/MessageWriter<M>に変わりました。オブザーバーではTrigger<E>ではなく、必ずOn<E>を使います。 - ライフサイクルオブザーバーでは、イベントにバンドルを指定します。
On<Add<Player>>を使います。On<Add, Player>ではありません(0.20 で変更)。Replaceは 0.19 でDiscardに変わりました。 - ポインターイベントはフラットです。
On<PointerClick>とclick.pointer.positionを使います。On<Pointer<Click>>ではありません(0.20)。 - UI のインタラクションには
HoveredとPressedを使います。ui::Interactionとui::widgets::Buttonは 0.20 で非推奨になりました。ui_widgets::Buttonをスポーンしてください。 - テキストには
FontSourceとFontSizeを使います。TextFont { font: handle.into(), font_size: FontSize::Px(24.0) }を使います(0.19)。デフォルトのサイズはFontSize::Rem(1.)です(0.20)。 - シェーダーは WESL です。
.wesl、import a::b;、@if(DEF)を使います。naga_oil の#import/#ifdefは 0.20 ではアセットの読み込み時に失敗します。 - リソースはコンポーネントです(0.19)。
Res<T>は引き続き使えますが、同じ型をComponentとResourceの両方にはできません。 - シーン: glTF は
bevy_world_serializationのWorldAssetRootを使ってスポーンします。bevy_sceneは BSN です(0.19)。 - システム内で
.unwrap()を使わないでください。let ... else { return };を使うか、適切なエラー処理を行います。 - スケジュールの順序は明示します。 デフォルトでは曖昧さは無視されます(
ScheduleBuildSettings::ambiguity_detectionはLogLevel::Ignoreです)。検出するにはLogLevel::Errorを有効にします。組み込みセットは 0.20 で.chain_weak()を使うため、チャネルやアトミックを介したセット間の順序付けには、明示的な.after()が必要です。
注意点
- Bevy のトレーニングデータの大部分は 0.10~0.16 のコードです。コードスニペットが自明に思えても、信用する前に 3 つの移行スキルで確認してください。
bevy::prelude::*ですべてが再エクスポートされるわけではありません。Hoveredはbevy::picking::hover::Hovered、Pressedはマーカーbevy::ui::Pressed(Has<Pressed>でクエリします)、Tonemappingはbevy::core_pipeline::tonemapping::Tonemapping、ScreenSpaceTransmissionはbevy::pbr::ScreenSpaceTransmissionです。bevyクレートは多くのサブクレート(bevy_camera、bevy_light、bevy_material、bevy_extract、bevy_curve、bevy_shape、bevy_world_serialization、bevy_ui_widgets、bevy_feathers)を再エクスポートします。プラグインが依存する API として、サブクレートの API は安定した選択肢です。- 非推奨の API(
Interaction、set_if_neq、AssetId::invalid())は 0.20 では警告付きでコンパイルされますが、後のバージョンで削除されます。今のうちに修正してください。
関連項目
bevy-migration-0-19-to-0-20— 改名と破壊的変更をまとめた最新のカタログです。bevy-cargo-features— 上記の項目が意図どおりにコンパイルされるようにするため、Cargo.tomlに記述する内容です。
コメント
Markdown 対応