scenario-roblox-expert について
Roblox Studio のエージェントやテクニカルディレクター向けに、証拠に基づく制作・テスト・レビュー手順を定めるスキルです。性能予算、オフライン検査、プレイテスト、画像確認と、Roblox 向け共通 Python ツールキットを組み合わせます。
主な機能
- 01証拠に基づく制作・レビュー手順
- 02Studio MCP とプレイテストの手順
- 03Luau のオフライン検査とテスト
- 04フレーム時間と視覚品質の基準
- 05Roblox スキル共通の Python ツールキット
活用シーン
- 01デバイス予算に沿った Roblox 機能の計画
- 02Studio 起動前のスクリプト検査
- 03サーバーとクライアントのフレーム時間測定
- 04キャプチャによる視覚変更の確認
- 05監査済み Roblox Studio 変更の納品
MCP 対応
共通ツールキットを介して Studio 内蔵 MCP サーバーを呼び出し、Roblox のプレースを検査・編集・テストします。ツールのテキストではなく、解析された結果を確認する方針です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-roblox-expertインストール後、Claude Code で/scenario-roblox-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdtraps.mdscripts/rbx_check.pyrbx_env.pyrbx_mcp.pyrbx_play.pyrbx_review.pyrbx_run.pyscripts/agentkit/Audit.luaulune_audit.luauSpec.luauStats.luau詳細
Roblox エキスパート(テクニカルディレクターおよびエージェントプロトコル)
対象:scenario-roblox-expert ツールキットを通じて操作する、macOS 上の Roblox Studio(2026 年 10 月ビルド)。
Roblox のエキスパートとしての作業は、証拠に基づいて繰り返すループです。予算を設定し、1 つのステージを作り、測定し、確認し、修正して、次に進みます。マウスを使えないエージェントは、Studio 組み込みの MCP サーバー、オフラインチェック、テキストファイルを使ってこれを進めます。合格とするのは、解析済みの結果に基づく場合だけであり、1 つのシグナルだけで判断することはありません。このスキルは、そのプロトコル、すべての scenario-roblox-* スキルが呼び出す共有ツールキット(scripts/)、そしてチームの構成図です。ここに記載されている兄弟スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください
(npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマに基づいて進め、不足していることを明示してください。
ステータス(2026-10-18): ツールキットは Studio 0.743 で実際に動作し、36 件のライブテストと 16 件のオフラインテストはすべて合格しました(references/procedures.md)。run_headless の実行は保留中です。インタラクティブな Studio がないマシンが必要です。
姿勢(エキスパートならではの違い)
- ツールのテキストではなく、解析済みの結果で合格とします。
execute_luauが返すのは最初の戻り値だけであり、print の出力先は Output ログです(確認済み)。rbx_run.runは、チャンクの行番号とともにok、result、error、outputを返します。エージェントが MCP を介して作成したものは何でも「結果を監査」してください(Roblox IAS Q&A、KnFJl6z5UN0 [00:21:23])。 - エージェントごとに場所を 1 つにし、一度開いたら、エージェントは閉じません。 自分で開いていないウィンドウでは、決してコードを実行しないでください。サーバーは、ゲームを変更する前にユーザーへの確認を求めます。場所を SIGTERM で終了すると、ウィンドウがハングし、サーバーからすべての Studio が見えなくなりました(確認済み)。場所を閉じるのはオーケストレーターの役割であり、ユーザーの同意が必要です。
- 対象環境で、フレーム時間を予算と照らし合わせます。 平均 FPS より、安定したフレーム時間が重要です(Andrew、XLCZfGEm9tU [00:02:12])。トリアージの順序は、動作、実機、フレームレート、Stats、MicroProfiler です(McNeill、rwLEnBtXr30 [00:29:19])。Studio のメモリ表示は「正しくありません」(McNeill、cWDNVvOh4o0 [00:28:25])。ここでは小規模なプレイテストで 3,800 MB と表示されました。
- 目で見て、確認もします。 見た目を変更するたびに、固定カメラからキャプチャを取り、
image_checksを実行し、変更前と変更後のcompareを行って、コンタクトシートを開いてください。感覚は自動化できません(RDC 2026、vumAuOqSmNA [00:29:36])。AI には「自動的にセンスが備わっているわけではありません」(SmartyRBX、da-wHJpNhBo [00:07:35])。 - 小さく進め、赤を先に、緑を後にします。 プロンプト 1 つにつき機能は 1 つです(SmartyRBX、0ENeVVC9QT0 [00:10:26])。動作する回答を得たら、セキュリティレビューを行い、死亡とリスポーンをテストしてください(SimTek、-0H6JRtrA2Y [00:03:53, 00:06:42])。まず
Specテストを書き、失敗することを確認します。 - Studio を使う前に、テキストファイル、Git、ゲートを用意します。 型エラーと lint エラーを検出する CI ゲートが、「ゲームで起きる問題の 90 パーセント」を捕捉します(CJ_Oyer、gapG2tH-etI [00:12:50])。Git はセーフティネットです(Roblox Learn、v8r1d80DxOY [00:00:45])。単体の
luau-analyzeではなく、rbx_check(Roblox 定義を使う luau-lsp)でゲートを設けます。 - 何が保持されるかを把握します。 Edit での変更は、誰かが保存するまで開いているセッション内にとどまり、MCP ツールには保存機能がありません。プレイを停止すると、Server の書き込みは消えます(L24、L25)。
$ignoreUnknownInstancesがない場合、Rojo の再接続によって Studio のみのインスタンスが削除されます(Distracted Games、Zhl_NAPMztY [00:44:28])。 - GUI 専用ツールについて、正直に伝えます。 Animation Editor、terrain ブラシ、Avatar Setup、Accessory Fitting Tool、Creator Hub のダッシュボード、公開は GUI で行う手順です。代替手段(
Terrain:WriteVoxels、KeyframeSequenceProvider:RegisterKeyframeSequence、AvatarCreationService:ValidateUGCAccessoryAsync)または GUI の手順を案内してください(references/gui-paths.md)。ユーザーの許可なしに、公開、アップロード、Robux の消費をしてはいけません。
チャネル
| チャネル | 用途 | コスト(実測値) | ルール |
|---|---|---|---|
Studio MCP, Edit (rbx_run.run) | スクリプトのビルド、監査、調査、編集 | 1 回あたり 67 ms;初回起動は 18.3 s | 自分のプレースで使用;1,000 項目ごとにチャンクを返す |
Playtest (rbx_play.Playtest) | サーバーおよびクライアントのコード、キー、歩行、マウス、プレイキャプチャ | 準備完了まで 4.2 s | サーバー 1 台、クライアント 1 台;例外発生後も停止する |
Offline (rbx_check, Lune, lune_audit) | Studio の前段階のゲート、CI、純粋ロジックのテスト | 数秒 | Lune には物理演算もネットワークもない |
| Files (Rojo, Script Sync) | Git で管理する永続的なコード | rojo build は 0.04 s | Studio で開いている .rbxl は決して再ビルドしない |
Headless RunScript (rbx_run.run_headless) | インタラクティブな Studio を使わない CI | 実行 1 回あたり約 6 s | Studio が実行中の場合は拒否する |
| Open Cloud Luau Execution | 公開済みのプレースに対する CI アサーション | 1 分あたり 5 タスク | API キーとユーザーの許可が必要;物理演算なし、永続化されない |
並行実行:rbx_env.place_slot() を通じてプレースを使用できるエージェントは最大 RBX_MAX(デフォルト 3)です。各プレースは約 2.9 GB を使用する独立した Studio プロセスで、すべてのウィンドウが常時レンダリングされます。open_place は、マシン全体で開いているプレースウィンドウが RBX_MAX_PLACES(デフォルト 4)を超えている場合、GPU 使用率または GPU メモリ使用率が 85% を超えている場合、あるいは RAM 使用率が 75% を超えている場合、待機します。実行が終わったら、すぐにプレースを閉じてください。複数の StudioMCP プロキシが 1 つのポートを共有するため、ホストプロキシが切り替わる間、Studio.call は 45 s にわたって再試行します。
まず確認すること
一度だけ確認してから、次を実行します。
- 対象デバイスと最も性能の低いデバイス(デフォルト:スマートフォン、60 fps、16.67 ms);
- サーバーあたりのプレイヤー数とジャンル;
- Rojo、Script Sync、Studio のみのいずれを使用するか;
- Server Authority またはストリーミングが必要か(新しいプレースでは
StreamingEnabledが有効です); - エージェント自身のプレースと、成果物。
次に、rbx_env.doctor() と、開始時のプレースに対する Audit.all(game) を実行します。予算、同期ツール、データモデルの計画、担当者を計画に記載します。
エキスパートループ
- 数値で要件をまとめる。 デバイスごとの予算、プレイヤー数、メモリ、アートスタイル。GATE:以降のチェックすべてに数値を含めます。
- 配置する。
place_slot内でnew_placeの後にopen_placeを一度実行します。GATE:open_places()に表示され、Auditの集計にエラーがないこと。new_placeは<dir>/default.project.jsonを上書きします。dirには自分で用意した新しいフォルダーを指定し、ユーザーのプロジェクトは絶対に指定しないでください。- 既存のゲームの場合:開いているウィンドウでの編集内容はディスクに保存されていないため、まずユーザーに保存を依頼します。保存済みの place のコピーをコードビルドとマージし(scenario-roblox-tooling P15、
merge_place、任意のリポジトリ)、マージしたものを開いてください。ユーザーのファイルは絶対に開かないでください。 - 作業ツリーまたはソースのコピーを編集する場合:ユーザーの
rojo serveがsrc/をウィンドウに同期します。
- ベースラインを取る。
Audit、最初は失敗するSpecテスト、固定カメラからのキャプチャ、プレイテストでのStats.frames。GATE:数値を記録し、シートを開いていること。 - 冪等なチャンクまたはファイルを使ってステージを1つ構築し、ドメインごとの作業は担当者に割り当てます(下記)。 開いている place にインスタンスを追加する場合:procedures.md P2。
- 測定する。
rbx_checkのエラーが0件、Specがすべて成功、Auditに問題がなく、Server と Client のStats.framesがフレームゲート内に収まること:p95 はフレーム予算の1.2倍以下(60 fps で20 ms)、最悪値は2倍以下(33.3 ms)。Heartbeat のステップは vsync 間隔の周辺で揺れるため、健全な 60 fps の place では p95 が17.2~17.4 msとなり、16.67 msぎりぎりのゲートでは失敗します。フレーム落ちは約33 msと表示されます。 - 見た目とチェックの両方を確認する。 同じカメラを使い、
image_checksが ok であること、compareで意図した箇所が変更されていることを確認します。コンタクトシートを開き、オーナーの批評に基づいて評価します。 - 先へ進む前に修正する。 変更は一度に1つだけ行います。
- 証拠を添えて納品する: Verified(実行した内容、結果ファイル、数値、フレーム)と Assumed(実行していない内容)を記載します。操作感を確かめるため、人がまだプレイする必要のある項目も一覧にします。
ツールキット(scripts/、すべての scenario-roblox-* スキルの契約)
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1].parent / "scenario-roblox-expert" / "scripts"))
| モジュール | 主な呼び出し | 戻り値 |
|---|---|---|
rbx_env | doctor(), new_place(dir, name, template, src), open_place(path), open_places(), place_slot(), machine_load(), wait_for_gpu() | dict;Path;バインド済みの Studio;[{id, name}];スロットインデックス;パーセント |
rbx_mcp | Studio(place=...): .call(tool, args), .luau(code, dm), .capture(png, extra), .studios(), .tools() | MCP 結果 dict;テキスト;Path |
rbx_run | run(studio, code, dm="Edit", kit=[...]), run_headless(place, code, kit) | {ok, result, error, output} |
rbx_play | Playtest(studio): .server(code, kit), .client(code, kit), .wait_for, .press(key, hold), .walk_to([x, y, z]), .keys, .mouse, .console, .capture, .mode | rbx_run の dict;ツールのテキスト |
rbx_check | check(paths, code, sourcemap, selene, stylua, solver="both") | {ok, errors, warnings, tools};旧ソルバーまたは新ソルバーのタグが付いた指摘 |
rbx_review | image_checks(png), compare(a, b), contact_sheet(pngs, out) | フラグと ok;changed_fraction;パス |
| AgentKit | Audit.all(game), Stats.snapshot(), Stats.frames(s), Stats.diff, Spec.new() | 指摘と集計;数値;{passed, failed, total} |
完全なシグネチャ、戻り値の形式、ツール引数については、
references/procedures.md のセクション 1 を参照してください。ドメインコードは各兄弟の
scripts/rbx_<domain>.py および scripts/agentkit/<domain>/ に配置します。rbx_env.close_place は
オーケストレーター専用で、デフォルトでは拒否されます。
数値
| 値 | 対象 | 出典 |
|---|---|---|
| 16.67 / 33.33 ms | 60 / 30 fps のフレーム | Andrew [00:02:12] |
| 67 ms | execute_luau の Edit での 1 回の往復 | 実測、L9 |
| 4.2 s / 18.3 s | Playtest の準備完了 / 最初の open_place | 実測、L13、L3 |
| 60 fps、p95 17.5 ms | Studio の空のテストプレイス、サーバーとクライアント | 実測、L16、L17 |
| p95 20 ms、最大 33.3 ms | 60 fps のフレームゲート(予算の 1.2 倍、2 倍) | L16、L17 から算出 |
| 1.3 GB | 2 GB のスマートフォンでのクライアントメモリ目標 | McNeill [00:27:53] |
| 約 1,000 | task.wait() 前のチャンクあたりのアイテム数 | ツールの説明 |
| 20,000 / 4,000 | MeshPart あたり / アクセサリーあたりの三角形数 | 仕様ページ |
| 4096 px | プレイスでのテクスチャの最大辺(アクセサリーは 2048) | devforum 4316229 |
| 1 秒あたり 500、1,000 バイト | クライアントのリモートリクエスト数、UnreliableRemoteEvent のペイロード | RemoteEvent のリファレンス |
品質ゲート
- 測定可能:
rbx_checkのエラー数が 0 であること。赤い実行を 1 回行った後、Specのfailed == 0かつtotal > 0であること。Auditのtally.error == 0で、非推奨 API がなくなっていること。Stats.framesの p95 と最大値が予算内であること。Playtest 後にコンソールにエラーがないこと。get_studio_stateが Edit に戻っていること。 - 視覚: すべてのキャプチャが
image_checksに合格すること。同じカメラで変更前と変更後を撮影すること。最大 1,600 px のコンタクトシートを開いて判定すること。
よくある間違い
| 間違い | 症状 | 対処 |
|---|---|---|
studio_id がない、またはウィンドウが違う | 編集内容がユーザーのゲームに反映される | Studio(place=...) で正確な名前を指定する |
| ツールのテキストや終了コードを信頼する | 出力が欠落する。エラーがあっても RunScript が 0 で終了する | rbx_run のペイロードを使う |
| Playtest を停止し忘れる | Edit のデータモデルが「Play モードでは利用できません」になる | with Playtest(s) を使い、mode() を確認する |
Rojo プロジェクトで "Position" を使う | パーツが原点に配置され、ビルドの終了コードが 0 になる | CFrame(12 個の数値)を使う。new_place が変換する |
[ または ( を含む script_grep | 「一致する項目が見つかりません」 | % でエスケープする |
| yield なしで長いチャンクを実行する | Studio がフリーズし、MCP が切断される | task.wait() を使い、1,000 件ずつ処理する |
| Studio のメモリや FPS をゲート条件にする | 数値がデバイスと一致しない | Stats.frames の p95 とデバイステストを使う |
| マルチクライアントテストを実施したと主張する | 1 回の MCP Playtest は 1 クライアントのみ | StudioTestService を使う(ここでは未実行) |
| GUI スクリプトや Studio への SIGTERM | ウィンドウが応答しなくなり、サーバー一覧が空になる | ユーザーに依頼する。シグナルは送らない |
ルーティングと引き継ぎ
| スキル | 依頼に次の内容が含まれる場合はこちらにルーティングします |
|---|---|
| scenario-roblox-architecture | プロジェクト構成、クライアントとサーバーの分割、RunContext、サービス、ModuleScripts、フレームワーク、Attributes、タグ |
| scenario-roblox-luau | タスクライブラリ、遅延イベント、型、OOP、バッファー、ネイティブコード、Parallel Luau、コード内のメモリリーク |
| scenario-roblox-networking | リモート、「エクスプロイター」、「リモートスパム」、検証、レート制限、ネットワーク所有権、Server Authority |
| scenario-roblox-data | 「データが保存されない」、DataStores、ProfileStore、移行、MemoryStore、MessagingService、テレポート |
| scenario-roblox-environment | 建築、地形、マテリアル、MaterialVariant、ライティング、Atmosphere、空、グレーボックス、モデル単位のストリーミング |
| scenario-roblox-vfx-audio | パーティクル、ビーム、トレイル、フリップブック、ヒットエフェクト、Audio API、サウンド、音楽 |
| scenario-roblox-ui | HUD、メニュー、「スマートフォンでUIの表示倍率がおかしい」、ゲームパッド、Input Action System、ローカライズ |
| scenario-roblox-animation | Animator、トラック、リグ、Blenderアニメーションのインポート、IK、顔、キャラクターコントローラー |
| scenario-roblox-gameplay | 戦闘、ヒットボックス、レイキャスト、投射物、「NPCのパスファインディングが動かない」、ゲームループ、乗り物 |
| scenario-roblox-monetization | パス、Developer Products、ProcessReceipt、サブスクリプション、広告、分析、ライブ運用 |
| scenario-roblox-assets | 「Blenderからインポート」、メッシュ、テクスチャ、SurfaceAppearance、「メッシュの検証に失敗する」、UGC |
| scenario-roblox-tooling | Rojo、Wally、Rokit、Selene、StyLua、Lune、CI、Open Cloud、プラグイン、Script Sync |
| scenario-roblox-performance | 「ゲームが重い」、MicroProfiler、メモリ、ストリーミング設定、モバイル、公開 |
分割項目にはそれぞれ担当が1つあり、その担当がパケット内で2つ目のスキルを指定します。
- ストリーミング:設定はパフォーマンス、モデル単位のモードは環境が担当します。
- ヒット検証:ルールはネットワーキング、キャストはゲームプレイが担当します。
- ProcessReceipt:契約はマネタイズ、永続化はデータが担当します。
- AIメッシュ:取り込みはアセット、配置は環境、再利用の予算はパフォーマンスが担当します。
- Server Authority:有効化はネットワーキング、
BindToSimulationのロジックはゲームプレイが担当します。 - メモリリーク:診断はパフォーマンス、クリーンアップコードはluauが担当します。
すべての引き継ぎパケットには、配置パスとウィンドウ、チャンネル、数値化した依頼内容、ツールキットの呼び出し、証拠のパス(results JSON、Audit tally、Spec totals、Stats、contact sheet)、検証済みの内容、仮定、未解決の問題、境界を含めます。受け取り側は、それを基に作業を進める前に、証拠の1つを再現します。
Roblox にシナリオアセットを導入する
| アセット | 生成方法 | 配置先 |
|---|---|---|
| メッシュ、プロップ、キャラクター | scenario-3d | scenario-roblox-assets(インポート、20,000 トライアングル)、その後 environment |
| PBR マップ、タイリング可能なマテリアル | scenario-textures | scenario-roblox-assets(SurfaceAppearance)、scenario-roblox-environment(MaterialVariant) |
| スカイボックス | scenario-skyboxes | scenario-roblox-environment(Sky、6 面) |
| 音楽、SFX、環境音、音声 | scenario-audio | scenario-roblox-vfx-audio(20 MB 未満、7 分、48 kHz) |
| アイコン、アイテムアート、UI パーツ、デカール | scenario-game-assets | scenario-roblox-ui、scenario-roblox-environment |
| フリップブックのフレーム | scenario-sprite-animation | scenario-roblox-vfx-audio(2x2、4x4、または 8x8 のグリッド) |
各アセットはインポート前に確認し(scenario-quality-gate)、インポート後も、受け取り側が評価したキャプチャで確認してください。ファイルをゲームに組み込んでリリースするには、Roblox にアップロードする必要があるため、ユーザーの許可が必要です。
注意点
最初の作業を始める前に references/traps.md を読んでください。2026 年の API の名称変更と置き換え、Studio MCP ツールの情報(is_start、capture_id、datamodel_type "Client"、返信の消失)、プロセス上の危険、Rojo と Script Sync の注意点、バージョン差分に関する最新の修正が記載されています。
参考資料
references/procedures.md:ツールキット API の全情報、チャンクのルール、および各手順とそのテスト結果。references/traps.md:現行 Roblox に関する注意点、MCP とファイルパイプラインの注意点、最新の修正。references/expert-notes.md:出典とタイムスタンプ付きの専門家の見解。references/critique.md:エージェントの Roblox 作業と引き継ぎを評価するための基準。references/gui-paths.md:同じ作業を行うための Studio メニューと、GUI のみで行う手順。references/sources.md:認証情報、URL、最適なタイムスタンプを含むすべての情報源。