Robloxゲームはデフォルトでクラウドに存在します。Studioはあなたのプレース、アセット、スクリプトをRobloxに保存し、バージョン履歴は各プレースの変更を追跡します。多くのチームは、変更をレビューし、完全な履歴を保持し、ビルドとデプロイを自動化できるように、ゲームをバージョン管理システム(Gitなど)に入れたいと考えています。
Robloxのすべてのバージョン管理ワークフローは、1つの質問に答えます:ゲームの各部分の真実のソースはどこにありますか?一般的な3つの回答は次のとおりです:
- Studioネイティブ: Roblox上のプレースがすべての真実のソースです。Script SyncはスクリプトをGitにコピーし、レビューと追跡を可能にします。
- 部分的に管理された: Gitがコードの真実のソースです。Roblox上のプレースは、モデル、地形、UIなどの他のすべての真実のソースです。
- 完全に管理された: Gitがゲーム全体の真実のソースです。Roblox上のプレースは、CIがリポジトリから公開するビルド出力です。
このページでは、これらのワークフローを比較し、それぞれが使用するツールを説明し、チームがそれらの周りに設定する環境をカバーします。ワークフローを設定するには、ワークフローの設定を参照してください。
ファイルベースのワークフローのロードマップ
Robloxは、チームがサードパーティツールを組み立てることなくバージョン管理を使用できるように、ファーストパーティのファイルベースのワークフローに向けて取り組んでいます。これらのワークフローが出荷されるまで、このページのセットアップは、今日のチームにとって機能するものを反映しています。
ワークフローの比較
Studioネイティブ
部分的に管理された
完全に管理された
| Studioネイティブ | 部分的に管理された | 完全に管理された | |
|---|---|---|---|
| 適したチーム | 5人未満のクリエイターが作業するシングルプレースゲームのチーム | 複数のプログラマーとマルチプレースゲームのチーム | すべてのインスタンスとアセットのレビューと履歴が必要なチーム |
| バージョン管理内 | スクリプト | スクリプト、プロジェクト設定、ツール | モデルや画像を含むすべて |
| コンテンツ編集 | チーム作成 | チーム作成とパッケージ | Git内のファイル、CIによってビルドされる |
| 維持するツール | Studioとエディタ以外はなし | RojoとリンティングおよびCIツール | Rojo、マージおよびアセットツール、完全なCIパイプライン |
ワークフローを選択する
ニーズを満たす最もシンプルなワークフローから始めてください。これらのツールのいずれもロックインすることはないので、後でより管理されたワークフローに移行できます。ほとんどのチームは完全に管理されたRojoを必要とせず、これは大きな複雑さを追加します。
ツール
ほとんどのセットアップは、Robloxのいくつかのツールとコミュニティのいくつかのツールを組み合わせています。
Robloxツール
| ツール | 機能 | 使用されるワークフロー |
|---|---|---|
| チーム作成 | Studioでのリアルタイム共同編集。構築、レベルデザイン、アートに最適。 | すべてのワークフロー |
| Script Sync | Studio内のスクリプトをローカルディスクのファイルと双方向で同期します。 | Studioネイティブ |
| パッケージ | インスタンスの再利用可能なバージョン管理されたグループで、プレースやゲーム全体で更新できます。 | Studioネイティブ、部分的に管理された |
| バージョン履歴 | 各プレースの保存されたバージョンを表示、比較、復元できます。 | すべてのワークフロー |
| プレース公開API | プレースファイルをRobloxに公開するオープンクラウドAPI。CIからデプロイするために使用します。 | 部分的に管理された、完全に管理された |
| Luau実行API | Robloxサーバー上のプレースでLuauを実行するオープンクラウドAPI。CIからテストを実行するために使用します。 | 部分的に管理された、完全に管理された |
| アセットAPI | 画像、音声、モデルなどのアセットをアップロードおよび更新するオープンクラウドAPI。 | 完全に管理された |
コミュニティツール
| ツール | 機能 | 使用されるワークフロー |
|---|---|---|
| Rojo | ローカルサーバーとStudioプラグインを通じてディスク上のファイルをStudioに同期し、プロジェクトファイルからプレースおよびモデルファイルをビルドします。Rojo 7.7以降のrojo syncbackコマンドは、既存のプレースをプロジェクトファイルに変換します。 | 部分的に管理された、完全に管理された |
| Rokit | ツールチェインマネージャー。チーム全員が同じツールバージョンを使用するように固定します。 | 部分的に管理された、完全に管理された |
| Wally | コミュニティLuauライブラリのパッケージマネージャー。 | 部分的に管理された、完全に管理された |
| Lune | スタンドアロンのLuauランタイム。ビルド、デプロイ、自動化スクリプトに一般的に使用されます。 | 部分的に管理された、完全に管理された |
| selene | Luauリンター。 | すべてのワークフロー |
| StyLua | Luauコードフォーマッター。 | すべてのワークフロー |
| Luau Language Server | 外部エディタでの自動補完と型チェック。 | すべてのワークフロー |
| Tarmac | ディスクからRobloxに画像をアップロードし、ファイルパスをアセットIDにマッピングするモジュールを生成します。 | 完全に管理された |
| rbx-merge | .rbxl、.rbxlx、.rbxm、および.rbxmxファイルのためのGit diffおよびマージドライバー。可読なdiffを表示し、プロパティレベルで非衝突の変更をマージします。 | 完全に管理された |
Rojoのインストールと実行については、Rojoを参照してください。Rokit、Wally、リンター、その他のツールについては、サードパーティツールを参照してください。
環境
バージョン管理を使用するチームは、通常、未完成の変更がプレイヤーに届かないように環境に作業を分けます。全員が編集する1つのプレースの代わりに、各環境は独自のプレースです。
各環境を同じグループの下に別々のゲームとして作成することをお勧めします。データストア、シークレット、その他のクラウドサービスはゲームにスコープされているため、別々のゲームはテストデータを本番から隔離します。
典型的なセットアップには、次のような環境があります:
| 環境 | 目的 | 更新する人 |
|---|---|---|
| 個人開発 | 各クリエイターのデイリーワーク用の開発プレースのコピー。 | そのクリエイター |
| 共有開発 | チームが作業している不安定な機能のセット。 | プログラマーはレビューされたコードを同期し、アーティストは承認されたコンテンツをコピーします。 |
| アセット | キャラクター、ビルディングキット、セットドレッシングなどのパッケージの標準バージョン。 | アーティスト |
| 安定版 | 定期的な間隔での共有開発のスナップショット。たとえば、週次プレイテスト用。 | CIのみ |
| 本番 | ライブの公開ゲーム。 | リリース承認後に安定版からコピーされる |
個人開発プレースを作成する
- Studioで共有開発プレースを開きます。
- ファイル ⟩ 別名で公開を選択します。
- 開発ゲームを所有するグループを選択します。
- あなたとプロジェクトを識別する名前(例:USER / YourName - ProjectName)で新しいゲームとしてプレースを公開します。
- 共有開発プレースを閉じて、新しい個人コピーを開きます。
すべての環境に一貫した名前を使用してください。たとえば、DEV - ProjectName、ASSET / ProjectName、STABLE / ProjectNameなど、チームがクリエイターダッシュボードで区別できるようにします。
ワークフローの設定
| ワークフロー | 設定ガイド |
|---|---|
| Studioネイティブ | チームと一緒にScript Syncを使用する |
| 部分的に管理された | 部分的に管理されたRojo |
| 完全に管理された | 完全に管理されたRojo |
一般的な問題のトラブルシューティング
| 問題 | 解決策 |
|---|---|
| 開発プレースでのテストが本番データを変更します。 | 開発と本番は同じゲーム内のプレースであるため、データストアを共有します。各環境を独自のゲームに移動します。 |
| チームメイトが互いのスクリプト変更を上書きします。 | 2人が1つのチーム作成セッションに同じスクリプトを同期しています。個人開発プレースにコードを同期し、Gitを通じてマージします。 |
| スクリプトの1つのコピーへの修正が他のコピーに適用されません。 | スクリプトをコピーすると独立したコピーが作成されます。共有の動作はModuleScriptに入れ、CollectionServiceタグでインスタンスにアタッチします。 |
| サーバー専用コードがクライアントに表示されます。 | クライアントに複製されるコンテナ内のモジュール(例:ReplicatedStorage)はクライアントに送信されます。サーバー専用モジュールはServerScriptServiceまたはServerStorageに保持します。 |