deploy-worlds について
deploy-worlds は、Decentraland のシーン制作者向けに、個人 World への公開方法を案内するガイドです。設定、ストレージ、アクセスリンク、Creator Hub または CLI からの公開に加え、複数シーンの World も扱います。
主な機能
- 01World 名と Places メタデータの設定
- 02コマンドまたは Creator Hub からのデプロイ
- 03ストレージ予算とアップロードサイズの確認
- 04スカイボックス時刻の設定
- 05複数シーン World のデプロイと管理
活用シーン
- 01Decentraland World へのシーン公開
- 02公開前のサイズとメタデータ確認
- 03複数シーン World のレイアウト設定
- 04所有権やデプロイ問題の調査
MCP 対応
World の発見用メタデータに使うサムネイル撮影で、unity-explorer MCP を利用すると記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ decentraland/ sdk-skills --skill deploy-worldsインストール後、Claude Code で/deploy-worldsを入力して読み込まれたか確認します。
詳細
Decentraland Worlds へのデプロイ
Creator Hub エージェントにはインストールされていません。 Creator Hub のスキルインストーラーはこのスキルを拒否リストに登録しており、ディレクトリには
SKILL.mdしか含まれていないため、完全にスキップされます。そのため、アプリに組み込まれた AI アシスタントには届きません。Creator Hub では、独自の UI を通じて公開します。Creator Hub のアシスタントとして、ユーザーから公開を依頼された場合は、アプリの公開フローを案内してください。Creator Hub の外部(Claude Code、Cursor、SDK エージェント)では、このスキルは通常どおり動作します。
Worlds は、LAND に紐づかない個人用の 3D 空間です。区画の制限はなく、Places ページに自動的に掲載されます。
要件
World に公開するには、ユーザーが次のいずれかを所有している必要があります。
- Decentraland NAME(例:
my-name.dcl.eth) - ENS ドメイン(例:
my-name.eth)
デプロイに署名するウォレットは NAME を所有しているか、アクセス制御リスト(ACL)を通じて権限を付与されている必要があります。
ストレージ容量
World にデプロイされたシーンは、同じウォレットが所有するすべての World で共有されるストレージ容量を使用します。容量はウォレットの保有資産に応じて動的に計算されます。
- 所有する Decentraland NAME ごとに 100 MB が付与されます(World も付与されます)。
- 所有する LAND 区画 ごとに、さらに 100 MB が付与されます。
- ウォレットに 2,000 MANA を保有するごとに、さらに 100 MB が付与されます。
- ENS ドメインの World の上限は 36 MB で、拡張できません。
容量は、ユーザーが希望する方法で複数の World に割り当てられます。Creator Hub の Manage セクション(内訳は View Details をクリック)または Builder の Worlds タブで使用状況を確認してください。
容量を超過した場合(資産の売却や譲渡後など)、World にアクセスできなくなるまでに空き容量を確保するための 48 時間の猶予期間があります。MANA/NAME/LAND を追加で取得するか、シーンのデプロイを解除すると、アクセスを回復できます。
公開後ではなく、公開前にアップロードサイズを確認してください。deploy-scene のデプロイ前チェックリストでサイズ確認を実行します(埋め込みの 2048 px テクスチャマップを含む大きな GLB が想定外のサイズになることがよくあります。また、プロジェクトの bin/index.js は開発ビルドのため、deploy がアップロードする minified バンドルより数 MB 大きくなります)。
1. scene.json を設定する
scene.json に worldConfiguration セクションを追加します。
{
"worldConfiguration": {
"name": "my-name.dcl.eth"
}
}
name フィールドは、デプロイするウォレットが所有する Decentraland NAME または ENS ドメインと一致する必要があります。
Places への掲載をオプトアウトする
すべての World は Places ページに自動的に掲載されます。掲載をオプトアウトするには、次のようにします。
{
"worldConfiguration": {
"name": "my-name.dcl.eth",
"placesConfig": {
"optOut": true
}
}
}
発見用メタデータ
オプトアウトしない限り World は Places に掲載されるため、Genesis City での発見に使われるものと同じメタデータが適用されます。公開前に、次の 4 項目がすべて設定されていることを確認してください。シーンから推測できる内容は補い、残りだけをユーザーに尋ねてください。
display.title— World の名前display.description— どのようなものかを説明する 1~2 文tags— ルートレベルの配列。定義済みリストから Places dApp のカテゴリを 1~3 個指定します:"art"、"game"、"casino"、"social"、"music"、"fashion"、"crypto"、"education"、"shop"、"business"、"sports"、"parkour"display.navmapThumbnail—.png/.jpg、16:9、推奨サイズは 1920x1080 px です。サムネイルを正方形に切り抜いたときに表示される中央の 1080x1080 の範囲内に、重要なコンテンツを収めてください。ファイルが存在することを確認し、sips -g pixelWidth -g pixelHeight <path>(macOS)またはmagick identify -format "%wx%h\n" <path>でサイズを確認します。その後、中央の正方形を切り抜き、全体のフレームではなく切り抜いた画像を確認してください。全体表示では問題なく見える、端から端まで続くテキストが、切り抜き後には見切れることがあります(切り抜きコマンドは deploy-scene のデプロイ前チェックリストを参照)。ユーザーに依頼するのではなく、unity-explorer MCP を使って自分で撮影してください。詳細な仕様と手順は deploy-scene スキルの「Thumbnail image」を参照してください。
2. デプロイ
/deploy コマンドを使用してください — scene.json 内の worldConfiguration を自動検出し、Worlds コンテンツサーバーに自動でデプロイします。
または、CLI から手動でデプロイします。
npx @dcl/sdk-commands deploy --target-content https://worlds-content-server.decentraland.org
デプロイに署名するため、ユーザーにウォレットの使用を求めるプロンプトが表示されます。シーンを許可または拒否する検証が自動的に実行されます。
プロジェクトのルートにある .dclignore に一致するファイルはアップロード対象から除外されます。World を軽量に保つため、Blender のソースファイル、コンセプトアート、Markdown ドキュメントなどの作業ファイルをここに記載してください。詳しくは deploy-scene スキルの .dclignore セクションを参照してください。
Creator Hub 経由
- Creator Hub でシーンプロジェクトを開きます
- Publish ボタン(右上)をクリックします
- PUBLISH TO WORLD を選択します
- 公開先の NAME または ENS ドメインを選択します
3. World にアクセスする
デプロイが成功すると、/deploy コマンドがアクセス用 URL を自動的に出力します。
プレイヤーに共有するリンクは、ウェブ版の /jump リンクです。デスクトップクライアントがインストールされているかどうかにかかわらず利用できます。
https://decentraland.org/jump?realm=NAME.dcl.eth
これが正式なリンクです。以前の形式である https://decentraland.org/play/world/NAME.dcl.eth は、このリンクへ 301 リダイレクトするだけです。/play URL は生成しないでください。Genesis City のシーンでは、対応するリンクは https://decentraland.org/jump?position=x,y です。Creator Hub の公開後パネルには、このリンクがそのまま表示され、コピーできます。また、Jump In ボタンをクリックすると、別途 decentraland://?realm=NAME.dcl.eth&dclenv=<env> を介してデスクトップクライアントが開きます(Creator Hub の 4305bb17c)。プレイヤー向けに書く内容ではウェブリンクを優先し、ディープリンクは相手がクライアントを利用していると分かっている場合にのみ使用してください。
ブラウザー(Bevy)クライアント用に https://decentraland.zone/bevy-web?realm=NAME.dcl.eth も利用できます。
Decentraland 内からは、チャットボックスで次のコマンドを使用します。
/goto NAME.dcl.eth
scene.json の全体例
{
"ecs7": true,
"runtimeVersion": "7",
"display": {
"title": "My World",
"description": "A personal 3D space",
"navmapThumbnail": "images/thumbnail.png"
},
"tags": ["social"],
"scene": {
"parcels": ["0,0"],
"base": "0,0"
},
"main": "bin/index.js",
"worldConfiguration": {
"name": "my-name.dcl.eth"
}
}
World Configuration のオプション
name と placesConfig に加えて、worldConfiguration ではスカイボックスとミニマップをカスタマイズできます。
"worldConfiguration": {
"name": "my-name.dcl.eth",
"skyboxConfig": {
"fixedTime": 43200
},
"placesConfig": {
"optOut": false
}
}
skyboxConfig.fixedTime— エンジンのテストシーンおよび現行ドキュメントで動作を確認済みです。skyboxConfig.textures、miniMapConfig(visible/dataImage/estateImage)— [未検証:エンジンのテストシーンおよび現行の scene-metadata ドキュメントには記載されていません。使用する前に js-sdk-toolchain のシーンスキーマで確認してください]。
skyboxConfig.fixedTime の値:
値は午前0時からの秒数です。1日は 86400 秒です。
| 値 | 時刻 |
|---|---|
0 | 真夜中 |
21600 | 午前6時(日の出) |
43200 | 正午 |
64800 | 午後6時(日没) |
86400 | 1日分(最大値) |
86400 を超える値は真夜中として解釈されます。動的な昼夜サイクルを使用するには、fixedTime を省略してください。
worldConfiguration.skyboxConfig.fixedTime はエンジンのテストシーンで動作を確認済みです。両方の値が設定されている場合は、トップレベルの skyboxConfig.fixedTime より優先されます。実行時の制御については lighting-environment スキルを参照してください(SkyboxTime コンポーネントは、どちらの JSON 値よりも優先されます)。
マルチシーン World
World では、それぞれ異なる座標に複数の独立したシーンを配置できます。シーンの追加や削除に応じて World は動的に拡大・縮小し、シーン間の隙間は環境で埋められます。
Creator Hub で有効にする: 最初の公開時に Multi-Scene World (advanced) を切り替えて有効にします。
CLI でデプロイする:
npm run deploy -- --multi-scene --target-content https://worlds-content-server.decentraland.org
有効にすると、World の所有者は次の操作を行えます。
- 同じ World 内の異なる区画に追加のシーンを公開する
- デプロイ権限を持つ Collaborators を追加する(すべての区画または特定の座標)
- World Settings の Layout タブでレイアウトを管理する(シーンの削除、World マップの表示)
- World Spawn Position を設定する(プレイヤーが入る区画)
共同作業者に関する注意: 「All Parcels」アクセス権を持つ共同作業者は、所有者が公開したものを含め、World 内の任意のシーンを上書きできます。
共同作業者としてデプロイする場合は、通常の deploy 手順を使用してください。公開フローでは、アクセス権のある区画のみを選択できます。
公開後の変換
World では、Genesis City のシーンと同じアセットバンドル変換が行われます。公開のたびに、3D モデルはサーバー側で圧縮されます。変換は通常数秒で完了します(非常に大規模なシーンやサーバーが混雑している場合は、さらに時間がかかります)。シーンをプレイできるようになると、すぐにジャンプインボタンが表示されます。数分経っても変換が続いている場合は、通常のキュー待ちではなく、失敗の兆候です。変換状況のエンドポイントと /detectabs チャットコマンドについては、deploy-scene スキルの「公開後:アセットバンドル変換」を参照してください。公開前に変換の問題を検出するには、アセットを圧縮(Creator Hub のプレイオプション > デスクトップクライアント)を使用するか、プレビューで --asset-bundles を指定します。
このセッション中にすでに World を読み込んだ人には、Decentraland を完全に終了して再度入るまで、キャッシュされたバージョンが表示され続けます。シーンの再読み込みだけでは不十分です。
World のメタデータとシーンのメタデータ
World と、そこに公開される各シーンには、名前、説明、サムネイルの別々のセットが 2 つあります。これを誤解すると、「説明を変更したのに Places には古い説明が表示される」という問題がよく発生します。
| シーンのメタデータ | World のメタデータ | |
|---|---|---|
| 保存場所 | シーンプロジェクトの scene.json | World 自体 |
| 編集方法 | Scene Editor のシーン設定 | Creator Hub の管理タブにある World の設定 |
| アップロードのタイミング | シーンと一緒に、公開のたびに | そこで編集したときのみ(または以下の説明に従った場合) |
| 表示場所 | シーン | Decentraland Places と、ワールド内の World 情報 |
それぞれの連携方法は、World に含まれるシーンの数によって異なります。
- 空の World — 最初のシーンを公開すると、シーンのメタデータが World のメタデータに反映されます。
- シーンが 1 つの World — 公開のたびに、World のメタデータがシーンのメタデータで上書きされます。そのため、管理タブで行った変更は次回の公開時に通知なく元に戻ります。代わりにシーン設定を編集してください。実際には、ここでは World のメタデータを無視してかまいません。
- 複数のシーンがある World — 2 つのメタデータは完全に独立しています。シーンを公開しても World のメタデータは変更されず、編集できるのは管理タブのみです。
トラブルシューティング
| エラー | 原因 | 解決方法 |
|---|---|---|
| "NAME not found" または "NAME not owned" | デプロイへの署名に使用したウォレットが、worldConfiguration.name の NAME/ENS を所有していません | https://builder.decentraland.org/names で NAME の所有権を確認してください。署名に使用するウォレットは、対象の NAME を正確に所有している必要があります |
| ENS の解決に失敗する | ENS ドメインが未登録、または期限切れです | https://app.ens.domains で ENS の登録状況を確認してください |
| "Scene too large" | シーンが World のストレージ上限を超えています(上記のストレージ上限を参照) | まず、プロジェクトのルートにある .dclignore に作業ファイル(Blender/FBX のソース、コンセプトアート、ドキュメント)をすべて追加し、アップロードされないようにしてください。詳しくは deploy-scene の .dclignore セクションを参照してください。その後、アセットのサイズを小さくします。Creator Hub の管理タブまたは Builder のWorldsタブで、残りの容量を確認してください |
| デプロイは成功するが、World が空 | main フィールドの設定が正しくありません | main が "bin/index.js" になっていること、およびコードがコンパイルされることを確認してください |
| World が Places に表示されない | 反映に時間がかかっています | デプロイ後、数分待ってください。placesConfig.optOut で掲載をオプトアウトしている場合は表示されません |
シーンの例
- https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/3,0-skybox-world-json —
worldConfiguration.skyboxConfig.fixedTimeを使って固定の空の時間を設定し、getSceneInformationでその値を読み取る World シーンです。
Genesis City にデプロイしますか? deploy-scene スキルを参照してください。
Genesis City との主な違い
- 区画の制限なし — World は LAND の所有権による制約を受けません
- NAME/ENS が必要 — LAND の代わりに、Decentraland NAME または ENS ドメインを所有している必要があります
- デプロイ先が異なる —
--target-content https://worlds-content-server.decentraland.orgを使用します - Places に自動掲載 —
placesConfig.optOutでオプトアウトしていない場合