プロの開発スタジオの場合、サードパーティツールの設定と自動化への投資は、開発者の生産性を劇的に向上させることができます。Roblox(ロブロックス)blox のクラウド第一のアプローチには多くのメリットがありますが、開発ワークフローの特定の部分をクラウドの外に移動すると、より大きなチームが変更を追跡したり、コードをレビューしたり、既に熟知している言語やツールを使用したりするのを助けることができます。
同期問題
コアとして、Roblox で外部ツールを使用することは、同期 問題です:
- Roblox スクリプトをディスク上の .luau ファイルとして存在させ、自分のツールを使って作業できるようにしたい。
- 作業が終わった後、ファイルを Roblox プロジェクトに戻す必要があります。
- その間に他の誰かが同じファイルを変更した場合、すべてのコンフリクトを処理する必要があります。
ソリューション全体がスムーズで自動的に感じられるようにするには、a) ファイルの変更を聞き、b) これらの変更をStudioに戻す必要があります。言い換えれば、サーバーと Studio プラグインが必要で、これが Rojo がこの問題を解決する方法です。
Roblox のクラウド第一のアプローチではなく、Rojo は「ファイルシステム第一」のアプローチを許可します。プロジェクト内のすべてのスクリプトファイルを Luau ファイルに抽出します。その後、サーバーを実行します。Rojo プラグインは、サーバーに接続して、これらのファイルを Studio と同期します。
フォーマンでロジョをインストールする
手動で Rojo バイナリをダウンロードして実行できますが、その方法ではチーム内の異なる開発者が異なる Rojo バージョンを使用するリスクがあります。より良い解決策は、フォアマン のようなツールマネージャーを使用し、設定ファイル—リポジトリとバージョンのリスト—を使用して、マシン間でインストールとアップグレードプロセスを一貫させることです。
プロジェクト内のパッケージではなく、ベース開発環境を管理するため、Foreman は nvm よりも npm に近いが、比較は完全ではない単純な foreman.toml ファイルは次のように見えます:
[tools]
rojo = { github = "rojo-rbx/rojo", version = "7.4.1" }
wally = { github = "UpliftGames/wally", version = "0.3.2" }
次に、これらのツールを foreman install でインストールします。グローバルの foreman.toml ファイルに加えて、Foreman はプロジェクトごとのファイルをサポートしているので、異なるバージョンの Rojo、Wally、またはその他のツールを異なるプロジェクトで簡単に使用し、全体のチームを同じバージョンで維持できます。
ツールが新しいバージョンをリリースすると、.toml ファイルのバージョン番号を明示的に上げ、Foreman を使用してアップグレードを実行し、新しいバージョンをテストし、問題が発生した場合はダウングレードします。コマンドとインストール手順については、フォアマン を参照してください。
ロジョを実行
Rojo を Foreman でインストールした後、実際にインストールしたものは Rojo サーバーです。次のステップは、Roblox Studio 用の Rojo プラグインのインストールです:
rojo plugin install
次に、新しいエクスペリエンスのプロジェクト構造を生成し、構築します:
rojo init my-new-experiencecd my-new-experiencerojo build -o my-new-experience.rbxl
代わりに、既存のエクスペリエンスを ポートすることもできます。どちらにしても、プロジェクトがあった後、Rojo サーバーを開始します:
rojo serve
Roblox Studio で、アプリケーションを作成したばかりの .rbxl ファイルを開き、Rojo プラグインを開始し、現在実行中のサーバーに接続して、好ましいテキストエディタで変更を開始し、変更を自動的にスタジオに戻すことができます。
Rojo プロジェクトには、ファイルの名前指定、複数の設定オプション、およびいくつかの制限があり、すべてが Rojo ドキュメント でカバーされています。
パッケージマネージャ
Roblox には包含された API セットが豊富ですが、一貫して再現可能な方法でコミュニティのソフトウェアパッケージを利用したい場合は、パッケージマネージャーが必要です。ウォリー は人気のオプションです。Foreman を通じてインストールできます、同じように Rojo です。
エクスペリエンスの 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.1.0"
react-roblox = "jsdotlua/react-roblox@17.1.0"
cryo = "phalanxia/cryo@1.0.3"
その後、wally installを実行します。Wally は Packages ディレクトリを作成し、指定されたパッケージをそこにダウンロードします。最後のステップは、Packages ディレクトリを Rojo に追加して、その内容が RobloRoblox(ロブロックス) に同期されるようにすることです。Open 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 = "Hello World!",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)
ほかのほとんどのソフトウェアプロジェクトと同様、目標は、貢献者がリポジトリをクローンし、Foreman をインストールし、いくつかのコマンドを実行し、チームの残りのメンバーと同じ開発環境を持つことです。
バージョン管理
コンピュータ上にプレーンテキストファイルのセットを持つと、多くの機能がアンロックされますが、主なものは バージョンコントロール です。スクリプトと設定ファイルを Git または Mercurial リポジトリに保存できます; リモートリポジトリをホストし、GitHub、GitLab、またはBitbucketでコード変更をレビューします; 好きなテキストエディタを使用します。
Visual Studio コード は最も大規模な拡張エコシステムを持っていますが、Sublime Text、Notepad++、およびVim はすべて人気の選択肢です。どのエディタを選択しても、Studio スクリプトエディタの機能に合致するためには、いくつかの拡張が必要になります。
追加することも考えるかもしれません:
- 一般的な問題を捕捉し、コード標準を遵守するためのラインターの例 selene
- コードフォーマッターのような StyLua
- 自動完了、タイプチェックなどの言語サーバーのように、Luau 言語サーバー のように
アセット
このページのツールは、スクリプトに最も適しています;3Dアーティストはすでに Blender や Maya などの外部ツールを使用し、ソースファイルをバージョン管理で保存し、Studio に作品をインポートしています。Studio アセットを持った後、可能な限り パッケージ を使用することをお勧めします。
Roblox のパッケージの実装は、このページのツールと同じ多くの原則に従います:アセットのすべてのコピーを同期する方法を提供する中央リポジトリ、バージョン履歴がある中央化されたリポジトリ。ワークフローを改善する方法に関する詳細情報は、パッケージ を参照してください。
すべてを元に戻す
第三者ツールは、置換するのではなく Roblox Studio に変更を同期するため、このワークフローのどの部分もロックダウンはありません。いつでも、1つまたはすべてのこれらのツールの使用を停止し、Studio でのみエクスペリエンスの編集に戻ることができます。リスクの欠如は、サードパーティのツールで実験することを特に魅力的にします。