プロフェッショナルな開発スタジオにとって、サードパーティツールを設定し、自動化に投資することは、開発者の生産性を劇的に向上させることができます。ロブロックスのクラウドファーストアプローチには多くの利点がありますが、開発ワークフローの特定の部分をクラウドの外に移動することで、大規模なチームが時間の経過に伴う変更を追跡し、コードをレビューし、すでに慣れ親しんでいる言語やツールを使用するのに役立ちます。
- 外部のテキストエディタを使用したり、コードをバージョン管理に保持したいだけの場合は、Script Syncが素晴らしい選択肢です。
- プロジェクト全体をローカルファイルのセットとして管理したい場合は、このページでいくつかのツールと戦略を紹介します。
- チーム全体のワークフローとそのトレードオフを比較するには、ファイルベースのワークフローを比較するを参照してください。
同期の問題
外部ツールをロブロックスと使用することは、基本的には_同期_の問題です:
- ロブロックスのインスタンスをディスク上のファイルとして存在させ、自分のツールを使って作業できるようにしたい。
- 作業が終わった後、ファイルをロブロックスプロジェクトに戻す必要があります。
- その間に他の誰かが同じファイルを変更した場合、競合を処理する必要があります。
全体のソリューションがシームレスで自動的に感じられるためには、a) ファイルの変更をリッスンし、b) これらの変更をスタジオに取り込む必要があります。
ロブロックスのクラウドファーストアプローチとは異なり、Rojoは「ファイルシステムファースト」アプローチを可能にします。これは、あなたのマシン上でサーバーを実行し、スタジオプラグインと通信してファイルとスタジオデータモデルを同期させます。
Rojo
Rojoは、スタジオとファイルを同期させるための最も一般的なツールです。インストールと実行方法、部分的に管理されたプロジェクトと完全に管理されたプロジェクトの選択については、Rojoを参照してください。
Rokit
異なるチームメンバーが同じツールの異なるバージョンを使用すると、診断が難しい問題が発生します。Rokitのようなツールチェインマネージャーは、各ツールとそのバージョンをリストするrokit.tomlファイルを使用してこれを解決します。これにより、rokit installがすべてのマシンで同じバージョンを設定します。Rokitはプロジェクト内のパッケージではなく、ベースラインの開発環境を管理するため、nvmに似ており、npmとは異なります。例としてのrokit.tomlについては、Rojoをインストールを参照してください。
パッケージマネージャー
ロブロックスには強力なAPIセットが含まれていますが、コミュニティのソフトウェアパッケージを一貫して再現可能な方法で利用したい場合は、パッケージマネージャーが必要です。Wallyは人気のオプションです。Rojoと同様に、Rokitを通じてインストールできます。
ゲームのRojoディレクトリ内で、wally initを実行します。次に、wally.tomlに希望するパッケージを追加します。ファイルは次のようになります:
[package]
name = "my-home-directory/my-new-experience"
version = "0.1.0"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
[dependencies]
react = "jsdotlua/react@17.2.1"
react-roblox = "jsdotlua/react-roblox@17.2.1"
cryo = "phalanxia/cryo@1.0.3"次に、wally installを実行します。WallyはPackagesディレクトリを作成し、指定されたパッケージをそこにダウンロードします。最後のステップは、PackagesディレクトリをRojoに追加して、その内容がロブロックスに同期されるようにすることです。default.project.jsonを開き、パスを追加します。簡単のために、この例ではすべてのパッケージがすべてのスクリプトで利用できるようにReplicatedStorageにディレクトリ全体を追加しますが、特定のパッケージをServerScriptServiceやStarterPlayerScriptsに追加することを好むかもしれません:
{
"name": "my-new-experience",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Shared": {
"$path": "src/shared"
},
"Packages": {
"$path": "Packages"
}
},
...
}
}その後、スクリプト内で他のModuleScriptと同様にパッケージを要求できます:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local React = require(ReplicatedStorage.Packages.react)
local ReactRoblox = require(ReplicatedStorage.Packages["react-roblox"])
local handle = Instance.new("ScreenGui", Players.LocalPlayer.PlayerGui)
local root = ReactRoblox.createRoot(handle)
local helloFrame = React.createElement("TextLabel", {
Text = "こんにちは世界!",
Size = UDim2.new(0, 200, 0, 200),
Position = UDim2.new(0.5, 0, 0.5, 0),
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromRGB(248, 217, 109),
Font = Enum.Font.LuckiestGuy,
TextSize = 24
})
root:render(helloFrame)他のほとんどのソフトウェアプロジェクトと同様に、目標は貢献者がリポジトリをクローンし、Rokitをインストールし、いくつかのコマンドを実行して、チームの他のメンバーと同じ開発環境を持つことができるようにすることです。
バージョン管理
プレーンテキストファイルのセットをコンピュータに持つことで、さまざまな機能が解放されますが、主な機能は_バージョン管理_です。ファイルをGitまたはMercurialリポジトリに保存し、リモートリポジトリをホストしてGitHub、GitLab、またはBitbucketでコードの変更をレビューし、好きなテキストエディタを使用できます。
Visual Studio CodeとCursorは最も大きな拡張エコシステムを持っていますが、Sublime Text、Notepad++、Vimも人気の選択肢です。どのエディタを選んでも、スタジオのスクリプトエディタの機能に合わせるにはいくつかの拡張が必要です。
次のような追加を検討することもできます:
- 一般的な問題をキャッチし、コーディングスタンダードを強制するためのリンターselene
- コードフォーマッターStyLua
- 自動補完、型チェックなどのための言語サーバーLuau Language Server
ビルド、アセット、マージツール
- Luneは、多くのチームがビルド、デプロイ、および自動化スクリプトに使用するスタンドアロンのLuauランタイムです。
- Tarmacは、ディスクからロブロックスに画像をアップロードし、ファイルパスをアセットIDにマッピングするモジュールを生成します。
- rbx-mergeは、Gitがロブロックスのプレースとモデルファイルの可読な差分を表示し、競合しない変更をマージできるようにします。セットアップについては、完全に管理されたRojoを参照してください。
すべてを元に戻す
サードパーティツールはロブロックススタジオに変更を同期させるため、ワークフローのどの部分もロックインを伴いません。いつでもこれらのツールの1つまたはすべての使用を停止し、スタジオでゲームを専ら編集することに戻ることができます。このリスクのなさは、サードパーティツールを試すことを特に魅力的にします。