@ubichill/cli
Patch Changes
Section titled “Patch Changes”- Updated dependencies [6ba0785]
- Updated dependencies [787dfc4]
- Updated dependencies [4424709]
- @ubichill/[email protected]
- @ubichill/[email protected]
Patch Changes
Section titled “Patch Changes”- Updated dependencies [d6764be]
- Updated dependencies [890dd1d]
- @ubichill/[email protected]
- @ubichill/[email protected]
Minor Changes
Section titled “Minor Changes”-
abbb4db: Component 同士を、階層の形ではなく型付きの参照で配線できるようにした(#191)。
- SDK:
dataFieldsのentityRef/entityRefArrayにcomponent(参照先が持つべき Component 型)とrequiredを足した。Ubi.event.emit(type, data, { ref: '<フィールド名>' })で、ワールド作者が指した Entity のその型の Component にだけ届く。scope: 'referrers'で、参照で自分を指している Component に返せる。EmitOptions({ scope, targetType? })は interface のまま残し、参照で送るときのRefEmitOptions({ ref, targetType? })を足した。emitはどちらか一方を受ける(両方・どちらも無しは型で弾く)。既存のscopeの意味は変えていない。 - SDK: 古い Host は
ref・scope: 'referrers'をエラーにせず捨てるので、プロトコルの版(PROTOCOL_VERSION)を 6 に上げ、Ubi.runtime.supports('event:ref')(とcore:mediaの描画先の'media:surface')で確かめられるようにした。 - SDK: 参照フィールドの
accessで許す読み書きは、componentを宣言していれば参照先のその型の Component だけ。defaultは World Editor で Component を足したときに data へ書く初期値で、data に無いときの代わりにはならない。 - shared: 参照の解決と検査(
resolveRefs・findReferenceProblems・describeReferenceProblem)。World Editor・ubichill dev・Host の配送が同じ判定を使う。mod の manifest の検証はcomponent・requiredを受け付ける。 - CLI:
ubichill devが毎回のビルドで参照の問題(未設定の必須参照・無い Entity・型の違う Entity)を検査し、ターミナルと dev パネルの診断(DevFailureのkind: 'reference')に出す(止めはしない)。合成ワールドは合成の結果が変わったら部屋を作り直す(参照を足しただけでも配線し直す)。world.yamlが無いときに合成するワールドでは、型を宣言した参照をその型を置いた Entity に配線しておく。
- SDK:
-
4b24568: 端末への出力を作り直す(絵文字をやめ、Vite / Next.js と同じく
✓成功・✗失敗・!注意・➜次にすること、TTY のときだけ色。NO_COLOR/FORCE_COLORに従う)。ubichill dev: 起動の途中は mod ごとのビルドの行、起動し終えたら最後に URL の案内(ready in)を出す。以降は時刻・[dev]/[build]/[instance]・結果の 1 行。ビルドの失敗は mod の名前と esbuild のコードの抜き出し、ワールドの失敗は直し方を添える。ubichill devは既定で手元(127.0.0.1)だけで待ち受ける。--host(全部の口)/--host=<addr>で LAN に公開し、そのオリジンを Go にも許す。- 全体の
--debug(UBICHILL_DEBUG=1と同じ): 判断・時間・HTTP の要求・Go の info / debug のログを出し、失敗にスタックトレースを付ける。ふだんの失敗はメッセージと直し方だけ。 ubichill devは Go を--log-format=jsonで起動し、JSON の行を[instance]の行にする(ふだんは warn / error だけ)。- backend・db(migrate)のログは 1 件 1 行(本番は ISO 時刻・level・色なし、スタックの改行は
\n)。
-
abbb4db: 組み込み Component
core:media(動画を描く場所。Unity の MeshRenderer に当たる)を足した(#191)。- ワールドに
core:mediaを置き、mod は参照フィールド{ type: 'entityRef', component: 'core:media' }でそれを指す。フィールドの名前をUbi.media.*の targetId に使うと、<video>は参照先の Entity の位置・大きさで描かれる。URL の許可・同期・状態はその mod のもの。動画を出すだけの Worker を別に作らなくてよい。 dataはfit(contain/cover)だけ。何を再生するかは持たない(未知のキーは検証で落ちる)。クライアントからは作成・変更できない(ほかのcore:*と同じ)。- 1 つの動画面に出力できるのは 1 つ(Component のインスタンス ×
core:mediaを指すentityRef)。2 つ以上が指す面・core:mediaを 2 つ持つ Entity には誰の動画も描かず、World Editor(Hierarchy・Inspector)とubichill devが知らせる。判定は shared のfindMediaConflicts(描いてよい出力はowners)。 - 描けるのはワールド定義に置いた Component の出力だけ。部屋の中で作られた Component は面を指しても描かず、競合にも数えない(参加者が面を指す Component を作って動画を消せないように)。
entityRefArrayはcore:mediaを指しても描画先にならない。mediaTargetsと同じ名前のcore:mediaの参照はビルドで止める(CLI)。CORE_COMPONENT_TYPES.mediaを足した。
- ワールドに
-
abbb4db: 組み込み Component
core:uiを足した(#191)。ワールド作者が HTML 風の UI データ(markup)を書くと、Host が mod の UI と同じ描画(Shadow DOM・タグと属性の許可リスト・URL と style の検査)で描く。mod を作らずに看板・説明・リンクを置ける。script・style・template・iframeなどは中身ごと、on*属性・コメントは解析で捨てる。使えないタグ(b・centerなど)はタグだけ外して中身を描く。要素名でない<は文字として描く。- リンクと画像は https だけ(画像は
data:image/も可)。画像は参照元を送らない(referrerpolicyはno-referrerに固定)。mod の UI の規則は変えていない。 - 解析は文字数に比例する時間で終わる(壊れた入力でも読み直さない)。入れ子は 32 段・要素は 2000 個まで。
markupは 2 万文字まで。未知のキーは検証で落ちる。クライアントからは作成・変更できない(ほかのcore:*と同じ)。- 押したときの動きはまだ無い。
button・inputなどは描くが押しても何も起きないので、World Editor の Inspector が「未対応」と知らせる(捨てたon*属性・script・タグを外した要素・https でない URL・上限を超えた部分も同じ欄で知らせる)。 CORE_COMPONENT_TYPES.uiを足した。
-
04d9050:
ubichill buildがconfig.dataOnly: trueの Component を、Worker を持たないデータ専用の Component として manifest に載せるようにした(バンドルせず、lock の components にも、置ける Component の一覧(index.jsonのcomponents)にも載せない)。これまでdataOnlyは型にあるだけでビルドが読んでおらず、mod が spawn するデータ(pen のpen:strokeなど)を Worker として扱っていた。ubichill devがworld.yamlの無いときに合成するワールドにも data-only の型は置かない。manifest のスキーマにdataOnlyを足した。dataOnlyを書いた Component のexport const configをリテラルとして読めない(テンプレート文字列・定数・スプレッドを使っている)と、ビルドを止めてそう知らせる。これまでなら黙って Worker として bundle され、spawn した Entity ごとに Worker が起動していた。
Patch Changes
Section titled “Patch Changes”-
410b271:
ubichill devの画面で、mod が実行中に作るデータだけの entity(pen のpen:strokeなど)に「mod のファイルを取得できません」と警告を出さない。 -
cd7f158: npm 版(
ubichill)を使う mod のバンドルに、使っていない SDK の実装(UbiSDK本体など)が入らないようにした。これまではCORE_COMPONENT_TYPESを 1 つ import するだけで minify 後に約 32KB 増えていた。UbiSDK.FETCH_RPC_TIMEOUT_MSは static フィールドから getter に変わる(読み取れる値は同じ。代入はできなくなる)。あわせて、
ubichill buildが自動で見つける権限が正しくなる。これまでは SDK の本体がバンドルに入ると、その中の文字列に反応して、使っていないscene:read・scene:updateまで付いていた。新しい SDK で作り直した mod が、この誤検出に頼って scene の API を使っていた(Ubiを分割代入や別名で使うなど)なら、export const configのcapabilitiesに書く。FETCH_LIMITS.defaultMaxBytes・maxBytesの型はnumberから値そのもののリテラル型になる(他の項目と同じ)。@ubichill/cliは同梱するworld.htmlと shared の定数が同じ変更を含むので版を上げる。 -
Updated dependencies [abbb4db]
-
Updated dependencies [abbb4db]
-
Updated dependencies [abbb4db]
-
Updated dependencies [04d9050]
-
Updated dependencies [04d9050]
- @ubichill/[email protected]
- @ubichill/[email protected]
Patch Changes
Section titled “Patch Changes”-
3777e11:
ubichill devを videoplayer・chillwa で使ってみて分かった点を直す。- world.yaml が無いときに合成するワールドを、実際のワールドと同じ形(mod ごとの親の下に Component を 1 つずつ)にし、
defaultTransformの位置に置く。scope: 'siblings'のイベントが届くようになる。 - ワールドだけのリポジトリ(
src/が無い)でもubichill dev worlds/x.yamlで動く。 - Ctrl+C(
npm run dev/npxが SIGINT を転送して 2 回届く)や、ポートが使用中で起動できないとき、どこかで捕まらない例外が出て落ちるときも Go が残らない。 - 署名の無い手元の mod の署名ファイルを 204 で返す(ブラウザのコンソールに 404 を出さない)。
- dev の状態表示を右上の小さな札にする(上端の帯が
overlay: top-leftの HUD を隠していた)。 - 取れない mod の診断に、手元に無いのか
source.urlから取れないのかを出す。 - 手元でビルドした mod は
source.urlが書いてあっても手元を使う(作業中のコードが動かなかった)。手元に無い mod は world.yaml の横の.lock.jsonの版(本番と同じ)を使い、外へ取りに行くのはワールドを作り直すときだけにする。 - 診断を「今の失敗の一覧」として送る。起動直後の失敗が画面に出ない・壊して元に戻しても診断が残る、を直す。
- ポートを先に開く(使用中ならビルドの前に分かる)。
- 合成ワールドの entity の id が別の mod の親と子でぶつからない。画面固定の Component は x/y が無くても画面の角に置く。
- Go が起動し直したあとの部屋の作り直しに失敗しても node が落ちず、ビルドの診断と並べて出し、次のビルドで部屋を作り直す。
- world.yaml が無いときに合成するワールドを、実際のワールドと同じ形(mod ごとの親の下に Component を 1 つずつ)にし、
Major Changes
Section titled “Major Changes”- 24578ca: CLI を
ubichillから分け、@ubichill/cliとして公開する。ubichillは mod が import する SDK だけになり、bin とesbuild・yamlへの依存が無くなる(mod 開発者はnpm i ubichillに加えてnpm i -D @ubichill/cliを入れる。ubichillコマンドの名前と使い方は変わらない)。
Minor Changes
Section titled “Minor Changes”- 24578ca:
ubichill dev: 手元の mod を本番と同じ Go のインスタンスサーバーとworld.htmlで動かす開発サーバー。Docker・DB・Go のツールチェーンは要らない。保存すると世代(lock・manifest・Worker・asset)を切り替えてページを読み直し、ビルドに失敗したら前の世代が動き続ける。 - 24578ca: ワールド定義の検証・写像(
definitionToResolved)と、Go のインスタンスサーバーに渡す定義を作るtoInstanceDefinitionを@ubichill/sharedに置き、backend と CLI が同じ変換を使う。ubichill world build <world.yaml>で、手元のワールドからubichill-instance --world用の定義 JSON を作れる。 - 24578ca: Go のインスタンスサーバー(
ubichill-instance)を npm のプラットフォーム別パッケージ@ubichill/instance-<os>-<cpu>で配り、@ubichill/cliの optionalDependencies に入れる(macOS arm64/x64・Linux x64/arm64・Windows x64)。
Patch Changes
Section titled “Patch Changes”- Updated dependencies [24578ca]
- Updated dependencies [b4c63fa]
- Updated dependencies [24578ca]
- @ubichill/[email protected]
- @ubichill/[email protected]