mcpField
E
ecs-design

ecs-design

github.com/christopher-buss開発882 回インストール5 週間前に更新
リポジトリ

ecs-design について

ecs-designは、Robloxのjecs向けECS設計ガイドスキルです。列指向データベースの考え方を用いて、コンポーネント、エンティティ、システム、クエリ、アーキタイプの設計を支援します。

主な機能

  1. 01列指向データベース型ECSモデル
  2. 02コンポーネント粒度の指針
  3. 03エンティティと関係の選択
  4. 04クエリとシステムの設計
  5. 05アーキタイプの断片化に関する指針

活用シーン

  1. 01データをエンティティに持たせるか判断
  2. 02コンポーネントの分割・統合
  3. 03クエリとシステムの責務を設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/christopher-buss/skills --skill ecs-design

インストール後、Claude Code で/ecs-designを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

GENERATION.md
references/
best-practices-components.md
best-practices-entities.md
best-practices-systems.md
core-database-model.md
core-query-design.md

詳細

ECS の設計原則

Roblox における jecs の設計ガイダンスです。

基本的な考え方

ECS を列指向データベースとして考えてください。

データベースECS
テーブルアーキタイプ(一意のコンポーネントの組み合わせ)
列コンポーネント型
行エンティティ
クエリシステムの反復処理

設計上の問い:「これ専用のデータベース列を作るでしょうか?」

基本リファレンス

トピック説明リファレンス
データベースモデル列指向データベースとしての ECS、正規化、断片化core-database-model
クエリ設計複数エンティティのクエリ、制約の分解、走査core-query-design

ベストプラクティス

トピック説明リファレンス
コンポーネント設計粒度の判断、分割・統合する場面、タグとデータの使い分けbest-practices-components
システム設計単一責任、不要な処理の回避、順序付け、データフローbest-practices-systems
エンティティ設計エンティティを作成する場面、遅延作成、スケーリングのパターンbest-practices-entities

すばやく判断するためのガイド

質問回答
これはエンティティにすべきですか?時間とともに変化するインスタンスごとの状態が必要な場合に限ります
分割すべきですか、統合すべきですか?「A は必要だが B は必要ないシステムがあるでしょうか?」
タグにすべきですか、データコンポーネントにすべきですか?安定した分類にはタグ(追加・削除は自由)、状態にはデータを使います
リレーションシップとエンティティ参照のどちらにすべきですか?逆引きが必要ならリレーションシップ、それ以外はエンティティメンバーを使います
断片化は悪いことですか?数千のアーキタイプがあり、かつ広範囲にクエリする場合に限ります
DOD が重要になるのはいつですか?数千のエンティティを毎フレーム処理し、CPU がボトルネックになる場合

よくある間違い

間違い問題点対策
モノリシックなコンポーネントキャッシュの無駄、密結合アクセスパターンごとに分割します
コンポーネントの過度な細分化クエリの複雑化、不正な状態意味上の単位で統合します
大きなエンティティへの頻繁な追加・削除すべてのコンポーネントデータがコピーされます代わりにデータコンポーネントを変更します
あらゆるリンクにリレーションシップを使う利点がないまま断片化します順方向のみならエンティティメンバーを使います
システム内にキャッシュ済みクエリを置く毎フレーム新しいキャッシュが作成されますモジュールのスコープでキャッシュ済みクエリを作成します

主要な原則

  1. アクセスパターンごとにコンポーネントを構成する — システムが必要とするデータをまとめます
  2. アーキタイプの遷移ではデータがコピーされる — コンポーネントを追加または削除すると、すべてのデータが新しいアーキタイプにコピーされます。小さなエンティティでは低コストですが、大きなエンティティでは高コストです
  3. エンティティのメンバーとリレーションシップ — 前方検索にはエンティティのメンバーを、逆引きやグループ化にはリレーションシップを使用します
  4. クエリはモジュールスコープでキャッシュする — システム内で .cached() を呼び出さないでください
  5. クエリでフィルタリングする — コード内の条件分岐ではなく、with/without を使用します
  6. フラグメンテーションが役立つ場合もあります — リレーションシップを使うと、グループ化されたクエリを効率的に実行できます

コメント