roblox-luau-architecture について
Roblox Luau Architectureは、Robloxゲームのコードをモジュール化し、サーバー主導の構成にするためのスキルです。スクリプトの調査、モジュール境界、リモート契約、プレイテストとコンソールによる検証を案内します。
主な機能
- 01設計変更前のスクリプト調査
- 02クライアントとサーバーの責務に沿った配置
- 03リモート契約の定義と検証
- 04役割を絞った深いモジュールの設計
- 05移行とプレイテスト確認の計画
活用シーン
- 01分散したゲームスクリプトのサービス化
- 02クライアント・サーバー間の信頼境界の確認
- 03明確なモジュール責務に基づく機能追加
- 04プレイテストでの設計変更の検証
MCP 対応
Roblox Studio MCPを使ってスクリプトを調査・編集し、プレイテストを開始または停止して、コンソール出力を確認する手順を案内します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ashexplained/ roblox-skills --skill roblox-luau-architectureインストール後、Claude Code で/roblox-luau-architectureを入力して読み込まれたか確認します。
詳細
Roblox Luau アーキテクチャ
目標
Roblox のゲームコードをモジュール化し、サーバーを信頼できる情報源として、拡張しやすい状態に保ちます。アーキテクチャを変更する前に、Roblox Studio MCP を使って既存のスクリプトを調査してください。
MCP ワークフロー
list_roblox_studiosを実行し、必要に応じてset_active_studioを実行してから、get_studio_stateを実行します。script_searchまたはscript_grepでコードを探します。- 編集する前に、
script_readで関連するスクリプトを読みます。 multi_editで編集を適用します。start_stop_playでプレイテストを実施します。get_console_outputで問題がないか確認します。
配置ルール
- 信頼できるゲームロジックは、
ServerScriptServiceまたはサーバー所有のモジュールに配置します。 - 共有定数、型定義、リモート、純粋な共有ヘルパーは
ReplicatedStorageに配置します。 - プレイヤー入力、カメラ、クライアント専用の UI、視覚的な予測処理はクライアントスクリプトに配置します。
workspaceのスクリプトは必要最小限にし、意図を明確にします。タグ付きのインスタンスや設定済みのフォルダーを管理する、サービス形式のスクリプトを優先します。- クライアントとサーバーに重複した定数を分散させないようにします。
リモートの境界
- クライアントから送られるすべてのリモートのペイロードを信頼できないものとして扱います。
- アクション名を明示し、ペイロードの型を検証する、用途を限定したリモートを優先します。
- 経済、インベントリ、戦闘、配置に影響する、プレイヤー起点のリモートにはレート制限を設けます。
- RemoteFunctions の使用は最小限にします。クライアントから呼び出す、長時間待機するサーバー処理は避けます。
- 通貨、インベントリ、所有権、ダメージ、クエストの完了、購入アイテムの付与をクライアントに決定させてはいけません。
モジュールのパターン
以下にはモジュールを使用します。
InitとStart形式のライフサイクルを持つサービス。- データアクセスのラッパー。
- 経済の計算。
- 報酬テーブルとバランス調整用の定数。
- クライアント側の UI コントローラー。
- 決定論的で、副作用が少ない共有ユーティリティ関数。
別のシステムが無関係な処理を取り込まずに依存できるよう、モジュールを十分に小さく保ちます。
深いモジュールを優先する
深いモジュール、つまり小さく安定したインターフェースの背後に多くの振る舞いを持つモジュールを目指します。インターフェースが実装とほぼ同じくらい複雑な浅いモジュールは、実際の複雑さを隠している場合にのみ価値があります。
- インターフェース = 呼び出し側が把握しておくべきすべての事項です。関数シグネチャに加え、不変条件、順序、エラーの種類、呼び出し可能な側(クライアント/サーバー)が含まれます。Roblox では、リモートの契約もインターフェースの一部です。
- 削除テスト: モジュールを削除したと想像してください。複雑さがなくなるなら、それは単なる中継役なのでインライン化します。同じ複雑さが複数の呼び出し箇所に再び現れるなら、そのモジュールには価値があるので維持し、さらに深くします。
- 局所性: 関連する振る舞いと、その貴重な状態に関するルールを1つのモジュールにまとめます。そうすれば、変更やバグ、理解に必要な知識を1か所に集約でき、LocalScript、サーバーの Script、3つの定数ファイルに分散せずに済みます。
- あるインターフェースを満たすアダプターが1つなら、境界は仮説にすぎません。2つあれば、実際の境界です。実装が1つしかないのに間接化を導入しないでください。
適切な境界には、「Handler」や「Manager」のような汎用名ではなく、「コイン経済サービス」や「クエストトラッカー」のように、ゲーム固有の用語を使った名前を付けます。
リファクタリングの成果物
アーキテクチャの変更を提案または実施する場合は、以下を含めます。
- 現在のスクリプトの配置場所と役割。
- 提案するモジュール/サービスの境界。
- リモートの契約の変更。
- 移行手順。
- プレイテストとコンソールの確認項目。
次のステップ
roblox-to-issues を使ってアーキテクチャ作業を分割し、安全な変更を1つずつ反映します。それぞれの変更を roblox-playtest-qa で検証してください。貴重な状態を扱うモジュールについては、roblox-security-economy で信頼境界を確認します。既存の負債を整理する場合は、roblox-code-maintenance-refactor を使用します。