メインコンテンツまでスキップ

xrift.json 設定

プロジェクトルートの xrift.json でワールドの設定を行います。

設定例

{
"world": {
"distDir": "./dist",
"title": "My World",
"description": "サンプルワールドです",
"thumbnailPath": "thumbnail.png",
"buildCommand": "npm run build",
"ignore": [
"**/.DS_Store",
"**/Thumbs.db",
"**/*.map"
],
"camera": {
"near": 0.1,
"far": 1000
},
"permissions": {
"allowedDomains": ["api.example.com"],
"allowedCodeRules": ["no-storage-access"]
}
}
}

設定項目

フィールド説明
distDirstringアップロードするビルド成果物のディレクトリ
titlestringワールドのタイトル(未設定の場合、アップロード時に入力)
descriptionstringワールドの説明(未設定の場合、アップロード時に入力)
thumbnailPathstringサムネイル画像のパス(distDir からの相対パス)
buildCommandstringアップロード前に実行するビルドコマンド
ignorestring[]アップロードから除外するファイルの glob パターン
physicsobjectワールドの物理設定
cameraobjectワールドのカメラクリッピング設定
permissionsobjectワールドが必要とする権限設定

各項目の詳細

distDir

アップロード対象のディレクトリを指定します。

{
"world": {
"distDir": "./dist"
}
}

title / description

ワールドのタイトルと説明を設定します。これらはオプショナルですが、設定しておくと xrift upload world 実行時のプロンプトでデフォルト値として使用されます。

{
"world": {
"title": "My Awesome World",
"description": "インタラクティブな3Dワールドです"
}
}

thumbnailPath

ワールドのサムネイル画像を指定します。distDir からの相対パスで指定します。

{
"world": {
"distDir": "./dist",
"thumbnailPath": "thumbnail.png"
}
}

この場合、dist/thumbnail.png がサムネイルとして使用されます。

推奨サイズ: 1280x720 ピクセル

buildCommand

xrift upload world 実行時に、アップロード前に自動実行されるコマンドです。

{
"world": {
"buildCommand": "npm run build"
}
}

これを設定しておくと、手動でビルドする必要がなくなります。

ignore

アップロードから除外するファイルを glob パターンで指定します。

{
"world": {
"ignore": [
"**/.DS_Store",
"**/Thumbs.db",
"**/*.map"
]
}
}

physics

ワールドの物理動作をカスタマイズできます。

設定デフォルト説明
gravitynumber9.81重力の強さ(正の値、地球=9.81、月=1.62)
allowInfiniteJumpbooleantrue無限ジャンプを許可するか

基本設定

{
"world": {
"physics": {
"gravity": 9.81,
"allowInfiniteJump": true
}
}
}

アスレチックワールド(無限ジャンプ禁止)

{
"world": {
"physics": {
"allowInfiniteJump": false
}
}
}

低重力ワールド(月の重力)

{
"world": {
"physics": {
"gravity": 1.62
}
}
}

高重力ワールド(木星の重力)

{
"world": {
"physics": {
"gravity": 24.79
}
}
}

camera

ワールドのカメラクリッピング距離をカスタマイズできます。

設定説明
nearnumberニアクリップ距離(カメラに近すぎるオブジェクトを非表示にする距離)
farnumberファークリップ距離(カメラから遠すぎるオブジェクトを非表示にする距離)

基本設定

{
"world": {
"camera": {
"near": 0.1,
"far": 1000
}
}
}

広大なワールド(遠くまで描画)

{
"world": {
"camera": {
"far": 5000
}
}
}

精密なワールド(近距離の描画精度を上げる)

{
"world": {
"camera": {
"near": 0.01
}
}
}

permissions

ワールドが必要とする権限を宣言します。ここで宣言された権限は、ユーザーがインスタンスに入室する際に承認画面として表示されます。

設定説明
allowedDomainsstring[]ワールドが通信する外部ドメインのリスト
allowedCodeRulesstring[]緩和が必要なコードセキュリティルールのリスト

基本設定

{
"world": {
"permissions": {
"allowedDomains": ["api.example.com", "cdn.example.com"],
"allowedCodeRules": ["no-storage-access", "no-network-without-permission"]
}
}
}

allowedDomains

ワールドのコードが通信する外部ドメインを指定します。@xrift/code-security のコード解析により、許可されていないドメインへの通信は検出・ブロックされます。

allowedCodeRules

@xrift/code-security で定義されているコードセキュリティルールの緩和を宣言します。デフォルトでは安全でない操作(eval、外部通信、ストレージアクセスなど)はブロックされますが、ワールドの機能上必要な場合にここで緩和を宣言します。

動的コード実行
ルール説明
no-evaleval() による文字列のコード実行を許可
no-new-functionFunction コンストラクタによるコード動的生成を許可
no-string-timeoutsetTimeout/setInterval への文字列引数を許可
no-javascript-blobJavaScript Blob を使ったスクリプト動的生成を許可
難読化
ルール説明
no-obfuscation難読化されたコードパターンを許可
ネットワーク通信
ルール説明
no-network-without-permissionfetch や WebSocket 等のネットワーク通信を許可
no-unauthorized-domainallowedDomains に含まれないドメインへの接続を許可
no-rtc-connectionWebRTC ピア接続を許可
no-external-import外部 URL からの JavaScript モジュール読み込みを許可
ストレージ・データ
ルール説明
no-storage-accesslocalStorage / sessionStorage へのアクセスを許可
no-cookie-accessCookie の読み書きを許可
no-indexeddb-accessIndexedDB へのアクセスを許可
no-storage-event他タブのストレージ変更イベントの監視を許可
DOM 操作
ルール説明
no-dangerous-dominnerHTML やスクリプト要素の挿入を許可
ブラウザ API
ルール説明
no-navigator-access位置情報・カメラ・マイク・クリップボード等へのアクセスを許可
グローバル汚染
ルール説明
no-sensitive-api-overridefetch 等のセキュリティ上重要な API の書き換えを許可
no-global-overridewindow / document 等のグローバルオブジェクトの書き換えを許可
no-prototype-pollution組み込みオブジェクトのプロトタイプ変更を許可