AI と一緒に作る
ワールドは YAML、mod は TypeScript の、ふつうのファイルです。だから AI エージェント(Claude Code・Codex・Cursor など)に 「こういう部屋を作って」と頼めば、そのまま動くコードが返ってきます。このページは、AI に何を渡し、どう確かめるかをまとめます。
AI に渡すもの
Section titled “AI に渡すもの”- このサイトの
llms.txt: https://hub.ubichill.com/llms.txt に、ドキュメントの目次と本文へのリンクがあります。AI に「まずこれを読んで」と渡してください。 - 仕様のページ: ワールドなら ワールド定義フォーマット、mod なら SDK API と mod パッケージ。URL を貼るだけで十分です。
- 動いている例: 本体リポジトリの
worlds/とmods/にある実物。 - やりたいこと: 「ペンと動画プレイヤーがある作業部屋」「クリックすると数が増えるボタン」のように、画面の言葉で。
ワールドを書いてもらう
Section titled “ワールドを書いてもらう”最小のワールドはこれだけです。
apiVersion: ubichill.com/v1alpha1kind: Worldmetadata: name: chill-room # 小文字英数と -(URL になる) version: 1.0.0spec: displayName: チルな作業部屋 capacity: { default: 10, max: 20 } environment: backgroundColor: "#F0F8FF" worldSize: { width: 2000, height: 1500 } dependencies: - name: pen - name: video-player initialEntities: - id: pentray transform: { x: 9, y: 7 } components: - type: pen:trayAI に頼むときの文の例:
worlds/chill-room.yamlを作って。ubichill.com/v1alpha1 の World。ペンのトレイを左上に、core:mediaのスクリーンを中央に置いて、 動画プレイヤーのコントロールをスクリーンの下に置いて、コントロールのscreen参照にスクリーンの Entity id を入れて。仕様は https://hub.ubichill.com/create/world-format/ を読んで。
ポイント:
- Component の型は
<modId>:<componentName>。使う mod はdependenciesに書きます。core:*は書きません。 - Component 同士をつなぐ参照は、
dataに相手の Entity のidを書きます。 - 上限: Entity 500・1 Entity に Component 32・YAML 100KB。
mod を書いてもらう
Section titled “mod を書いてもらう”mod は src/*.worker.tsx に、export const config と UI の export default を書きます。
import type { ComponentConfig } from 'ubichill';
export const config: ComponentConfig = { defaultTransform: { w: 120, h: 40 },};
const like = Ubi.state.define({ count: Ubi.state.sync(0), // 全員で共有し、残る});
export default function LikeButton() { return <button onClick={() => like.local.count++}>いいね {like.local.count}</button>;}AI に頼むときの文の例:
ubichill の mod を作って。npm の
ubichillが SDK、@ubichill/cliがビルドと開発サーバー。src/like.worker.tsxに、押すと全員で共有される数が増える 「いいね」ボタンを書いて。Ubi.state.syncで状態を持ち、UI はexport defaultの関数で返す。API は https://hub.ubichill.com/mods/api/ を読んで。tsconfig.jsonのjsxImportSourceはubichill、src/env.d.tsにdeclare const Ubi: import('ubichill').Ubi;を置いて。
ポイント:
Ubiはグローバルに注入されます。importせず、env.d.tsの型宣言で補います。export defaultの関数が読んだUbi.stateの値は自動で追いかけられ、変わったときだけ描き直されます。- 権限は宣言しなくても、使った API からビルド時に決まります(権限リファレンス)。
fetchは使えません。外部と通信するならUbi.fetchを使います(利用者がドメインごとに許可します)。
手元で動かして確かめる
Section titled “手元で動かして確かめる”npm install ubichillnpm install -D @ubichill/cli typescriptnpx ubichill dev # mod だけなら world.yaml なしでよい(合成した部屋で動く)npx ubichill dev worlds/chill-room.yamlhttp://localhost:3333/ を開くと、本番と同じ画面・同じ判定(lock・権限)で動きます。ファイルを保存すると、その mod だけビルドし直して画面が更新されます。
ビルドに失敗したら画面とターミナルに診断が出るので、それをそのまま AI に貼って直してもらってください。
できあがったら、作者アカウントで署名して公開します。
npx ubichill login # 1 回だけ。ブラウザで承認するnpx ubichill publish worlds/chill-room.yaml # ワールドを Ubichill のサーバーへnpx ubichill publish worlds/chill-room.yaml --out=dist # GitHub Pages などに置くファイルを書き出すnpx ubichill build && npx ubichill publish dist # mod の配布物に署名する流れの全体は 署名して公開する を見てください。CI(GitHub Actions)から公開する方法もあります。
- ワールド定義フォーマット — フィールドの正確な定義
- はじめての mod — 15 分で動く mod のチュートリアル
- SDK API —
Ubi.*のリファレンス - CLI —
ubichillコマンドの一覧