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

Arrival CLI

最終更新日:25.08.2026バージョン1.0

概要

Arrival CLI は Arrival.Space の Space をローカル Workspace として管理します。Space をファイルとして Pull し、room 設定、Entity、Plugin、Asset を自分のツールや AI Agent で編集し、サーバーで検証してから Live Space へ Push できます。Workspace は通常のファイルなので、他のプロジェクトと同じように Git で管理・レビューできます。

CLI はアプリ内の Space Agent と同じ Materialize、Validate、Sync-back のワークフローを使用しますが、AI は使用せず、Live Hot Reload も提供しません。ソースコードは Arrival Plugins Repository にあります。

AI Agent と使う場合

この Prompt を渡すと、Agent はこのページを読んで自分で設定します。

Please set yourself up to use the arrival CLI: https://codex.arrival.space/api/cli

前提条件

  • Node.js 18 以降
  • 対象の Space を編集できる Arrival.Space アカウント
  • OAuth Login 用のブラウザ

インストール

git clone https://github.com/arrival-space/arrival-plugins.git
cd arrival-plugins/tools/arrival-cli
npm install
npm link

すでにリポジトリをローカルに持っている場合は、Clone を省略して tools/arrival-cli に移動してください。

npm link は任意です。arrival コマンドを PATH から実行できるようにします。プロジェクトフォルダから node index.js を実行することもできます。

認証

arrival login

CLI はブラウザを開き、OAuth 2.0 Authorization Code と PKCE を使用します。Token は ~/.arrival/config.json に保存されます。既定のサーバーは次のとおりです。

https://api-live.arrival.space

arrival logout はローカルの Token を削除します。サーバー上の API キーは無効化しません。

コマンド

arrival spaces

認証済みユーザーの Space を一覧表示します。--search でタイトルまたは説明を検索できます。

arrival spaces
arrival spaces --search gallery

arrival create <title>

新しい Space を作成し、その ID を出力します。--pull を指定すると、同じ手順でローカル Workspace として Checkout できます。

arrival create "Photo wall"
arrival create "Photo wall" --pull

オプション: --description <text>--privacy Open|Closed(既定は Closed)、--type infinite|hub(既定は infinite)、--pull、および --pull の出力先を指定する --dir <path>

arrival pull <spaceId>

Space をローカル Workspace にダウンロードします。既定の保存先は ./<spaceId> です。

arrival pull 45637586_1234
arrival pull 45637586_1234 --dir ./spaces/gallery
arrival pull 45637586_1234 --force

保存先は空である必要があります。既存の内容を上書きする場合は --force を使用します。Pull には生成された Space の概要や、利用可能な場合は AGENTS.mdCLAUDE.mdreference/ も含まれます。

arrival status

最後の Pull または成功した Push 以降のローカル変更を表示します。ネットワーク接続は不要です。

arrival status
arrival status --dir ./spaces/gallery

arrival diff

Text ファイルの行単位の差分を表示します。Binary ファイルは Binary ファイルとして表示されます。

arrival diff

arrival validate

変更を適用せずにサーバー側の Dry Run を実行します。

arrival validate
arrival validate --dir ./spaces/gallery

検証エラーには対象ファイルとサーバーのメッセージが含まれます。Workspace には arrival pull が作成した .arrival/manifest.json が必要です。

arrival push

変更したファイルを Live Space に送信します。

arrival push
arrival push --dir ./spaces/gallery
arrival push --dry-run

追加、変更されたファイルと明示的な削除だけが送信されます。ローカルでファイルを削除した場合、通常の Push には --force が必要です。

arrival push --force
注意

Push は次回の読み込みに使用される Live Space を更新します。既にブラウザで開いている Space は自動更新されません。ブラウザを Reload してください。

arrival upload <file>

大きな Asset を Presigned Upload フローで CDN に直接アップロードします。

arrival upload ./assets/museum.glb

Model、Splat、画像、音声、動画などを扱えます。CLI が URL または resource_key を表示するので、Entity から参照して arrival push を実行します。

Workspace の構成

<spaceId>/
space/
room.json # RoomInfo と Space 設定
entities/*.json # Entity ごとの JSON ファイル
plugins/<name>.mjs # 単一ファイルの ArrivalScript Plugin
plugins/<name>/ # 複数ファイルの Plugin
assets/<name> # ローカル Asset
README.md # Space の生成された概要
.arrival/
manifest.json # Pull の Baseline とメタデータ
base/space/ # status と diff が使う Baseline
AGENTS.md # Workspace ガイド
CLAUDE.md # 任意の Assistant ガイド
reference/ # API ドキュメントとサンプル

編集前に space/README.md を読んでください。Entity、Plugin、位置、共有 Plugin の使用状況が記載されています。編集対象は space/ 以下だけです。.arrival/manifest.json.arrival/base/spaceAGENTS.mdCLAUDE.mdreference/ は編集しないでください。

Entity

Entity ファイルの基本形は次のとおりです。

{
"id": "entity-id",
"type": "UserModelEntity",
"data": {
"position": { "x": 0, "y": 1.5, "z": -3 },
"rotation": { "x": 0, "y": 90, "z": 0 },
"scale": 1,
"glbUrl": "assets/museum.glb"
}
}

編集するのは data であり、state ではありません。各 Entity には idtype、オブジェクト型の data が必要です。Space 全体の設定は room.json に、個別の設定は各 Entity の JSON に記述します。

Plugin

Plugin は space/plugins/.mjs ファイルとして保存します。通常は ArrivalScript を継承するクラスを 1 つ export し、固有の static scriptName を定義します。複数ファイルの Plugin はフォルダとして保存し、通常は index.mjs を入口にします。

Plugin Host Entity は data.glbUrl から plugins/my-plugin.mjs のような Workspace 相対パスを参照します。複数の Entity が同じ Plugin を使っている場合、変更はすべての Host に反映されます。1 つだけ変更したい場合は別名でコピーし、参照を更新してください。

内容が同一の Plugin ファイルは Apply 時に 1 つの共有 Plugin に統合されることがあります。

Asset

space/assets/ の Asset は文字列 assets/<name> で参照します。このフォルダには実際の Asset ファイルだけを置いてください。ドキュメント、Placeholder、.gitkeep は検証に失敗することがあります。

大きな Model、Splat、画像などには arrival upload を使用します。

検証ルール

arrival validate は次の項目などを検証します。

  • .mjs ファイルを解析できること
  • Entity が idtypedata を持つこと
  • Plugin と Asset の参照を解決できること
  • 欠落した参照や壊れた参照がないこと

Cutscene と .path ファイル

アニメーション、オブジェクト移動、カメラ Flythrough などは .path ファイルとして作成できます。.path は JSON の Sequence Asset であり、Plugin は必要ありません。

  1. reference/docs/cutscenes-via-mcp.md の形式で .path ファイルを作成します。
  2. arrival upload animation.path でアップロードします。
  3. アップロードした Asset を参照する Entity を作成または編集します。
  4. arrival validate、続けて arrival push を実行します。

独自のロジック、入力、UI、Physics が必要な場合は Plugin を使用します。純粋なアニメーションやカメラ Sequence には .path Cutscene を使用します。loopautoplay.path ではなく Cutscene Entity の設定に記述します。

注意

Plugin の onInstall() Hook はアプリ内でのインストール時に実行されます。CLI または MCP Deployment では実行されません。CLI から Deployment する場合は Entity データに Plugin Parameter を直接設定してください。

動作と制限

  • arrival dev と Live Hot Reload はまだ利用できません。
  • 現在の Workflow は Last-Writer-Wins です。
  • 同時編集は自動的に Merge されません。
  • ローカル削除は arrival push --force 後に Live コンテンツを削除する場合があります。
  • 大きな Asset には arrival upload を使用してください。

トラブルシューティング

「Not logged in」と表示された場合は arrival login を実行します。保存先が空でない場合は別のディレクトリを使うか --force を指定します。検証エラーでは表示されたファイルとメッセージを確認します。変更が表示されない場合はブラウザで Space を Reload してください。